10G新特性筆記之FLASHBACK

empo007發表於2007-12-07

10G支援下列FLASHBACK

flashback database
flashback drop
flashback versions query
flashback transaction query
flashback table

需要注意的是:後面三種還是基於UNDO RETENTION的

[@more@]

一、FLASHBACK DATABASE

flashback database作用上相當於不完全恢復,它透過flashback database logs實現
實現機制:當flashback database被起用,後臺程式RVWR就被啟動,SGA中就會分配flashback buffer,RVWR會把資料從flashback buffer中以迴圈重用的方式寫入到flashback log中。flashback log不被歸檔。
RVWR程式將資料塊的前映象寫入到flashback log,當需要flashback的時候,這些flashback log中的塊映象就會被應用,然而flashback log並不一定是連續的,如果是斷裂的,那麼將會使用REDO LOG中的映象填補GAP
flashback database的配置
SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=2880;
SQL> ALTER DATABASE FLASHBACK ON;
SQL> SELECT flashback_on FROM v$database;
幾個例子:RMAN> FLASHBACK DATABASE TO TIME = TO_DATE ('2002-12-10 16:00:00', 'YYYY-MM-DD HH24:MI:SS');
RMAN> FLASHBACK DATABASE TO SCN=23565;
RMAN> FLASHBACK DATABASE TO SEQUENCE=223 THREAD=1;
SQL> FLASHBACK DATABASE TO TIMESTAMP(SYSDATE-1/24);
SQL> FLASHBACK DATABASE TO SCN 53943;
監控:
SQL> SELECT estimated_flashback_size, flashback_size FROM V$FLASHBACK_DATABASE_LOG;
SQL> SELECT oldest_flashback_scn, oldest_flashback_time FROM V$FLASHBACK_DATABASE_LOG;
SQL> SELECT * FROM V$FLASHBACK_DATABASE_STAT;
每小時記錄一次統計值到V$FLASHBACK_DATABASE_STAT
如何在flashback database時排除一個tablespace
ALTER TABLESPACE FLASHBACK {ON|OFF}
SQL> SELECT name, flashback_on FROM v$tablespace;
限制:
flashback database後只能以read only或者resetlogs的方式開啟資料庫
如果控制檔案被還原或重建,那麼將不能flashback database
如果表空間被drop,將不能flash database
如果資料檔案被shrunk,將不能flash database
不能把資料庫flash back到resetlogs之前

FLASHBACK DATABASE TO ... 的前提條件是資料庫為歸檔模式且例項處於MOUNT狀態.

二、flashback drop
將表flashback到被drop之前
實現方式:recycle bin,相關檢視:dba_recyclebin
命令:FLASHBACK TABLE TO BEFORE DROP [RENAME TO ];
對recycle bin中可能有多個相同original name的物件的情況,ORACLE採用LIFO的方式處理
recycle bin空間的回收問題:
手工回收:purge命令
自動回收:因空間壓力導致自動回收。對錶空間而言,它會首先使用非recycle bin的空間,然後是recycle bin的空間,最後是如果資料檔案可以自動擴充套件,則擴充套件空間。
PURGE TABLE回收某個表的空間
PURGE INDEX回收某個索引的空間
PURGE TABLESPACE回收屬於某個表空間的RECYCLE BIN的空間
PURGE RECYCLEBIN回收屬於某個使用者的RECYCLE BIN的空間
PURGE DBA_RECYCLEBIN回收所有RECYCLE BIN的空間
對於purge table/purge index,如果指定的original name對應多個物件,那麼將回收最早被DROP的物件的空間,即所謂FIFO
如何跳過recycle bin直接刪除物件?DROP TABLE [PURGE] ;
DROP TABLESPACE [INCLUDING CONTENTS] ;
DROP USER [CASCADE] ;
對於在recycle bin的物件,仍然可以在DBA_TABLES,DBA_OBJECTS, DBA_SEGMENTS中查到,比如dba_tables中設定了dropped列用於區分是否是被DROP的物件。這些物件也可以透過select語句查詢內容,即flashback queries
透過RECYCLE BIN保護的表:
非系統、以本地管理方式管理的表空間,沒有使用FGA或者VPD
不透過RECYCLE BIN保護的物件:
Bitmap-join的索引,MVIEW LOGS,外來鍵完整性約束,在表被DROP之前DROP的索引
被PURGE的表是不能再FLASH BACK的

