【Flashback】使用檢視快速獲得Flashback Query閃回查詢資料
關於閃回查詢的基本使用方法請參見文章《【Flashback】Flashback Query功能實踐》(http://space.itpub.net/519536/viewspace-587004)。
本文給出使用檢視協助我們快速構造閃回查詢內容,透過檢視可以方便的檢索“歷史上的資料”。
1.構造閃回查詢檢視需求描述
1)準備員工表和工資表
2)刪除工資表中僱傭年限在1994年之前的記錄
3)建立檢視可以查詢工資表刪除之前的記錄
2.準備環境
1)準備員工表和工資表
sec@ora10g> create table emp (id number,name varchar2(20), e_date date);
Table created.
sec@ora10g> create table salary (id number, salary number);
Table created.
emp表包含員工ID、員工名字和僱傭時間資訊;
salary表中包含員工ID和薪水資訊。
2)初始化資料
insert into emp values (1,'Secooler',to_date('1991-01-01','yyyy-mm-dd'));
insert into emp values (2,'Andy',to_date('1992-01-01','yyyy-mm-dd'));
insert into emp values (3,'HOU',to_date('2010-01-01','yyyy-mm-dd'));
insert into emp values (4,'Shengwen',to_date('2011-01-01','yyyy-mm-dd'));
commit;
insert into salary values (1,60000);
insert into salary values (2,50000);
insert into salary values (3,40000);
insert into salary values (4,30000);
commit;
3)獲取初始化資料內容
sec@ora10g> select * from emp;
ID NAME E_DATE
---------- ------------------------------ -----------------
1 Secooler 19910101 00:00:00
2 Andy 19920101 00:00:00
3 HOU 20100101 00:00:00
4 Shengwen 20110101 00:00:00
sec@ora10g> select * from salary;
ID SALARY
---------- ----------
1 60000
2 50000
3 40000
4 30000
3.為構造後續的閃回查詢查詢當前的時間和SCN號
1)查詢當前時間
sec@ora10g> select sysdate from dual;
SYSDATE
-----------------
20110809 21:34:11
2)查詢當前系統SCN號
sec@ora10g> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
3141326
4.刪除工資表中僱傭年限在1994年之前的記錄
sec@ora10g> delete from salary where id in ( select id from emp where e_date < to_date('1994','yyyy'));
2 rows deleted.
sec@ora10g> commit;
Commit complete.
sec@ora10g> select * from emp;
ID NAME E_DATE
---------- ------------------------------ -----------------
1 Secooler 19910101 00:00:00
2 Andy 19920101 00:00:00
3 HOU 20100101 00:00:00
4 Shengwen 20110101 00:00:00
sec@ora10g> select * from salary;
ID SALARY
---------- ----------
3 40000
4 30000
此時,在salary表中1994年之前的員工資訊已經被刪除,並且資料修改已經提交。
5.兩種方法建立檢視構造閃回查詢刪除之前的資料
1)第一種方法:使用時間戳來構造閃回查詢檢視
sec@ora10g> create view v_salary_timestamp as select * from salary as of timestamp to_timestamp('2011-08-09 21:34:11','YYYY-MM-DD HH24:MI:SS');
View created.
2)第二種方法:使用SCN構造閃回查詢檢視
sec@ora10g> create view v_salary_scn as select * from salary as of scn 3141326;
View created.
6.使用檢視獲取閃回查詢資料
sec@ora10g> select * from v_salary_timestamp;
ID SALARY
---------- ----------
1 60000
2 50000
3 40000
4 30000
sec@ora10g> select * from v_salary_scn;
ID SALARY
---------- ----------
1 60000
2 50000
3 40000
4 30000
到此,兩種構造檢視的方法都順利的獲得了閃回查詢的資料。順利的完成任務。
7.小結
Oracle的閃回查詢功能本身的能耐自不必多說。使用檢視將閃回查詢語句進行一次“封裝”後,我們便得到了另外一種直觀的便利。
Good luck.
secooler
11.08.09
-- The End --
本文給出使用檢視協助我們快速構造閃回查詢內容,透過檢視可以方便的檢索“歷史上的資料”。
1.構造閃回查詢檢視需求描述
1)準備員工表和工資表
2)刪除工資表中僱傭年限在1994年之前的記錄
3)建立檢視可以查詢工資表刪除之前的記錄
2.準備環境
1)準備員工表和工資表
sec@ora10g> create table emp (id number,name varchar2(20), e_date date);
Table created.
sec@ora10g> create table salary (id number, salary number);
Table created.
emp表包含員工ID、員工名字和僱傭時間資訊;
salary表中包含員工ID和薪水資訊。
2)初始化資料
insert into emp values (1,'Secooler',to_date('1991-01-01','yyyy-mm-dd'));
insert into emp values (2,'Andy',to_date('1992-01-01','yyyy-mm-dd'));
insert into emp values (3,'HOU',to_date('2010-01-01','yyyy-mm-dd'));
insert into emp values (4,'Shengwen',to_date('2011-01-01','yyyy-mm-dd'));
commit;
insert into salary values (1,60000);
insert into salary values (2,50000);
insert into salary values (3,40000);
insert into salary values (4,30000);
commit;
3)獲取初始化資料內容
sec@ora10g> select * from emp;
ID NAME E_DATE
---------- ------------------------------ -----------------
1 Secooler 19910101 00:00:00
2 Andy 19920101 00:00:00
3 HOU 20100101 00:00:00
4 Shengwen 20110101 00:00:00
sec@ora10g> select * from salary;
ID SALARY
---------- ----------
1 60000
2 50000
3 40000
4 30000
3.為構造後續的閃回查詢查詢當前的時間和SCN號
1)查詢當前時間
sec@ora10g> select sysdate from dual;
SYSDATE
-----------------
20110809 21:34:11
2)查詢當前系統SCN號
sec@ora10g> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
3141326
4.刪除工資表中僱傭年限在1994年之前的記錄
sec@ora10g> delete from salary where id in ( select id from emp where e_date < to_date('1994','yyyy'));
2 rows deleted.
sec@ora10g> commit;
Commit complete.
sec@ora10g> select * from emp;
ID NAME E_DATE
---------- ------------------------------ -----------------
1 Secooler 19910101 00:00:00
2 Andy 19920101 00:00:00
3 HOU 20100101 00:00:00
4 Shengwen 20110101 00:00:00
sec@ora10g> select * from salary;
ID SALARY
---------- ----------
3 40000
4 30000
此時,在salary表中1994年之前的員工資訊已經被刪除,並且資料修改已經提交。
5.兩種方法建立檢視構造閃回查詢刪除之前的資料
1)第一種方法:使用時間戳來構造閃回查詢檢視
sec@ora10g> create view v_salary_timestamp as select * from salary as of timestamp to_timestamp('2011-08-09 21:34:11','YYYY-MM-DD HH24:MI:SS');
View created.
2)第二種方法:使用SCN構造閃回查詢檢視
sec@ora10g> create view v_salary_scn as select * from salary as of scn 3141326;
View created.
6.使用檢視獲取閃回查詢資料
sec@ora10g> select * from v_salary_timestamp;
ID SALARY
---------- ----------
1 60000
2 50000
3 40000
4 30000
sec@ora10g> select * from v_salary_scn;
ID SALARY
---------- ----------
1 60000
2 50000
3 40000
4 30000
到此,兩種構造檢視的方法都順利的獲得了閃回查詢的資料。順利的完成任務。
7.小結
Oracle的閃回查詢功能本身的能耐自不必多說。使用檢視將閃回查詢語句進行一次“封裝”後,我們便得到了另外一種直觀的便利。
Good luck.
secooler
11.08.09
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-704539/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flashback Query閃回查詢
- 閃回版本查詢(Flashback Version Query)
- flashback query閃回資料
- 聊聊閃回版本查詢Flashback Version Query
- [閃回特性之閃回版本查詢]Flashback Version Query
- 【閃回特性之閃回事務查詢】Flashback Transaction Query
- oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 聊聊閃回事務查詢Flashback Transaction Query
- 全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 使用FLASHBACK_TRANSACTION_QUERY查詢回滾事務SQLSQL
- Oracle閃回技術--Flashback Version QueryOracle
- [Flashback]Flashback Database閃回資料庫實驗Database資料庫
- 【徵文】全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 對錶誤操作的閃回恢復--flashback_transaction_query檢視
- 閃回之 Flashback Query (dml表、過程、函式、包等)、Flashback version Query函式
- 【Flashback】Flashback Database閃回資料庫功能實驗Database資料庫
- 【Flashback】啟用Flashback Database閃回資料庫功能Database資料庫
- 【Flashback】Flashback Database閃回資料庫功能實踐Database資料庫
- oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- Flashback Database 閃回資料庫Database資料庫
- Oracle9i Flashback Query 閃回查詢總結 --- (通過SCN恢復)Oracle
- oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 利用flashback閃回表和資料
- ORACLE 閃回檢視v$flashback_database_log/statOracleDatabase
- 【Flashback】使用Flashback Drop技術閃回被DROP表的指定版本資料
- oracle 閃回 flashbackOracle
- 使用dbms_flashback工具包實現閃回查詢功能
- Oracle Flashback query查詢的侷限Oracle
- 閃回資料庫時間視窗(flashback database window)資料庫Database
- oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- Oracle9i,.10g 閃回查詢(flashback)Oracle
- 閃回資料歸檔-- Flashback Data ArchiveHive
- 使用flashback query巧妙抽取指定資料
- Flashback閃回技術
- 全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- FlashBack總結之閃回資料庫與閃回刪除資料庫
- 閃回資料庫(flashback database)知識分享資料庫Database
- 【Flashback】Flashback Drop閃回刪除功能實踐