创建表之后还没有插入数据的时间 time2
SQL> insert into test1 values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2003-04-26 17:09:43
创建表之后5分钟内插入了1条记录 time3
SQL> insert into test1 values(2);
1 row created.
SQL> commit;
Commit complete.
SQL> exec dbms_lock.sleep(300);
休眠5分钟
PL/SQL procedure successfully completed.
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2003-04-26 17:15:55
休眠后再插入数据 time4
SQL> insert into test1 values(3);
1 row created.
SQL> commit;
Commit complete.
SQL> exec dbms_flashback.enable_at_time(to_date('2003-04-26 17:09:04','yyyy-mm-dd hh24:mi:ss'));
time1
PL/SQL procedure successfully completed.
SQL> select * from test1;
select * from test1
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
SQL> exec dbms_flashback.disable;
PL/SQL procedure successfully completed.
SQL> exec dbms_flashback.enable_at_time(to_date('2003-04-26 17:09:20','yyyy-mm-dd hh24:mi:ss'));
time2
PL/SQL procedure successfully completed.
SQL> select * from test1;
no rows selected
SQL> exec dbms_flashback.disable;
SQL> exec dbms_flashback.enable_at_time(to_date('2003-04-26 17:09:43','yyyy-mm-dd hh24:mi:ss'));
time3
PL/SQL procedure successfully completed.
SQL> select * from test1;
no rows selected
SQL> exec dbms_flashback.disable;
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
SQL> exec dbms_flashback.enable_at_time(to_date('2003-04-26 17:15:55','yyyy-mm-dd hh24:mi:ss'));
time4
PL/SQL procedure successfully completed.
SQL> select * from test1;
A
----------
1
2
SQL> exec dbms_flashback.disable;
PL/SQL procedure successfully completed.
SQL>
其实我们可以看出
使用 SCN 和 TIME 对于 5分钟以内创建的表的 提示信息是有差异的!
SCN 会提示 ORA-01466: unable to read data - table definition has changed
而 time 则提示 no rows selected
通过两个描述的信息来看: 应该是 time 是不精确控制
但为什么两者产生这个信息描述的差异?time看来是认为表存在但无数据
scn 认为是 5分钟内创建的表根本就不存在
总之来说呢,SCN 再精确,对于5分钟之内创建的表也无能为力.