Oracle 10g flashback

tolywang發表於2007-07-09
 Flashback database
  閃回資料庫可以迅速的時資料庫回到誤操作或人為錯誤的前一個時間點,如實際中的“撤消”操作,將可以不利用備份就快速的實現時間點的恢復(有後悔藥可以吃了)。實際上,Oracle為了實現這一個功能,建立了另外一組日誌,就是Flashback Logs(前滾日誌),記錄資料庫的前滾操作。如果希望能閃回資料庫,需要設定如下引數:
  DB_RECOVER_FILE_DEST
  DB_RECOVER_FILE_DEST_SIZE


  這兩個引數來確定Flashback日誌的存放地點與該恢復區的大小。在建立資料庫的時候,Oracle將自動建立恢復區(需要注意,該恢復區可不僅僅是為了flashback log,還可以用來歸檔,備份與恢復),但是預設是關閉Flashback database功能。如果想要利用這一功能,DBA就必須正確的配置該日誌區的大小,如一個資料庫的資料庫,每天有10%的塊發生改變,那麼一天(24小時)的Flash Recovery Area就是1/10個資料庫大小。DBA也可以動態的改變其大小以滿足不同的需求。
  另外一個引數DB_FLASHBACK_RETENTION_TARGET引數允許您設定閃回資料的儲存時間,單位是分。預設是一天(24*60)
  如果想啟動FLASHBACK DATABASE的功能,您必須在MOUNT模式下,執行alter database flashback on命令。或者是alter tablespace tsname flashback on,資料庫將採集falshback log,如果需要關係該功能,則修改On為OFF。
  如果想執行flashback database命令,你可以在兩種方式下執行:RMAN與SQLPLUS。
  SQL >flashback database to time to_date(xxx);
  SQL >flashback database to time TO_TIMESTAMP (xxx);
  SQL >flashback database to scn xxx
  SQL >flashback database to sequence xxx thread 1
  SQL>flashback database to timestamp(sysdate-1/24)
  
  我們下面看看具體的例子說明
  SQL> startup mount
  ORACLE instance started.
  Total System Global Area 113246208 bytes
  Fixed Size 787708 bytes
  Variable Size 87030532 bytes
  Database Buffers 25165824 bytes
  Redo Buffers 262144 bytes
  Database mounted.
  SQL> alter database flashback on;
  alter database flashback on
  *
  ERROR at line 1:
  ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
  ORA-38707: Media recovery is not enabled.
  可以看到,flashback還必須要歸檔的保證
  SQL> alter database archivelog;
  Database altered.
  SQL> alter database flashback on; bbs.2168.net國內最早的網管論壇
  Database altered.
  SQL> alter database open;
  Database altered.
  SQL> archive log list
  Database log mode Archive Mode
  Automatic archival Enabled
  Archive destination USE_DB_RECOVERY_FILE_DEST
  Oldest online log sequence 13
  Next log sequence to archive 15
  Current log sequence 15
  經過以上步驟,我們確保了flashback database的功能,我們還可以發現,10g的自動歸檔是不需要手工干預的,只要開啟了歸檔,就是自動歸檔了,歸檔區也在DB_RECOVERY_FILE_DEST引數指定的地點。
  
  透過如下的查詢
  SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
  Session altered.
  SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME
  2 FROM V$FLASHBACK_DATABASE_LOG;
  OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
  -------------------- -------------------
  1135440 2004-04-06 15:20:57
  我們可以知道,可以前滾恢復到的最早的SCN與時間點是多少,如果沒有確保flashback database,該檢視將沒有查詢結果。
  
  我們建立三個一樣的表
  SQL> create table t1 as select * from dba_objects;
  Table created.
  SQL> create table t2 as select * from t1;
  Table created.
  SQL> create table t3 as select * from t1;
  Table created.
  SQL> set time on;
  SQL> select sysdate from dual;
  SYSDATE
  -------------------
  2004-04-06 15:29:33
  我們確定了一個時間點
  現在,我們分別truncate一個表與drop一個表,模擬誤操作。
  15:30:10 SQL> truncate table t2;
  Table truncated.
  15:30:43 SQL> drop table t3;
  Table dropped.
  沒有備份,我們利用flashback來恢復資料庫到2004-04-06 15:29:33時間點。
  15:39:02 SQL> shutdown immediate;
  Database closed.
  Database dismounted.
  ORACLE instance shut down.
  15:39:31 SQL> startup mount exclusive
  ORACLE instance started.
  15:41:19 SQL> FLASHBACK DATABASE TO timestamp(to_date('2004-04-06 15:29:33','yyyy-mm-dd hh24:mi:ss'));
  Flashback complete.
  之後,我們可以用
  ALTER DATABASE OPEN READ ONLY來檢查結果是否正確,如果滿足結果,則可以用resetlog來正式啟動資料庫,注意,一旦resetlogs之後,將不能再flashback的resetlogs之前的時間點。 bbs.2168.net國內最早的網管論壇
  15:41:32 SQL> alter database open resetlogs;
  Database altered.
  
  我們現在查詢那三個表
  15:42:10 SQL> select count(*) from t1;
  COUNT(*)
  ----------
  47708
  15:42:47 SQL> select count(*) from t2;
  COUNT(*)
  ----------
  47708
  15:42:50 SQL> select count(*) from t3;
  COUNT(*)
  ----------
  47708
  發現truncate的記錄或者是drop的表都存在,現在資料庫已經前滾到前一個時間點了。
  15:44:56 SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME
  15:45:05 2 FROM V$FLASHBACK_DATABASE_LOG;
  
  OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
  -------------------- -------------------
  1136169 2004-04-06 15:41:50
  同時發現資料庫的最早的flashback的時間與scn都回到resetlog的時間點了。
  

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

相關文章