Oracle
為 Oracle Dataguard 設置偵聽器
我設置了 Oracle 12c Dataguard 配置。為了建構備用數據庫,我使用了 RMAN DUPLICATE 命令,該命令需要靜態偵聽器配置。
HOSTNAMEA 和 HOSTNAMEB 上的 tnsname.ora 相同:
BR = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAMEA)(PORT = 1521)) ) (CONNECT_DATA = (SID = BR) ) ) BR_STBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAMEB)(PORT = 1521)) ) (CONNECT_DATA = (SID = BR) ) )
listener.ora 主機名:
SID_LIST_LISTENER = (SID_DESC = (GLOBAL_DBNAME = BR_DGMGRL) (ORACLE_HOME = /opt/oracle/product/12200/dbhome_1) (SID_NAME = BR) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAMEA)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
listener.ora 主機名B:
SID_LIST_LISTENER = (SID_DESC = (GLOBAL_DBNAME = BR_STDBY_DGMGRL) (ORACLE_HOME = /opt/oracle/product/12200/dbhome_1) (SID_NAME = BR) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAMEB)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
此配置使用靜態偵聽器配置。例如,應用程序如何知道數據庫已從 HOSTNAMEA 切換到 HOSTNAMEB?我應該使用動態偵聽器註冊嗎?配置應該如何?
您應該在客戶端電腦中有一個 TNS 條目,類似於以下連接到數據保護環境。
BR = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTA)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTB)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = BR) ) ) BR_STBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTA)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTB)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = BR_STBY) ) )
您還應該根據他們的角色主要或備用配置數據庫服務,如下所示(如果您使用的是網格基礎架構)。
srvctl add service -d BR -s BR -l PRIMARY -m BASIC -e SELECT -w 1 -z 180 srvctl add service -d BR -s BR_STBY -l PHYSICAL_STANDBY –m BASIC –e SELECT –w 1 –z 180 srvctl start service -s BR -s BR
如果您沒有使用網格基礎設施,那麼(主要的 AS SYSDBA)-
SQL>exec dbms_service.create_service(service_name => 'BR', network_name => 'BR', failover_method => 'BASIC', failover_type => 'SELECT', failover_retries => 10, failover_delay => 1); SQL> exec dbms_service.create_service(service_name => 'BR_STBY', network_name => 'BR_STBY', failover_method => 'BASIC', failover_type => 'SELECT', failover_retries => 10, failover_delay => 1); SQL> create or replace trigger MANAGE_SERVICES after startup on database declare db_role varchar2(16); db_mode varchar2(20); begin select database_role, open_mode into db_role, db_mode from v$database; if db_role = 'PRIMARY' then dbms_service.start_service('BR'); dbms_service.stop_service('BR_STBY'); elsif (db_role = 'PHYSICAL STANDBY') and (db_mode = 'READ ONLY') then dbms_service.start_service('BR_STBY'); dbms_service.stop_service('BR'); else dbms_service.stop_service('BR'); dbms_service.stop_service('BR_STBY'); end if; end; / SQL>
根據您的需要修改上述範例中使用的屬性,詳細資訊請參閱 Oracle 文件。