快照standby
快照standby
相關理論
快照standby資料庫就是一個可以更新的資料庫。
意思就是說,在A時間點,以讀寫的方式打開了standby資料庫,也就是說A點以後的這個時間裡可以支援各種DML和DDL操作。一段時間後到達B時間點,可以把這個庫重新恢復到A時間點之前狀態,並繼續以standby的方式執行。於是在A點到B點這段時間內,這個資料就是快照備用資料庫。
在快照備用庫期間,它會繼續接受歸檔日誌,但是不會應用。當快照資料庫重新轉回到備用資料之後,這些歸檔日誌就會被自動的應用。
如果是最大保護模式,而且只有一個standby備庫,那麼這個資料庫則是不能轉換為快照備用庫的。
快照備用資料庫的建立語法也很簡單,就是把物理standby資料庫做個轉換操作
alter database convert to snapshot standby; |
這種備庫主要用於測試環境比較多,比如負責測試,功能測試,壓力測試等等。
oracle在做轉換的時候,先建立一個恢復點。而在處於快照備用資料庫的階段,日誌傳遞,GAP檢測仍然工作。一旦要回到物理備用庫狀態,oracle就會吧資料庫閃回到這個恢復點。這些恢復點是有名字的,命令格式就是SNAPSHOT_STANDBY_REQUIRED_系統日期。
需要注意的是:必須先關閉MRP程序,不能再只讀或者實時恢復(Real Time Apply)方式時轉換 |
先確認pri
SQL> select NAME, DB_UNIQUE_NAME, DATABASE_ROLE, PROTECTION_MODE, SWITCHOVER_STATUS from v$database;
NAME DB_UNIQUE_NAME DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS --------- ------------------------------ ---------------- -------------------- -------------------- ORCL pri PRIMARY MAXIMUM PERFORMANCE TO STANDBY |
備庫狀態,
SQL> select NAME, DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, PROTECTION_MODE, SWITCHOVER_STATUS from v$database;
NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS --------- -------------------- -------------------- ---------------- -------------------- -------------------- ORCL std MOUNTED PHYSICAL STANDBY MAXIMUM PERFORMANCE NOT ALLOWED |
備庫在mounted狀態下,才能做轉換
SQL> alter database convert to snapshot standby; alter database convert to snapshot standby * ERROR at line 1: ORA-38784: Cannot create restore point 'SNAPSHOT_STANDBY_REQUIRED_03/08/2014 16:36:51'. ORA-01153: an incompatible media recovery is active
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database convert to snapshot standby;
Database altered. |
當standby資料庫正在被log applied的時候,是不能做這種轉換的,需要先取消日誌的應用。
此時日誌中會有如下記錄:
alter database convert to snapshot standby Starting background process RVWR Sat Mar 08 16:38:17 2014 RVWR started with pid=32, OS id=29613 Allocated 127504192 bytes in shared pool for flashback generation buffer Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_03/08/2014 16:38:17 krsv_proc_kill: Killing 4 processes (all RFS) Begin: Standby Redo Logfile archival End: Standby Redo Logfile archival RESETLOGS after incomplete recovery UNTIL CHANGE 1137105 Resetting resetlogs activation ID 1369442151 (0x51a00767) Online log /u01/app/oracle/oradata/std/redo01.log: Thread 1 Group 1 was previously cleared Online log /u01/app/oracle/oradata/std/redo02.log: Thread 1 Group 2 was previously cleared Online log /u01/app/oracle/oradata/std/redo03.log: Thread 1 Group 3 was previously cleared Standby became primary SCN: 1137103 Sat Mar 08 16:38:21 2014 Setting recovery target incarnation to 3 CONVERT TO SNAPSHOT STANDBY: Complete - Database mounted as snapshot standby Completed: alter database convert to snapshot standby |
此時可以以read ,write的方式開啟資料庫了
SQL> alter database open;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE -------------------- READ WRITE |
此時在備庫上做一些操作
SQL> create table test(id number);
Table created.
SQL> insert into test values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;
ID ---------- 1 |
此時再主庫上也做一些操作
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> create tablespace test datafile '/u01/app/oracle/oradata/orcl/test01.dbf' size 100M;
Tablespace created. |
此時再備庫的日誌中也可以看到如下內容,日誌被傳輸過來了,但是沒有被應用。
Sat Mar 08 16:43:20 2014 RFS[4]: Assigned to RFS process 29697 RFS[4]: Opened log for thread 1 sequence 45 dbid 1369450057 branch 841669324 Archived Log entry 34 added for thread 1 sequence 45 rlc 841669324 ID 0x51a00767 dest 2: RFS[4]: Opened log for thread 1 sequence 46 dbid 1369450057 branch 841669324 Sat Mar 08 16:43:21 2014 RFS[5]: Assigned to RFS process 29701 RFS[5]: Selected log 5 for thread 1 sequence 43 dbid 1369450057 branch 841669324 Sat Mar 08 16:43:21 2014 RFS[6]: Assigned to RFS process 29703 RFS[6]: Opened log for thread 1 sequence 44 dbid 1369450057 branch 841669324 Archived Log entry 35 added for thread 1 sequence 46 rlc 841669324 ID 0x51a00767 dest 2: Archived Log entry 36 added for thread 1 sequence 44 rlc 841669324 ID 0x51a00767 dest 2: RFS[5]: Opened log for thread 1 sequence 48 dbid 1369450057 branch 841669324 RFS[4]: Opened log for thread 1 sequence 47 dbid 1369450057 branch 841669324 Sat Mar 08 16:43:21 2014 RFS[7]: Assigned to RFS process 29709 RFS[7]: Selected log 4 for thread 1 sequence 49 dbid 1369450057 branch 841669324 Sat Mar 08 16:43:21 2014 Archived Log entry 37 added for thread 1 sequence 43 ID 0x51a00767 dest 1: Archived Log entry 38 added for thread 1 sequence 47 rlc 841669324 ID 0x51a00767 dest 2: Archived Log entry 39 added for thread 1 sequence 48 rlc 841669324 ID 0x51a00767 dest 2: |
現在將資料庫切換到standby狀態。
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount; ORACLE instance started.
Total System Global Area 4.0486E+10 bytes Fixed Size 2237088 bytes Variable Size 3758099808 bytes Database Buffers 3.6641E+10 bytes Redo Buffers 84631552 bytes Database mounted. SQL> alter database convert to physical standby;
Database altered.
SQL> alter database recover managed standby database disconnect from session; alter database recover managed standby database disconnect from session * ERROR at line 1: ORA-01507: database not mounted
SQL> shutdown immediate; ORA-01507: database not mounted
ORACLE instance shut down. SQL> startup mount; ORACLE instance started.
Total System Global Area 4.0486E+10 bytes Fixed Size 2237088 bytes Variable Size 3758099808 bytes Database Buffers 3.6641E+10 bytes Redo Buffers 84631552 bytes Database mounted. SQL> alter database recover managed standby database disconnect from session;
Database altered. |
此時日誌開始應用
Sat Mar 08 16:47:49 2014 Managed Standby Recovery not using Real Time Apply Parallel Media Recovery started with 32 slaves Waiting for all non-current ORLs to be archived... All non-current ORLs have been archived. Clearing online redo logfile 1 /u01/app/oracle/oradata/std/redo01.log Clearing online log 1 of thread 1 sequence number 50 Completed: alter database recover managed standby database disconnect from session Clearing online redo logfile 1 complete Clearing online redo logfile 2 /u01/app/oracle/oradata/std/redo02.log Clearing online log 2 of thread 1 sequence number 51 Clearing online redo logfile 2 complete Media Recovery Log /u01/app/oracle/arch/std/1_43_841669324.arc Media Recovery Log /u01/app/oracle/arch/std/1_44_841669324.arc Media Recovery Log /u01/app/oracle/arch/std/1_45_841669324.arc Media Recovery Log /u01/app/oracle/arch/std/1_46_841669324.arc Media Recovery Log /u01/app/oracle/arch/std/1_47_841669324.arc Media Recovery Log /u01/app/oracle/arch/std/1_48_841669324.arc Media Recovery Log /u01/app/oracle/arch/std/1_49_841669324.arc Recovery created file /u01/app/oracle/oradata/std/test01.dbf Successfully added datafile 6 to media recovery Datafile #6: '/u01/app/oracle/oradata/std/test01.dbf' Media Recovery Log /u01/app/oracle/arch/std/1_50_841669324.arc Media Recovery Waiting for thread 1 sequence 51 (in transit) |