不少人在學習flashback database這個oracle技術的時候,都會有一個疑問,就是若是我只有一個數據庫做爲生產庫的話,數據庫
是否有這樣的業務需求致使咱們要把數據庫閃回到之前的時間點?以及這樣作是否值得(當前時間點和閃回目的時間點中間的全部操做將丟失)?oracle
其實拋開這個問題的討論,在oracle的dataguard環境配置中,對於故障切換後產生故障的主機重新回到dataguard環境,app
以及處於測試的目的咱們人爲的激活了備庫,flashback database均可以提供很是好的選擇。工具
下面的例子描述了這樣一個場景:學習
用戶須要一個和生產系統同樣或者相似的測試環境,可是單純的搭建一個環境顯然是不值得的,對於部署了dataguard環境的生產系統來講,測試
咱們能夠選擇把備庫臨時激活,以讀寫的方式打開,用於測試的須要,等測試結束後,把備庫經過flashback database技術閃回到激活以前的時間點,spa
重新的加入到dataguard配置環境中。rest
第1 步 準備要被激活的物理備數據庫。日誌
1 .檢查數據庫的flashback database模式和閃回日誌存放的目錄。
SQL> select flashback_on from v$database;
FLASHBACK_ON
YES
SQL> show parameter db_recovery_file
NAME TYPE VALUE
db_recovery_file_dest string /u01/app/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 2G
2 .因爲備庫在應用日誌,因此要取消日誌應用,並建立一個激活以前的還原點。
SQL> select process,status from v$managed_standby;
PROCESS STATUS
---------
ARCH CONNECTED
ARCH CLOSING
MRP0 WAIT_FOR_LOG
RFS IDLE
RFS IDLE
RFS IDLE
6 rows selected.
SQL> recover managed standby database cancel;
SQL> create restore point test_scn guarantee flashback database;
Restore point created.
第2 步 準備主數據庫
1 .歸檔當前日誌文件。
在主數據庫上,切換日誌使得還原點(在步驟 1 中建立)的 SCN 將在物理備數據庫上被歸檔:
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
當使用備重作日誌文件時,這個步驟是必須的以確保數據庫能被正確地閃回到還原點。
2 .延遲指向將被激活的備庫的日誌歸檔目的地。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;
System altered.
SQL> show parameter log_archive_dest_state_2
NAME TYPE VALUE
log_archive_dest_state_2 string DEFER
第3 步 激活物理備數據庫。
在物理備數據庫上,執行下述步驟:
1 .激活物理備數據庫並打開到open狀態:
SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;
SQL> ALTER DATABASE OPEN;
第4 步 使用激活的數據庫用於報表或測試。
一旦備數據庫已經被激活,你能運行報表工具或執行其它測試並激活幾天甚至幾周,獨立於主數據庫。
警告:當數據庫被激活時,它不從主數據庫接收重作數據庫並不能提供災難保護。建議至少有
兩個物理備數據庫參與配置,使得主數據庫保持對數據丟失的保護。
第5 步 回覆激活的數據庫回到物理備數據庫。
在你完成測試以後,你須要從新與主數據庫同步激活的數據庫。在激活的數據庫上執行
下面語句以快速閃回它到保障的還原點並將它從新與主數據庫同步:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1219160 bytes
Variable Size 75498920 bytes
Database Buffers 234881024 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> flashback database to restore point test_scn;
Flashback complete.
SQL> alter database convert to physical standby;
Database altered.
SQL> select status from v$instance;
STATUS
STARTED
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1219160 bytes
Variable Size 75498920 bytes
Database Buffers 234881024 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> recover managed standby database disconnect;
Media recovery complete.
第6 步 從新容許歸檔到物理備數據庫目的地。
在主數據庫上,執行下面語句來從新容許歸檔到物理備數據庫:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
第7 步 測試dataguard環境工做正常
1.在主庫刪除表空間usertest,並切換日誌
SQL> select name from v$datafile;
NAME
/oracle/app/oracle/oradata/sztech2/system01.dbf
/oracle/app/oracle/oradata/sztech2/sysaux01.dbf
/oracle/app/oracle/oradata/sztech2/undotbs01.dbf
/oracle/app/oracle/oradata/sztech2/users01.dbf
/oracle/app/oracle/oradata/sztech2/example01.dbf
5 rows selected.
SQL> drop tablespace usertest including contents and datafiles;
Tablespace dropped.
SQL> alter system switch logfile;
System altered.
2.在備庫觀察日誌操做是否正確應用,下面的查詢能夠看到文件應經被刪除,說明主庫的日誌應用到備庫。
SQL> select name from v$datafile;
NAME
/oracle/app/oracle/oradata/sztech2/system01.dbf
/oracle/app/oracle/oradata/sztech2/sysaux01.dbf
/oracle/app/oracle/oradata/sztech2/undotbs01.dbf
/oracle/app/oracle/oradata/sztech2/users01.dbf