我设置了一个Oracle 12c Dataguard配置。为了构建备用数据库,我使用了RMAN命令,它需要静态侦听器配置。
关于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 HOSTNAMEA:
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 HOSTNAMEB:
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?我应该使用动态侦听器注册吗?配置应该是什么样的?
发布于 2017-11-16 14:43:57
您应该在客户端计算机中有一个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如果您没有使用网格基础设施,那么(作为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文档获取详细信息。
https://dba.stackexchange.com/questions/191061
复制相似问题