[20131130]12c建表period for valid.txt

简介: [20131130]12c建表period for valid.txt9i以后查询过去某个时间点,加入as of timestap 或者 as of scn,但是这个受undo*参数的控制。
[20131130]12c建表period for valid.txt

9i以后查询过去某个时间点,加入as of timestap 或者 as of scn,但是这个受undo*参数的控制。 当然11G加入Flashback Data
Archive特性,就是通过一个表空间记录表的一些变化,查询历史数据. 实际上这个就是flashback table的扩展(个人认为)!.

12c 有一个新特性 Temporal Validity. 通过加入有效的日期字段,来实现flashback query的特性,可以把它当作flashback query的扩
展。

-- 注意这个特性并不能应用在pdb数据库。

自己测试如下:
1.建立测试环境:

SCOTT@ztest> @ver
BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

SCOTT@ztest> create table t (id number,name varchar2(20),start_date date,end_date date,period for valid(start_date,end_date));
Table created.

--通过period for valid包含两个日期参数,实现这个特性。

2.插入一些测试数据:

insert into t (id,name,start_date,end_date) values ( 1, 'a', trunc(sysdate-5), trunc(sysdate-4) );
insert into t (id,name,start_date,end_date) values ( 2, 'b', trunc(sysdate-4), trunc(sysdate-3) );
insert into t (id,name,start_date,end_date) values ( 3, 'c', trunc(sysdate-3), trunc(sysdate-2) );
insert into t (id,name,start_date,end_date) values ( 4, 'd', trunc(sysdate-2), trunc(sysdate-1) );
insert into t (id,name,start_date,end_date) values ( 5, 'e', trunc(sysdate-1), trunc(sysdate-0) );
commit;

如果插入
SCOTT@ztest> insert into t (id,name,start_date,end_date) values ( 6, 'f', trunc(sysdate+1), trunc(sysdate) );
insert into t (id,name,start_date,end_date) values ( 6, 'f', trunc(sysdate+1), trunc(sysdate) )
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.VALID6B1F6) violated

--因为要求start_date
SCOTT@ztest> SELECT DBMS_METADATA.get_ddl ('TABLE', 'T')  FROM DUAL;
DBMS_METADATA.GET_DDL('TABLE','T')
-----------------------------------------------------------------------------------------
  CREATE TABLE "SCOTT"."T"
   (    "ID" NUMBER,
        "NAME" VARCHAR2(20),
        "START_DATE" DATE,
        "END_DATE" DATE,
         CONSTRAINT "VALID6B1F6" CHECK ((START_DATE 0)) ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
  ILM ENABLE LIFECYCLE MANAGEMENT

SELECT obj#,
       col#,
       segcol#,
       SEGCOLLENGTH,
       OFFSET,
       NAME,
       TYPE#,
       LENGTH,
       INTCOL#,
       default$
  FROM sys.col$
 WHERE obj# IN (SELECT data_object_id
                  FROM dba_objects
                 WHERE owner = USER AND object_name = 'T');

      OBJ#       COL#    SEGCOL# SEGCOLLENGTH     OFFSET NAME                      TYPE#     LENGTH    INTCOL# DEFAULT$
---------- ---------- ---------- ------------ ---------- -------------------- ---------- ---------- ---------- -----------------------------
     92045          0          0           22          0 VALID                         2         22          1 438774
     92045          1          1           22          0 ID                            2         22          2
     92045          2          2           20          0 NAME                          1         20          3
     92045          3          3            7          0 START_DATE                   12          7          4
     92045          4          4            7          0 END_DATE                     12          7          5

--可以发现插入一个valid字段,相当于隐含字段。缺省值438774.

SCOTT@ztest> select t.valid,t.* from t ;
     VALID         ID NAME                 START_DATE          END_DATE
---------- ---------- -------------------- ------------------- -------------------
    438774          1 a                    2013-11-27 00:00:00 2013-11-28 00:00:00
    438774          2 b                    2013-11-28 00:00:00 2013-11-29 00:00:00
    438774          3 c                    2013-11-29 00:00:00 2013-11-30 00:00:00
    438774          4 d                    2013-11-30 00:00:00 2013-12-01 00:00:00
    438774          5 e                    2013-12-01 00:00:00 2013-12-02 00:00:00


3.测试period for valid特性:
SCOTT@ztest> select sysdate-3,t.* from t as of period for valid sysdate-3;
SYSDATE-3                   ID NAME                 START_DATE          END_DATE
------------------- ---------- -------------------- ------------------- -------------------
2013-11-29 09:39:44          3 c                    2013-11-29 00:00:00 2013-11-30 00:00:00

--仅仅显示1条记录。

SCOTT@ztest> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  b0s6qymaxn4d1, child number 0
-------------------------------------
select t.* from t as of period for valid sysdate-3

Plan hash value: 1601196873

--------------------------------------------------------
| Id  | Operation         | Name | E-Rows | Cost (%CPU)|
--------------------------------------------------------
|   0 | SELECT STATEMENT  |      |        |     3 (100)|
|*  1 |  TABLE ACCESS FULL| T    |      1 |     3   (0)|
--------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter((("T"."START_DATE" IS NULL OR
              "T"."START_DATE"
              "T"."END_DATE">SYSDATE@!-3)))


--注意过滤条件。(("T"."START_DATE" IS NULL OR "T"."START_DATE"SYSDATE@!-3))
--也就是日期不为空的情况下在start_date与end_date之间的才显示。




目录
相关文章
|
5月前
pd.set_option()参数详解
pd.set_option()参数详解
49 0
|
6月前
如何将 bapi_xbp_job_spoollist_read_20 的 TABLES 参数 SPOOL_LIST 本地导出成 Excel
如何将 bapi_xbp_job_spoollist_read_20 的 TABLES 参数 SPOOL_LIST 本地导出成 Excel
28 0
|
7月前
|
SQL 关系型数据库 MySQL
mysql查询出现QSqlQuery::value: not positioned on a valid record
mysql查询出现QSqlQuery::value: not positioned on a valid record
122 0
|
弹性计算 Linux
df命令无法执行报错df: cannot read table of mounted file systems
df命令无法执行报错df: cannot read table of mounted file systems
df命令无法执行报错df: cannot read table of mounted file systems
|
SQL 关系型数据库 MySQL
Influx Sql系列教程四:series/point/tag/field
influxdb中的一条记录point,主要可以分为三类,必须存在的time(时间),string类型的tag,以及其他成员field;而series则是一个measurement中保存策略和tag集构成;
306 0
|
存储 测试技术 Apache
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
161 0
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
|
SQL 关系型数据库 Oracle
[20180211]current_schema与dblink.txt
[20180211]current_schema与dblink.txt --//有时候调优sql语句,经常在回话设在alter session set current_schema=scott,然后执行sql语句.
1085 0
|
机器学习/深度学习 网络协议 Oracle
[20180123]测试SQLNET.EXPIRE_TIME参数.txt
[20180123]测试SQLNET.EXPIRE_TIME参数.txt --//曾经写过一篇linux内核网络参数测试tcp_keepalive,链接http://blog.itpub.net/267265/viewspace-2138391/ --//测试服务端会定时发起连接监测与client的连接状态. 参数解析: /proc/sys/net/ipv4/tcp_keepalive_time    当keepalive起用的时候,TCP发送keepalive消息的频度。
945 0