Ошибка ORA-12505 при подключении к базам данных на том же компьютере, которые прослушивают через тот же порт - PullRequest
0 голосов
/ 02 марта 2020

У меня есть база данных, и она копируется на одном компьютере с именем DB1 и DB2.

Я пытаюсь подключиться к обеим базам данных через SQL Developer. У меня не установлен Oracle клиент на моем windows.

. Tnsnames.ORA выглядит так:

DB1 =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.com)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = DB1)
 )
)

DB2 =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.com)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = DB2)
 )
)

Listener.ora выглядит следующим образом:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtPROC)
      (ORACLE_HOME = /product/11.2.0.4/)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 
      (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.com)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DB1)
      (SID_NAME = DB1)
      (ORACLE_HOME = /product/11.2.0.4/)
      (PRESPAWN_MAX = 50)
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DB2)
      (SID_NAME = DB2)
      (ORACLE_HOME = /product/11.2.0.4/)
      (PRESPAWN_MAX = 50)
    )
  )

Я могу подключиться к DB2, но не к DB1. Когда я подключаюсь к DB1 от SQL Developer, я получаю ошибку ORA-12505.

Когда я запускаю $ ps -ef | grep pmon, я получаю 2 процесса - ora_DB1 и ora_DB2

Когда я запускаю $ ps -ef | grep tns, я получаю 1 процесс - LISTENER

Когда я запускаю $ lsnrctl status LISTENER, я получаю вывод

Сводка служб

Служба "DB2" имеет 1 экземпляр ( с). Экземпляр "DB2" со статусом UNKNOWN имеет 1 обработчик (и) для этой службы ...

Почему я не могу подключиться к "DB1"?

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Спасибо всем за помощь!

Это как-то связано с динамической c регистрацией. В первой строке файла listener.ora было установлено значение OFF. Как только это было закомментировано, все было в порядке. Порт остается тем же, не было необходимости прослушивать через другой порт.

Также, очевидно, когда я запустил LISTENER статуса $ lsnrctl, я получил вывод как состояние UKNOWN, потому что регистрация Dynami c была отключена .

Service "DB2" has 1 instance(s). Instance "DB2", status UNKNOWN, has 1 handler(s) for this service...

Итак, 2 базы данных на одном компьютере можно настроить для прослушивания через один и тот же порт.

0 голосов
/ 02 марта 2020

Создайте еще один прослушиватель для DB2 и измените порт на 1522 в файле listener.ora, после чего вы сможете подключиться. Также ваши имена SID_LIST_LISTENER совпадают. У вас есть 2 SID_LIST_LISTENER, и они ищут DB1 и DB2, но их имена совпадают. Измените их имена, например, SID_LIST_LISTENER1 и SID_LIST_LISTENER2.

Не забудьте перезапустить прослушиватель

(необязательно), вам не нужно добавлять еще один SID_LIST_LISTENER. Если вы хотите, вы можете добавить SID_DES C в SID_LIST_LISTENER по умолчанию, например:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DB1)
      (SID_NAME = DB1)
      (ORACLE_HOME = /product/11.2.0.4/)
      (PRESPAWN_MAX = 50)
    )
     (SID_DESC =
      (GLOBAL_DBNAME = DB2)
      (SID_NAME = DB2)
      (ORACLE_HOME = /product/11.2.0.4/)
      (PRESPAWN_MAX = 50)
    )
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...