ORA-12545 with RAC and server load balance

rac1.us.oracle.com - ip адрес узла
rac1-vip.us.oracle.com - VIP адрес узла.

Почему Вы думаете что Netca вешает listener на 2 ip адреса в каждой ноде кластера ?
Зачем слушать что-то кроме VIP адреса узла ?
Вот и я не знал, пока не убрал эту строчку (выделено жирным ниже)


LISTENER_RAC1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.us.oracle.com)(PORT = 1521)(IP = FIRST))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1.us.oracle.com)(PORT = 1521)(IP = FIRST))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
)


Однако если и Вы уберете строчку rac1.us.oracle.com то Ваши клиенты, у которых в tnsnames будет стоять (LOAD_BALANCE = yes) будут через раз получать ошибку ora-12545.

И это при том, что Вы убедитесь, что все листенеры на всех нодах работают, друг о друге знают.

Причина описана в Note:364855.1: При перекресной регистрации PMON, если в БД не стоит параметр local_listener, сообщает удаленному хосту не vip адрес, а...один из тех, что есть на узле. В моем случае сообщался адрес rac1.us.oracle.com

А там понятно, (без выделенной жирным выше строчки )никто не слушает.

Итого, правильно, все таки не поднимать listener на rac.us.oracle.com, а прописывать local_listener. Потому что в случае потери узла, VIP адрес перезжает, а вот обычный - нет. Поэтому после потери узла, клиенты, которых будут перебрасывать, будут ждать долго..

Конечно, не пройдет очередной update информации в listener, он догадается что другого узла нет..но я бы не экспериментировал.

Есть еще вариант с похожей проблемой.
Когда на клиенте имена хостов не резолвятся. Т.е. клиент идет на rac1-vip, его перебрасывает на rac2-vip, а он (клиент) не знает что это. Поэтому убедитесь что файлы /etc/hosts совпадают на клиентах и узлах.

1 комментарий:

  1. не забывайте так же что диспетчера
    по умолчанию регистрируются на PUBLIC-адресе,
    что может стать еще одной головной болью...

    ОтветитьУдалить