Oracle Data Guard (二) Physical Standby

1. 檢查Primary數據庫是否是archivelog模式

SQL> select log_mode from v$database;


如果結果不是"ARCHIVELOG",執行以下命令:

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database archivelog;

SQL> alter database open;


2. 檢查Primary數據庫是否是force logging模式

SQL> select force_logging from v$database;


如果結果不是"YES",執行以下命令:

SQL> alter database force logging;

3. 在Primary數據庫上創建Standby logfile

SQL> select group#,thread#,bytes/1024/1024 from v$log;


根據得到的group數目和log大小,爲Standby實例創建對應的logfile,默認情況下是三個Group,且每個大小爲50M。

SQL> alter database add standby logfile ‘/home/oracle/app/oracle/oradata/sungoin/stby_redo01.log’ size 50m;

SQL> alter database add standby logfile ‘/home/oracle/app/oracle/oradata/sungoin/stby_redo02.log’ size 50m;

SQL> alter database add standby logfile ‘/home/oracle/app/oracle/oradata/sungoin/stby_redo03.log’ size 50m;


4. 在Primary數據庫上配置Standby相關係統參數

SQL> alter system set log_archive_config=’DG_CONFIG=(test,standby)’;

SQL> alter system set log_archive_dest_1=’LOCATION=/home/oracle/app/oracle/flash_recovery_area/test/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES)  DB_UNIQUE_NAME=test’;

SQL> alter system set log_archive_dest_2=’service=standby LGWR ASYNC NET_TIMEOUT=30 

valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=standby’;

SQL> alter system set fal_server=test;

SQL> alter system set fal_client=standby;

SQL> alter system set standby_file_management=auto;

SQL> alter system set remote_login_passwordfile=exclusive;


5. 在Primary服務器上配置監聽器和TNS變量

在Primary服務器的監聽器中靜態註冊test實例,添加下面行到文件 /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora中:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC = 
      (SID_NAME = test)
      (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1)
    )

  )


在Primary服務器的TNS中註冊test和standby,添加下面行到文件 /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora中:


TEST=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = testdb)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )

  )


STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.102)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )
  )

6. 在Standby服務器上創建目錄結構

在Oracle用戶環境下執行下列命令:

$ mkdir -p /home/oracle/app/oracle/oradata/test/

$ mkdir -p /home/oracle/app/oracle/admin/test/adump

$ mkdir -p /home/oracle/app/oracle/admin/test/dpdump

$ mkdir -p /home/oracle/app/oracle/admin/test/pfile

$ mkdir -p /home/oracle/app/oracle/flash_recovery_area/test/archivelog/

7. 在Standby服務器上配置監聽器和TNS變量

在Standby服務器的監聽器中靜態註冊test實例,添加下面行到文件 /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora中:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC = 
      (SID_NAME = test)
      (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1)
    )

  )


在Standby服務器的TNS中註冊sungoin和standby,添加下面行到文件 /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora中:


TEST=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )

  )


STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )
  )

8. 在Standby服務器上創建啓動文件和密碼文件

創建文件/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initsungoin.ora,文件內容如下:
DB_NAME=test

DB_UNIQUE_NAME=standby


拷貝Primary服務上的密碼文件到standby服務器上,命令如下:

scp [email protected]:/home/oracle/app/racle/product/11.2.0/dbhome_1/dbs/orapwtest /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/

9. 在Standby服務器上啓動standby實例

$ sqlplus / as sysdba

SQL> startup nomount;

10. 在Primary服務器上創建和執行RMAN腳本文件

創建腳本文件dupstby.cmd, 文件內容如下:

run {
 allocate channel pri1 type disk;
 allocate channel pri2 type disk;
 allocate channel prmy4 type disk;
 allocate auxiliary channel stby type disk;
 duplicate target database for standby 
 from active database
 dorecover
 spfile
    set db_unique_name='standby'
    set control_files='/home/oracle/app/oracle/oradata/test/control01.ctl', '/home/oracle/app/oracle/flash_recovery_area/test/control02.ctl'
    set fal_client='test'
    set fal_server='standby'
    set standby_file_management='AUTO'
    set log_archive_config='dg_config=(test,standby)'
    set log_archive_dest_1= 'LOCATION=/home/oracle/app/oracle/flash_recovery_area/test/archivelog VALID_FOR= (ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'

    set log_archive_dest_2='service=test LGWR ASYNC NET_TIMEOUT=30 

 valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=test'
    nofilenamecheck;

    nofilenamecheck;

  }


進入rman環境,執行此腳本

$ rman target /

RMAN> connect auxiliary sys/oracle@standby

RMAN> @dupstby.cmd

11. 在Standby數據庫上啓動Standby執行進程

$ sqlplus / as sysdba

SQL> alter database recover managed standby databaseusing current logfile disconnect from session;

SQL> exit;


12. 驗證配置是否成功

驗證配置是否正確有三種方法,一是檢查兩個數據庫的狀態,二是比對兩個數據庫的archive log的序列是否一樣,三是在Primary數據庫進行改動然後在Standby數據庫上進行檢驗比對。

第一種方法:

在兩個數據庫上分別執行下面命令:

SQL> select open_mode,switchover_status,database_role from v$database;

Primary服務器上應該得到結果:

OPEN_MODE SWITCHOVER_STATUS DATABASE_ROLE

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

READ WRITE TO STANDBY PRIMARY

Standby服務器上應該得到結果:

OPEN_MODE SWITCHOVER_STATUS DATABASE_ROLE

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

READ ONLY WITH APPLY NOT ALLOWED PHYSICAL STANDBY

第二種方法:

在兩個數據庫上分別執行下列命令,比對兩端的Current log sequence是否一樣,正確情況下應該是一樣的。

SQL> archive log list;

第三種方法:

在Primary數據庫上手動進行任何數據改動,然後在Standby上進行查詢驗證,確認在Primary上的改動已經更新到Standby上了,由於該方案採用異步傳輸方式,所以Primary上的改動會延誤幾秒鐘纔會傳輸到Standby上。


如果檢查結果和上述不一樣,可能是哪個步驟出了錯誤,檢查Log查看詳細情況。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章