Digamos que temos a seguinte nomenclatura local tns:
CMAN =
(DESCRIPTION=
(SOURCE_ROUTE=YES)
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.16)(PORT=1522)) ###CMAN
(ADDRESS=(PROTOCOL=TCP)(HOST=sat-scan)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=satdb)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=10)
(DELAY=1)
)
)
)
SOURCE_ROUTE=SIM é:
Quando você define esse parâmetro como ativado ou sim, o Oracle Net usa cada endereço em ordem até que o destino seja alcançado. Para usar o Oracle Connection Manager, é necessária uma conexão inicial do cliente com o Oracle Connection Manager e uma segunda conexão do Oracle Connection Manager com o listener.
Mas se tivermos dois cman's? como implementar os parâmetros LOAD_BALANCE e FAILOVER? isso é correto?
CMAN =
(DESCRIPTION=
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(SOURCE_ROUTE=YES)
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.16)(PORT=1522)) ###CMAN
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.17)(PORT=1522)) ###CMAN
(ADDRESS=(PROTOCOL=TCP)(HOST=sat-scan)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=satdb)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=10)
(DELAY=1)
)
)
)
Quer dizer, ele deve balancear e fazer failover apenas em torno 192.168.0.16:1522
e 192.168.0.17:1522
, mas acho que consideraria sat-scan:1521
também e talvez o cliente se conecte diretamente pensando scan-scan
sem passar pelo cman.
Você pode balancear a carga de várias DESCRIPTIONS, com cada DESCRIPTION fornecendo diferentes SOURCE_ROUTEs, assim:
O seguinte também deve funcionar e ser um pouco mais compacto. Nesse caso, a rota vai primeiro para uma lista de endereços para os gerenciadores de conexão, que são definidos para balanceamento de carga e failover, e depois é direcionado para o endereço RAC SCAN, independentemente de qual gerenciador de conexão é usado: