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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle閃回技術--Flashback Version QueryOracle
- Flashback Query(轉)
- ORACLE Flashback Query偽列Oracle
- flashback query閃回資料
- [20180724]Flashback query和子游標共享.txt
- 【FLASHBACK】Oracle flashback data archive 介紹OracleHive
- 【Flashback】Flashback Drop閃回刪除功能實驗
- Oracle 備份恢復之 FlashbackOracle
- 【Flashback】Flashback Database閃回資料庫功能實驗Database資料庫
- 2.6.2 Overview of Flashback PDB in a CDBView
- Flashback Data Archive原理詳解Hive
- oracle 10g flashback databaseOracle 10gDatabase
- guarantee restore points-Flashback after RMAN restoreREST
- [20181002]DBMS_FLASHBACK與函式.txt函式
- 用flashback恢復儲存過程儲存過程
- [20180424]開啟表空flashback on.txt
- flashback實現資料快速復原
- 基於flashback_scn的expdp匯出
- Flashback Drop閃回刪除功能實踐
- [20210722]ORA-38760與flashback database.txtDatabase
- Flashback database必須要有之前的archivelog嗎?DatabaseHive
- 在Oracle DG Standby庫上啟用flashback database功能OracleDatabase
- ORACLE 閃回檢視v$flashback_database_log/statOracleDatabase
- ORA-55507: Encountered mining error during Flashback Transaction Backout. functiError
- C++ 未初始化記憶體出現 flashbackC++記憶體
- Oracle 12.2新特性: PDB級閃回資料庫(Flashback PDB)Oracle資料庫
- 螢幕錄影機(bb flashback pro 4)pjb v4.1.21
- 【FLASHBACK】Oracle閃回及回收站相關語句參考Oracle
- 刪使用者刪表空間的操作還能flashback回來嗎?
- GeminiDB Cassandra介面新特性FLASHBACK釋出:任意時間點秒級閃回
- 聊聊技術管理(一)入行之技術管理和技術專家
- 容器技術之LXC
- IPv6過渡技術之隧道技術
- 技術乾貨 | WebRTC 技術解析之 Android VDMWebAndroid
- 遊戲技術美術之<技術&美術>知識構成遊戲
- IPv6過渡技術之雙棧技術
- 工作之餘的技術
- 容器技術之Docker映象Docker
- 容器技術之Dockerfile (一)Docker