三、flashback versions query
透過在SELECT語句中指定VERSIONS子句,flashback versions query用於查詢兩個時間點或者兩個SCN之間ROWS的不同VERSIONS資料。
幾個偽列:
VERSIONS_STARTTIME
VERSIONS_STARTSCN
VERSIONS_ENDTIME
VERSIONS_ENDSCN
VERSIONS_XID
VERSIONS_OPERATION
如果行的VERSION建立時間早於指定的時間或者在UNDO_RETENTION之前,VERSIONS_STARTTIME和VERSIONS_STARTSCN的值為NULL,如果在查詢時間行的VERSION仍然是活動的,或者是一個已經刪除的VERSION,那麼VERSIONS_ENDTIME和VERSIONS_ENDSCN的值都是NULL
語法:SELECT [Pseudocolumns]…
FROM …
VERSIONS BETWEEN
{SCN|TIMESTAMP {expr|MINVALUE} AND
{expr|MAXVALUE}}
[AS OF {SCN|TIMESTAMP expr}]
WHERE [Pseudocolumns…]…
限制:
flashback versions query不能用於外部表、臨時表、檢視、FIXED TABLE,不能跨DDL語句,會過濾掉一些SEGMENT SHRINK相關的操作,對IOT表,UPDATE一行意味著刪除和插入兩個操作。

如果你給表做DML操作,沒有COMMIT,那麼雖然SCN是變化的,如果你用這個範圍內的SCN做上面的查詢,是查詢不到結果的。

四、Flashback Transaction Query
它可以作為我們的一種診斷工具,從而讓我們可以在事務級別看資料庫的變化
檢視FLASHBACK_TRANSACTION_QUERY可以提供我們進行回退的語句。
對Flashback Transaction Query,需要注意的幾點:
a.ddl表現為對資料字典的更新
b.對IOT的UPDATE表現為DELETE和INSERT
c.被DROP的物件和使用者顯示成對應的ID
d.如果UNDO資料不夠,那麼FLASHBACK_TRANSACTION_QUERY的OPERATION表現為UNKNOWN

五、Flashback table
在資料庫ONLINE的情況下,將表恢復到某個時間點的狀態
具體步驟:ALTER TABLE employees ENABLE ROW MOVEMENT;----因為FLASHBACK後可能不能保留現在的ROWID,所以需要進行這步。
FLASHBACK TABLE employees TO TIMESTAMP (SYSDATE-1);
要注意的幾點:1、整個FLASHBACK TABLE語句必須在一個事務中完成
2、會給對應表加排它DML鎖
3、統計值不會被flash back
4、索引以及其他依賴的物件都會被維護,但是被DROP掉的索引不會重建
5、操作會被記錄在警告日誌檔案中
6、不能超越DDL
7、不能對系統、遠端、FIXED TABLE執行這個操作

六、相關的其它幾個問題:
1、給UNDO TABLESPACE加RETENTION GUARANTEE屬性
2、SCN和時間的對映粒度是3秒,以往是5分鐘。而且兩者的對映只保持5天,現在透過將UNDO RETENTION設定更大一些,兩者的對映可以保持更長的時間:Max(five days, UNDO_RETENTION)
3、兩個函式SCN_TO_TIMESTAMP和TIMESTAMP_TO_SCN

七、許可權問題:
FLASHBACK DATABASE需要SYSDBA許可權
Flashback Table or Flashback Versions Query需要flashback any table許可權以及物件的訪問許可權
Flashback Transaction Query需要SELECT ANY TRANSACTION許可權

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

相關文章