1. 程式人生 > >快照standby

快照standby

快照standby

 

相關理論

 

快照standby資料庫就是一個可以更新的資料庫。

意思就是說,在A時間點,以讀寫的方式打開了standby資料庫,也就是說A點以後的這個時間裡可以支援各種DMLDDL操作。一段時間後到達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)