閃回技術和恢複
閃回技術概述 在Oracle10g中,可以在行、表和資料庫層級使用閃回技術,具體分類如下:1、 行級閃回可以使用行閃回技術撤銷對個別行的錯誤更改。有三種行級閃回技術,他們全都依賴於儲存在撤銷資料表空間中的撤銷資料。(1) 閃回查詢:允許根據時間點或SCN查看舊的行資料。可以查看更舊的資料,並且,如果需要可以檢索它並撤銷錯誤的更改。(2) 閃回版本查詢:允許查看相同行在一段時間內的所有版本,以便可撤銷邏輯錯誤。它還可以提供更改的審計曆史,允許比較當前資料與曆史資料而不用執行DML活動。(3) 閃回事務查詢:允許查看事務級所做的更改。此技術協助分析和審計事務,例如,一個批作業執行了兩次,你想確定哪些對象受到影響等。使用此技術可撤銷指定時間段內某個事務所做的更改。2、 表級閃回(1) 閃回表:複原一個表到某個時間點,或者到指定的SCN而不用恢複資料檔案。此特性使用DML更改撤銷表中的更改。閃回表特性依賴於撤銷資料。(2) 閃回刪除:允許倒退一條DROP TABLE語句的結果,而不用進行時間點恢複。閃回刪除特性使用資源回收筒複原被刪除的表。3、 資料庫級閃回閃回資料庫特性允許複原整個資料庫到某個時間點,從而撤銷自該時間以來的所有更改。閃回資料庫主要利用閃回日誌檢索資料區塊的更舊的版本,它也依賴歸檔重做日誌完全地恢複資料庫,不用複原資料檔案和執行傳統的介質恢複。
閃回和傳統的恢複技術對比與傳統恢複技術不同,閃回技術的主要目的不是從介質丟失中恢複,而是從人為錯誤中恢複。例如:使用者可能錯誤的刪除了某個表或者錯誤的更改了某個表的資料。這時候你想撤銷你剛才的操作。傳統上,從人為錯誤中恢複資料唯一的辦法就是採用使用者管理的備份和恢複技術。先複原資料庫檔案然後利用所有重做記錄檔前滾的過程需要長時間的停機。而閃回技術提供了從邏輯錯誤中恢複的更有效和更快的方法,多數情況下,在用這種技術進行恢複時資料庫仍然聯機並對使用者可用。此外,閃回技術允許選擇性地複原某些對象。使用傳統的技術,從某種意義上說某有選擇,只能恢複整個資料庫。
閃回刪除閃回刪除特性提供了恢複被意外刪除的表(或索引)而不丟失最近事務的一種手段。在Oracle10g中,在刪除一個表時,Oracle並不立即丟棄它。而是把它放在資源回收筒中列出該表以及其依賴的對象,並保留儘可能長的時間。如果你很快意識到自己犯了錯誤,可以簡單的使用一些命令即可找回被你刪除的表。
SQL> conn scott/tiger;已串連。SQL> create table mytest as select * from dept; 表已建立。 SQL> drop table mytest; 表已刪除。 SQL> flashback table mytest to before drop; 閃回完成。 SQL> select * from mytest; DEPTNO DNAME LOC---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> drop table mytest; 表已刪除。 |
閃回如何工作?在Oracle10g之前,執行DROP TABLE命令將導致表以及其所有依賴對象立即被刪除,並且表段中所有相關的空間都被釋放回資料庫。在Oracle10g中,表及其依賴對象不會被立即刪除,而是被重新命名了,他們仍然保留在原位置,Oracle將根據空間緊迫情況儘可能長的保留它們。在Oracle10中,有一個資源回收筒的概念:資源回收筒是一個邏輯容器(一個資料字典表,它儲存被刪除的表的相關資訊,如它們的新名字和原來的名字等)資訊。
通過上述命令可以看到資源回收筒的系統欄位如果想查看資源回收筒中的內容可以使用
SQL> select * from recyclebin; SQL> select object_name,droptime,dropscn,purge_object from recyclebin; OBJECT_NAME DROPTIME DROPSCN PURGE_OBJECT------------------------------ ------------------- ---------- ------------ BIN$ugr+dcX2R1Kk6imZ2wEQOQ==$0 2007-08-10:21:33:43 5456762 54660 |
在Oracle10g Release 2版本中,可以使用RECYCLEBIN初始化參數關閉閃回刪除功能。預設是,此參數設定為ON,表示所有刪除的表都要進入資源回收筒,可以利用閃回刪除特性恢複它們。通過設定此參數的值為OFF,關閉閃回刪除特性,表在被刪除後不進入資源回收筒。 如果需要真正的刪除掉一張表,那就需要清空資源回收筒。u 使用者使用PURGE命令(DROP TABLE table_name PURGE)從資源回收筒中永久刪除對象u Oracle迫於空間壓力(如果Oracle在資料表空間中沒有足夠的可用空間建立新對象或不能為現有對象擴充更過空間時)自動刪除資源回收筒中的對象。 如果需要真正刪除表
SQL> select * from mytest; DEPTNO DNAME LOC---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> drop table mytest purge; 表已刪除。 SQL> select object_name,droptime,dropscn,purge_object from recyclebin; OBJECT_NAME DROPTIME DROPSCN PURGE_OBJECT------------------------------ ------------------- ---------- ------------ |
這樣就找不到表了。我們在刪除的同時,也從資源回收筒情況了它。
什麼是資源回收筒?資源回收筒是一個邏輯結構,一個名為RECYCLEBIN的資料字典。你可以通過USER_RECYCLEBIN視圖,查看自己在資源回收筒中當前登記的內容。或者通過dba_recyclebin視圖也可以查看資源回收筒中的內容
SQL> select owner,original_name,object_name,ts_name,droptime from dba_recyclebin; OWNER ORIGINAL_NAME OBJECT_NAME TS_NAME ------------------------------ -------------------------------- ------------------------------ -----SCOTT BONUS BIN$cyqKxbJ9SQWbX52tIgAS9A==$0 USERS SCOTT SALGRADE BIN$myTqyz98SN6Oi6IAmPA4LA==$0 USERS |
可以看到,當一個表被移動到資源回收筒,Oracle給他指派一個系統產生的名字,此名字通常有30個字元長。如果你相在資源回收筒中查詢一個對象,則必須使用用其系統產生的名字,擴在雙引號中:
SQL> conn scott/tiger;已串連。使用SCOTT使用者登入後進行查詢。SQL> select * from "BIN$myTqyz98SN6Oi6IAmPA4LA==$0"; GRADE LOSAL HISAL---------- ---------- ---------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 |
注意:資源回收筒中的對象只能進行查詢,任何的DML操作將不起作用。
恢複被刪除的表只要資源回收筒中列出被刪除的表,就可以使用命令恢複它。FLASHBACK TABLE table_name TO BEFORE DROP在恢複之後,Oracle將把它們從資源回收筒中刪除。
永久刪除表在刪除表示使用命令
DROP TABLE table_name PRUGE 還可以使用PURGE TABLE或者PURGE INDEX命令從資源回收筒中永久除去以前刪除的表或索引。 可以使用PURGE TABLESPACE命令從資源回收筒中刪除作為相應資料表空間成分的所有對象,如:
PURGE TABLESPACE users USER scott |
上述命令將從USERS資料表空間中刪除單一使用者scott的所有對象(以及存在於其他資料表空間中的所有依賴對象)。
必須的許可權為使用FLASHBACK TABLE TABLE_NAME TO BEFORE DROP命令取回一個表,你必須擁有它或者在具有此表的刪除許可權(DROP TABLESPACE或者DROP ANY TABLE)。為使用PURGE命令,需要類似的許可權。為了查詢資源回收筒中的對象,必須具有SELECT許可權和FLASHBACK許可權。
閃回資料庫
閃回資料庫的條件1、 資料庫日誌系統必須在歸檔模式下。2、 如果丟失了一個資料檔案,或者由於某種原因不能使用特定的資料檔案,則不能使用閃回資料庫進行恢複。3、 如果已經在想閃回的時間範圍內複原或重建了一個控制檔案,則不能使用閃回資料庫特性。4、 不能閃回一個資料庫到RESETLOGS操作之前。5、 不能閃回在被閃回表操作覆蓋的時間範圍內縮短或刪除的資料檔案。 在Oracle10g中,閃回資料庫功能恢複資料檔案但不需要備份的資料檔案,他只能使用部分歸檔重做日誌資訊。閃回資料庫操作將資料庫的所有資料檔案倒退到以前的某個特定的時間點。 可以在下述情況下使用閃回操作:1、 找回某個刪除的模式2、 在某個使用者錯誤影響到整個資料庫時3、 在錯誤的截斷一個表時4、 在一個批作業只執行了部分更改時