oracle10g閃回實驗

xfhuangfu發表於2015-07-04
一點介紹:

oracle從10g開始,提供了閃回功能,即flashbask
根據oracle官方文件,flashback功能又分為五種:
1:flashback database (利用閃回日誌)
2:flashback drop (利用回收站:recyclebin)
3:flashback table (利用undo)
4:flashback query (利用undo)
5:flashback version query (利用undo)
6:flashback transaction query (利用undo)


flashback drop 是針對資料庫表的操作
flashback table 是針對表裡的dml操作,即:insert、update、delete
flashback query 是針對select查詢操作
flashback version query和flashback transaction query聯合起來,可以檢視到某個事物在某個時間段內對行的操作,並記錄事物修改的sql語句,給管理員提供分析診斷資訊


下面先簡單測試一下 flashback table 和flashback query操作

OS: redhat linux as4 u2
DB: oracle10gr2

C:\>sqlplus
SQL*Plus: Release 10.1.0.2.0 - Production on 星期三 6月 29 16:59:24 2011
Copyright (c) 1982, 2004, Oracle. All rights reserved.

連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
SQL>
SQL>
SQL> show user;
USER 為 "SYSTEM"
SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 xx xx
SQL>
SQL> insert into scott.dept values(60,'k','c');
已建立 1 行。
SQL> commit;
提交完成。
SQL>
SQL>
SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 xx xx
60 k c
已選擇6行。
SQL>
SQL>
SQL>
SQL>

確定當前系統scn值,以便設定恢復的起點

SQL> select current_scn from v$database;
CURRENT_SCN
-----------
829848
SQL>


此時模擬不小心刪掉表裡的一條資料,並已經做了提交

SQL> delete from scott.dept where deptno=60;
已刪除 1 行。
SQL> commit;
提交完成。

正常查詢的話,scott使用者下的dept表裡已經沒有了deptno為60的資料

SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 xx xx


此時利用資料庫的閃回查詢,即flashback query 功能,可以檢視到刪除之前的那個點上的值

SQL> select * from scott.dept as of scn 829848;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 xx xx
60 k c
已選擇6行。


flashback table需要啟用行移動功能

SQL> flashback table scott.dept to scn 829848;
flashback table scott.dept to scn 829848
*
第 1 行出現錯誤:
ORA-08189: cannot flashback the table because row movement is not enabled

SQL> alter table scott.dept enable row movement;
表已更改。

flashback table

SQL> flashback table scott.dept to scn 829848;
閃回完成。
SQL>
SQL>

可以看到表已經閃回到了以前那個scn點上

SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 xx xx
60 k c
已選擇6行。
SQL>



總結: 對於oracle10g的版本而言,如果現網中不小心對錶進行了dml操作,並且事物已經提交,可以用flashback table功能進行恢復。閃回時,既可以用scn,也可以用timestamp

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28373936/viewspace-1722301/,如需轉載,請註明出處,否則將追究法律責任。

相關文章