Oracle的快照standby

skzhuga發表於2018-10-24

眾所周知,Oracle的standby資料庫有三種模式:物理standby資料庫、邏輯standby資料庫和快照standby資料庫。在這裡主要講述快照standby資料庫的特點,資料庫版本為11gR2。


一、快照standby資料庫的特點

快照standby資料庫有如下特點:

1、能在讀寫模式開啟,是完全可更新的standby資料庫

2、從主資料庫接收相關日誌,但不應用

3、當轉換為物理standby資料庫時,首先會拋棄所有之前的更新,然後應用接收到的redo資料

4、不能作為switchver或者failover的目標。在執行角色轉換之前,必須首先轉換為物理standby資料庫

5、在最大保護Data Guard配置中,快照standby資料庫不能是唯一的standby資料庫。

注意:使用Flashback Database技術的任何操作都是不可逆的,Flashback Database將阻止一個快照standby轉換為物理standby


二、快照standby資料庫的搭建

1、物理standby資料庫搭建

快照standby資料庫由物理standby資料庫轉換而來。因此首先搭建物理standby資料庫,過程略。

2、將物理standby資料庫轉換為快照standby資料庫

1)主庫上檢視目的地的資料庫模式、恢復模式和保護模式

SQL> select dest_id,database_mode,recovery_mode,protection_mode from v$archive_dest_status where dest_id = 2;


   DEST_ID DATABASE_MODE   RECOVERY_MODE           PROTECTION_MODE

---------- --------------- ----------------------- --------------------

         2 OPEN_READ-ONLY  MANAGED REAL TIME APPLY MAXIMUM PERFORMANCE


可看到standby資料庫以只讀方式開啟,在最高可用性級別實時應用redo   

2)停止物理standby資料庫的Redo Apply

SQL> alter database recover managed standby database cancel;


Database altered.

3)如果物理standby資料庫是RAC,則只保留一個例項,其他關閉。本環境中物理standby資料庫是單例項。

4)確保閃回恢復區被配置

SQL> show parameter db_recover

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string      /opt/app/oracle/fast_recovery_area

db_recovery_file_dest_size           big integer 4182M

否則在轉換時會報錯:

ORA-38784: Cannot create restore point 'SNAPSHOT_STANDBY_REQUIRED_10/24/2018 10:41:21'.

ORA-38786: Recovery area is not enabled.

5)將物理standby資料庫轉換為快照standby資料庫

備庫上執行:

SQL> alter database convert to snapshot standby;


Database altered.

可看到資料庫建立了一個還原點:

SQL> select name,storage_size from v$restore_point;


NAME                                            STORAGE_SIZE

----------------------------------------------- ------------

SNAPSHOT_STANDBY_REQUIRED_10/24/2018 10:43:28     1073741824

此時資料庫處於mounted狀態:

SQL> select name,

  2  database_role,

  3  switchover_status,

  4  open_mode,

  5  protection_mode

  6  from v$database;


NAME                 DATABASE_ROLE        SWITCHOVER_STATUS              OPEN_MODE            PROTECTION_MODE

-------------------- -------------------- ------------------------------ -------------------- --------------------

BDDEV2               SNAPSHOT STANDBY     NOT ALLOWED                    MOUNTED              MAXIMUM PERFORMANCE

6)開啟備庫

SQL> select name,

  2  database_role,

  3  switchover_status,

  4  open_mode,

  5  protection_mode

  6  from v$database;

此時備庫已轉換完成:

NAME                 DATABASE_ROLE        SWITCHOVER_STATUS              OPEN_MODE            PROTECTION_MODE

-------------------- -------------------- ------------------------------ -------------------- --------------------

BDDEV2               SNAPSHOT STANDBY     NOT ALLOWED                    READ WRITE           MAXIMUM PERFORMANCE

三、快照standby轉換為物理standby

1.將備庫重啟到mount模式

SQL> startup force mount

ORACLE instance started.

2.備庫執行語句,轉換為物理standby

SQL> alter database convert to physical standby;


Database altered.

轉換後資料庫被解除安裝,需要重啟

3.重啟資料庫

SQL> startup force;

ORACLE instance started.

4.恢復redo應用

SQL> alter database recover managed standby database using current logfile disconnect;

Database altered.

SQL> select name,

  2  database_role,

  3  switchover_status,

  4  open_mode,

  5  protection_mode

  6  from v$database;

NAME                 DATABASE_ROLE        SWITCHOVER_STATUS              OPEN_MODE            PROTECTION_MODE

-------------------- -------------------- ------------------------------ -------------------- --------------------

BDDEV2               PHYSICAL STANDBY     RECOVERY NEEDED                READ ONLY            MAXIMUM PERFORMANCE

四、快照standby資料庫測試

1.測試是否可讀寫

1)對錶scott.tb_test進行更新:

SQL> delete from scott.tb_test where object_id = 20;


1 row deleted.

2)刪除表scott.tb_test:

SQL> drop table scott.tb_test purge;


Table dropped.

此時表scott.tb_test在備庫中已經不存在了,但在主庫中還存在

3)建立新表

SQL> create table scott.tb_test2(id int);


Table created.

2.測試是否能接收日誌且不應用

主庫:

SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /opt/app/oracle/archivelog/

Oldest online log sequence     77

Next log sequence to archive   79

Current log sequence           79

可看到主庫當前日誌序號為79

備庫:

SQL> SELECT PROCESS,

  2  PID,

  3  STATUS,

  4  SEQUENCE#,

  5  DELAY_MINS 

  6  FROM V$MANAGED_STANDBY;

PROCESS                               PID STATUS                SEQUENCE# DELAY_MINS

------------------------------ ---------- -------------------- ---------- ----------

ARCH                                25422 CLOSING                      78          0

ARCH                                25425 CONNECTED                     0          0

ARCH                                25427 CLOSING                      76          0

ARCH                                25429 CLOSING                      77          0

RFS                                 26020 IDLE                          0          0

RFS                                 26023 IDLE                          0          0

RFS                                 26026 IDLE                         79          0

可看到備庫RFS程式正在接收的redo序號也為79,因此備庫此時可以接收日誌;備庫中MRP程式沒有啟動,因此可斷定此時日誌沒有應用


3.將快照standby轉換為物理standby,看scott.tb_test是否能恢復

按照三中的步驟,將快照standby轉換為物理standby,此時檢視備庫中是否有scott.tb_test:

SQL> select count(1) from scott.tb_test;


  COUNT(1)

----------

     86415

檢視之前在備庫建的表scott.tb_test2還是否存在:

SQL> desc scott.tb_test2

ERROR:

ORA-04043: object scott.tb_test2 does not exist

綜上,說明快照standby轉換到物理standby時,會拋棄在快照standby狀態時所做的更改。


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

相關文章