Oracle10gR2 主備自動切換之客戶端Failover配置

1. 主庫檢查和設置

假設新增的服務名爲ORCL_TAF.LK.

SQL> exec dbms_service.create_service(service_name=>'ORCL_TAF.LK', network_name=>'ORCL_TAF.LK');
SQL> exec dbms_service.start_service(service_name=>'ORCL_TAF.LK');
SQL> CREATE OR REPLACE TRIGGER trg_oci_service
after startup on database
DECLARE
role VARCHAR(30);
BEGIN
SELECT DATABASE_ROLE INTO role FROM V$DATABASE;
IF role='PRIMARY' THEN
DBMS_SERVICE.START_SERVICE('ORCL_TAF.LK');
END IF;
END;
/
SQL> show parameter service_names
NAME                                 TYPE            VALUE
------------------------------------ --------------- ------------------------------
service_names                        string          ORCL_TAF.LK

若備庫非實時應用,則手工歸檔確保觸發器傳到備庫:
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

確認可以顯示新增的服務:
$ lsnrctl status
...
Service "ORCL_TAF.LK" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...

2. 配置OCI客戶端(包括純OCI/OCCI客戶端和JDBC-OCI客戶端)

爲了達到實例宕掉但監聽不宕的情況下也行, 監聽需要全部是動態註冊的, 不允許靜態配置的服務名. 因爲動態註冊的話,當實例宕掉後,其服務名就會從監聽中消失, 此時應用纔會去償試第二個IP地址. 如果有靜態配置的話, 則由於監聽是可以接受客戶端的請求, 將不會去償試第二個IP地址, 而是報出oracle not available的錯誤.

$ vi $ORACLE_HOME/network/admin/tnsnames.ora
--------------------------------------------------------------------------------
DB_ORCL=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=primary_host)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=standby_host)(PORT=1521))
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=ORCL_TAF.LK)
)
)
--------------------------------------------------------------------------------
注意: ADDRESS_LIST中包含主備庫服務器和端口信息, 其中SERVICE_NAME爲新增的服務名ORCL_TAF.LK.

對於JDBC-OCI客戶端配置方法爲"jdbc:oracle:oci8:@DB_ORCL".

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