У меня есть два кластера Oracle RAC в одной подсети. Для этого обсуждения предположим, что один - это кластер QA, а другой - кластер DEV. Оба они работают на 64-разрядной версии RedHat Enterprise Linux 5.
Они настроены одинаково, поэтому у них обоих есть экземпляр с именем MyInstance и одинаковые пользователи (как система, так и БД), пароли и все остальное.
С помощью:
oracle @ QA1> sqlplus -S пользователь / пароль @my_sql_file
фактически запускает my_sql_file.sql для экземпляра DEV, даже если я нахожусь на сервере QA1. Я могу попробовать что-то вроде:
oracle @ QA1> sqlplus -S пользователь / пароль @ QA1 / MyInstance @my_sql_file
но это дает мне ошибки о том, что целевой хост или объект не существует (QA1 находится в моем файле hosts, а MyInstance находится в моем выводе lsnrctl status).
Что вы делаете, когда у вас есть кластеры в одной подсети? Есть ли что-то особенное, что я должен был настроить? Я читал и думаю, что должен был дать им разные названия сервисов. Вы, dbas, согласны? (Я сейчас пытаюсь узнать, как это сделать на 11g)
Есть ли способ заставить SQLPLUS подключаться только к локальным экземплярам?
Нужно ли настраивать мои идентификаторы безопасности или прослушиватели каким-либо особым образом, чтобы разрешить подключение user / password @ host / sid к SQLPLUS? Прямо сейчас это не так.
Вы описали очень распространенный сценарий. Часто у вас будут бета-версия, среда разработки и производственная среда, которые соответствуют друг другу. Вам просто нужно отредактировать файл tnsdames. См. Пример ниже
# Generated by Oracle configuration tools.
QA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = computer.somedomain.com) (PORT = 1521))) (CONNECT_DATA = (sid = samesid)))
DEV = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = "computer2.somedomain.com") (PORT = 1521))) (CONNECT_DATA = (sid = samesid)))