【ASK_ORACLE】手動配置DataGuard的自動化Client Failover(故障轉移)的service

Attack_on_Jager發表於2021-06-24

說明

本文方法適用於使用不了命令“SRVCTL”建立service的情況:

1. 11gR2之前的資料庫版本配置DG的自動化Client Failover的service

2. 任何僅安裝在檔案系統上的DG,資料庫版本不限


配置步驟

1. 在主庫上,建立兩個service,一個連線到主庫(primdb),另一個(stbydb)連線到備庫:

SQL> exec dbms_service.create_service('primdb','primdb'); 
SQL> exec dbms_service.create_service('stbydg','stbydg');


2. 在主庫上,啟動剛建立的連線到主庫所需的 service

SQL> exec dbms_service.start_service('primdb');


3. 在主庫上,建立觸發器來自動化管理這些 services

CREATE OR REPLACE TRIGGER AutoDGServices after startup on database
DECLARE
  db_role VARCHAR(30);
  db_open_mode VARCHAR(30);
BEGIN
  SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;
  IF db_role = 'PRIMARY' THEN 
   DBMS_SERVICE.START_SERVICE('primdb'); 
   DBMS_SERVICE.STOP_SERVICE('stbydg'); 
  END IF;
  IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN DBMS_SERVICE.START_SERVICE('stby_dg'); 
  END IF;
END;
/


4. 重啟備庫使得剛才建立的觸發器生效

SQL> shu immediate
SQL> startup


5. 進行主備庫切換測試,檢查新的service能否自動在新主庫上啟動並在舊主庫上停止


注:tnsnames.ora檔案參考

PRIMDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (FAILOVER = ON)
      (LOAD_BALANCE = OFF)
      (ADDRESS = (PROTOCOL = TCP)(HOST = Prim-DB)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = Stby-DG)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = primdb)
    )
  )
  
STBYDG =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (FAILOVER = ON)
      (LOAD_BALANCE = OFF)
       (ADDRESS = (PROTOCOL = TCP)(HOST = Stby-DG)(PORT = 1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = Prim-DB)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = stbydg)
    )
  )


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

相關文章