配置Data Guard 客戶端的failover

參考文檔: How To Configure Client Failover For Data Guard Connections Using Database Services (文檔 ID 1429223.1)

其實,是沒有測試成功,手頭上的環境是Windows平臺的12.2.0.1 。Dataguard安裝在一臺主機上,有些問題。暫把測試記錄下來。有環境了再測試。

-- 11GR2之前的配置

-- 在當前的主庫上,創建兩個services,一個連接到主庫,一個連接到備庫。

SQL> exec dbms_service.create_service('prim_db','prim_db');     -- 其中一個是service_name,一個是network_name
SQL> exec dbms_service.create_service('stby_db','stby_db');     -- 注意要在服務端配置netowrk_name 

-- 在當前主庫,啓動service

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

-- 查看監聽器的狀態

服務摘要..
服務 "CLRExtProc" 包含 1 個實例。
  實例 "CLRExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
服務 "nocdb" 包含 2 個實例。
  實例 "nocdb", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
  實例 "nocdb", 狀態 READY, 包含此服務的 1 個處理程序...
服務 "nocdbXDB" 包含 1 個實例。
  實例 "nocdb", 狀態 READY, 包含此服務的 1 個處理程序...
服務 "nocdb_stdby" 包含 1 個實例。
  實例 "nocdb_stdby", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
服務 "orcl" 包含 1 個實例。
  實例 "orcl", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
服務 "orcl_stdby" 包含 1 個實例。
  實例 "orcl_stdby", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
服務 "prim_db" 包含 1 個實例。
  實例 "nocdb", 狀態 READY, 包含此服務的 1 個處理程序...
命令執行成功
LSNRCTL>

-- 在當前主庫,創建觸發器,管理這些services

CREATE OR REPLACE TRIGGER startDgServices 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('prim_db'); END IF;
  IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN DBMS_SERVICE.START_SERVICE('stby_db'); END IF;
END;
/

-- 配置客戶端的tnsnames

PRIM_DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (FAILOVER = ON)
      (LOAD_BALANCE = OFF)
      (ADDRESS = (PROTOCOL = TCP)(HOST = primary.oracle.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = standby.oracle.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = prim_db)
    )
  )
  
STBY_DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (FAILOVER = ON)
      (LOAD_BALANCE = OFF)
      (ADDRESS = (PROTOCOL = TCP)(HOST = primary.oracle.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = standby.oracle.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = stby_db)
    )
  )  
  

11gR2 和之後版本的配置方法

-- 在主庫和備庫上創建主庫服務

On primary:
[oracle@vmOraLinux6 ~]$ srvctl add service -d ora11gR2 -s prim_db -l PRIMARY -e SESSION -m BASIC -w 10 -z 10
On standby:
[oracle@vmOraLinux6 ~]$ srvctl add service -d sby11gR2 -s prim_db -l PRIMARY -e SESSION -m BASIC -w 10 -z 10

-- 啓動創建的服務

[oracle@vmOraLinux6 admin]$ srvctl start service -d ora11gR2 -s prim_db

-- 在主庫和備庫上創建備庫服務

On primary:
[oracle@vmOraLinux6 ~]$ srvctl add service -d ora11gR2 -s stby_db -l PHYSICAL_STANDBY -e SESSION -m BASIC -w 10 -z 10
On standby:
[oracle@vmOraLinux6 ~]$ srvctl add service -d sby11gR2 -s stby_db -l PHYSICAL_STANDBY -e SESSION -m BASIC -w 10 -z 10

-- 啓動創建的服務

[oracle@vmOraLinux6 ~]$ srvctl start service -d sby11gR2 -s stby_db

-- 創建客戶端的tnsnames

PRIM_DB =
  (DESCRIPTION =
     (ADDRESS_LIST =
       (FAILOVER = ON)
       (LOAD_BALANCE = OFF)
       (ADDRESS = (PROTOCOL = TCP)(HOST = primary.oracle.com)(PORT = 1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = standby.oracle.com)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = prim_db)
     )
  )

STBY_DB =
  (DESCRIPTION =
     (ADDRESS_LIST =
       (FAILOVER = ON)
       (LOAD_BALANCE = OFF)
       (ADDRESS = (PROTOCOL = TCP)(HOST = primary.oracle.com)(PORT = 1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = standby.oracle.com)(PORT = 1521))
     )
    (CONNECT_DATA =
       (SERVICE_NAME = stby_db)
    )
  )

END

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