Oracle -- 閃回恢復區---實踐1---閃回庫

maohaiqing0304發表於2013-04-20
Flashback database 閃庫
     從oracle10g開始提供了flashback database。
     Oracle為了實現這一功能,另外建立了一組日誌,就是flashback logs(前滾日誌)
     日誌記錄資料庫的前滾操作,並不是所有的改變都需要記錄,
     只記錄一系列的前滾快照點,也就是一些時間點上塊的前映像,
     根據這些快照點,加上歸檔日誌與聯機日誌,就可以恢復任何時間點上的記錄了
     使用flashback database,資料庫必須處於歸檔狀態
     執行閃庫必須在mount狀態

閃回資料儲存區
     閃回需要產生閃回日誌 以及改前資料映像
     這些預設都是放到閃回恢復區的 這個區域的大小,位置,保持時間都由引數來決定
          引數db_recover_file_dest     定義路徑位置
          引數db_recover_file_dest_size     定義區域大小 預設2G
          引數db_flashback_retention_target定義保持力 預設1440分 就24小時

開啟閃庫
     1.開啟歸檔
     2.閃回區位置設定正確路徑和大小
          db_recover_file_dest
          db_recover_file_dest_size
     3.啟用資料庫閃回 alter database flashback on


------------------- ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=7G scope=both;--------------------更改閃回區的大小
SQL> archive log list;
Database log mode            Archive Mode
Automatic archival            Enabled
Archive destination            /home/oracle/arc1/
Oldest online log sequence     52
Next log sequence to archive   54
Current log sequence            54
SQL>


SQL> show parameter db_recover

NAME                         TYPE     VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest               string    
db_recovery_file_dest_size          big integer 2G
SQL>
SQL> alter system set db_recovery_file_dest='/u01/oracle/flash_recovery_area';

System altered.

SQL>

SQL> show parameter db_recover

NAME                         TYPE     VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest               string     /u01/oracle/flash_recovery_area
db_recovery_file_dest_size          big integer 2G
SQL>

SQL> select FLASHBACK_ON from v$database;

FLASHBACK_ON
------------------
NO

SQL> alter database FLASHBACK ON
*
ERROR at line 1:
ORA-38759: Database must be mounted by only one instance and not open.


SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount;
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size              1218992 bytes
Variable Size             75499088 bytes
Database Buffers       205520896 bytes
Redo Buffers              2973696 bytes
Database mounted.
SQL>


SQL> alter database FLASHBACK ON;

Database altered.

SQL> select FLASHBACK_ON from v$database;

FLASHBACK_ON
------------------
YES

SQL>

SQL> create table trun_test tablespace users as select * from scott.emp;

Table created.

SQL> create table del_test tablespace users as select * from scott.emp;

Table created.

SQL> select count(*) from scott.emp;

  COUNT(*)
----------
     14

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     925204

SQL>
SQL> truncate table trun_test;

Table truncated.

SQL> delete del_test;

14 rows deleted.

SQL> commit;

Commit complete.

SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size              1218992 bytes
Variable Size             79693392 bytes
Database Buffers       201326592 bytes
Redo Buffers              2973696 bytes
Database mounted.
SQL> flashback database to scn 925204;

Flashback complete.

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open 
注意-----&gtresetlogs 僅在不完全資料庫恢復後有效

SQL> alter database open resetlogs;

Database altered.

SQL> select count(*) from trun_test;

  COUNT(*)
----------
     14

SQL> select count(*) from del_test;

  COUNT(*)
----------
     14

SQL>



恢復到1天以前
FLASHBACK DATABASE TO TIMESTAMP SYSDATE-1;
(前提flashback log 資料保留的時間內
設定flashback log 資料保留的時間: SQL>alter system set db_flashback_retention_target=1440 scope=both;
如果你希望flashback database 能夠恢復的最早的時間點。預設值是1440,單位是minute,即24 小時,需要注意的是該引數雖然未直接指定flash recovery area大小,但卻受其制約,舉個例子假如資料庫每天有10%左右的資料變動的話,如果該初始化引數值設定為1440,則flash recovery area 的大小至少要是當前資料庫實際容量的10%,如果該初始化引數設定為2880,則flash recovery area 的大小就至少是資料庫所佔容量的20%。)

恢復到自定義的儲存點
儲存點建立方法 SQL> create restore point abc;
檢視 SQL> SELECT * FROM V$RESTORE_POINT;
刪除 SQL> drop restore point abc;

SQL> flashback database to restore point abc;

Flashback complete.

SQL>

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

相關文章