flashback技術之---flashback query
--建立測試表並分不同時間插入資料,記錄插入之後的時間。
SQL> create table t(id number,ins_date date) tablespace users;
Table created.
SQL> insert into t values(1,sysdate);
1 row created.
SQL> commit;
Commit complete.
SQL> select sysdate from dual;
SYSDATE
-----------------
20120718 05:10:28
SQL> insert into t values(2,sysdate);
1 row created.
SQL> commit;
Commit complete.
SQL> select sysdate from dual;
SYSDATE
-----------------
20120718 05:11:20
SQL> insert into t values(3,sysdate);
1 row created.
SQL> commit;
Commit complete.
SQL> select sysdate from dual;
SYSDATE
-----------------
20120718 05:12:50
--開始執行閃回查詢,分別根據上面記錄的時間來查詢不同時間點的資料
SQL> select * from t;
ID INS_DATE
---------- -----------------
1 20120718 05:09:55
2 20120718 05:10:36
3 20120718 05:11:30
SQL> SELECT * FROM t AS OF TIMESTAMP TO_TIMESTAMP('20120718 05:10:28', 'yyyymmdd hh24:mi:ss');
ID INS_DATE
---------- -----------------
1 20120718 05:09:55
SQL> SELECT * FROM t AS OF TIMESTAMP TO_TIMESTAMP('20120718 05:11:20', 'yyyymmdd hh24:mi:ss');
ID INS_DATE
---------- -----------------
1 20120718 05:09:55
2 20120718 05:10:36
SQL> SELECT * FROM t AS OF TIMESTAMP TO_TIMESTAMP('20120718 05:12:50', 'yyyymmdd hh24:mi:ss');
ID INS_DATE
---------- -----------------
1 20120718 05:09:55
2 20120718 05:10:36
3 20120718 05:11:30
也可以通過scn來執行閃回查詢,這個是最精確的:
SQL> truncate table t;
Table truncated.
SQL> insert into t values(1,sysdate);
1 row created.
SQL> commit;
Commit complete.
SQL> select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
310281
SQL> insert into t values(2,sysdate);
1 row created.
SQL> commit;
Commit complete.
SQL> select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
310286
SQL> insert into t values(3,sysdate);
1 row created.
SQL> commit;
Commit complete.
SQL> select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
310291
SQL> select * from t;
ID INS_DATE
---------- -----------------
1 20120718 05:23:48
2 20120718 05:23:59
3 20120718 05:24:12
SQL> SELECT * FROM t AS OF scn 310281;
ID INS_DATE
---------- -----------------
1 20120718 05:23:48
SQL> SELECT * FROM t AS OF scn 310286;
ID INS_DATE
---------- -----------------
1 20120718 05:23:48
2 20120718 05:23:59
SQL> SELECT * FROM t AS OF scn 310291;
ID INS_DATE
---------- -----------------
1 20120718 05:23:48
2 20120718 05:23:59
3 20120718 05:24:12
同樣,採用dbms_flashback包,也可以實現上述查詢,dbms_flashback的功能就是將時鐘回退到指定的時間點或scn,然後就可以通過普通查詢的方式來查詢資料:
SQL> create table t(id number,ins_date date) tablespace users;
Table created.
SQL> insert into t values(1,sysdate);
1 row created.
SQL> commit;
Commit complete.
SQL> select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
310565
SQL> insert into t values(2,sysdate);
1 row created.
SQL> commit;
Commit complete.
SQL> select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
310570
SQL> insert into t values(3,sysdate);
1 row created.
SQL> commit;
Commit complete.
SQL> select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
310576
--開始執行閃回查詢:
SQL> exec DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(310565);
PL/SQL procedure successfully completed.
SQL> select * from t;
ID INS_DATE
---------- -----------------
1 20120718 05:36:57
SQL> exec DBMS_FLASHBACK.DISABLE;
PL/SQL procedure successfully completed.
SQL> exec DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(310570);
PL/SQL procedure successfully completed.
SQL> select * from t;
ID INS_DATE
---------- -----------------
1 20120718 05:36:57
2 20120718 05:37:18
SQL> exec DBMS_FLASHBACK.DISABLE;
PL/SQL procedure successfully completed.
SQL> exec DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(310576);
PL/SQL procedure successfully completed.
SQL> select * from t;
ID INS_DATE
---------- -----------------
1 20120718 05:36:57
2 20120718 05:37:18
3 20120718 05:37:31
SQL> exec DBMS_FLASHBACK.DISABLE;
PL/SQL procedure successfully completed.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10972173/viewspace-738210/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- flashback技術之---flashback Transaction Query
- flashback技術之---flashback version query
- flashback技術之---flashback drop
- flashback技術之---flashback table
- flashback技術之---flashback databaseDatabase
- flashback總結四之Flashback_Query
- Oracle閃回技術--Flashback Version QueryOracle
- flashback總結六之Flashback_Transaction_Query
- Oracle10g的Flashback之Flashback Transaction QueryOracle
- flashback總結五之Flashback_Query_Version(上)
- 【Flashback】Flashback Query功能實踐
- oracle10g之flashback version query 和flashback transaction query 實驗Oracle
- flashback version query和 flashback transaction query簡單應用
- flashback總結五之Flashback_Query_Version(下)_補充
- 閃回之 Flashback Query (dml表、過程、函式、包等)、Flashback version Query函式
- Flashback Query Benefits (368)
- 【實驗】【Flashback】Flashback Transaction Query功能實踐
- oracle 10g flashback version query 和 flashback transaction query實驗Oracle 10g
- ORACLE Flashback Query偽列Oracle
- Flashback閃回技術
- flashback query閃回資料
- flashback drop/query/table/database/archiveDatabaseHive
- Flashback Query閃回查詢
- Overview of Oracle Flashback Query I (366)ViewOracle
- Overview of Oracle Flashback Query II (367)ViewOracle
- oracle flashback技術詳解Oracle
- Oracle Flashback 技術 總結Oracle
- Oracle Flashback技術總結Oracle
- ORACLE 11G Flashback Versions QueryOracle
- flashback version query in oracle 10gOracle 10g
- Flashback Query的應用(轉帖)
- oracle11g flashback技術Oracle
- Oracle Flashback 技術大解密Oracle解密
- oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- oracle flashback特性(2.1)--Flashback Table之RECYCLEBINOracle
- flashback總結三之Flashback_DROP
- flashback總結一之Flashback_DatabaseDatabase
- 【Flashback】使用檢視快速獲得Flashback Query閃回查詢資料