Как создать ссылку на базу данных, где удаленный и локальный серверы - это один и тот же сервер - PullRequest
6 голосов
/ 02 июня 2010

Мне нужно создать ссылку на базу данных, которая является ссылкой на схему на том же сервере. Есть ли для этого специальное ключевое слово? (например, local или localhost)

Я не совсем уверен, какое имя сервера указано в tnsnames, и это может быть частью моей проблемы.

Это для сложной ситуации, которая включает сценарий, для продолжения которого требуется ссылка на базу данных.

Ответы [ 3 ]

8 голосов
/ 02 июня 2010

Механизм связи с БД проходит через TNS, поэтому просто определите запись TNS для вашей локальной базы данных и используйте ее в своей ссылке.

Ваши клиентские файлы TNSNAMES.ORA должны содержать запись, которая выглядит примерно так:

YourDBAlias =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = yourHOST)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = YourDB)
    )
  )

Убедитесь, что эта запись также существует в файле TNSNAMES.ORA на сервере базы данных.

Затем создайте ссылку на базу данных как:

CREATE [PUBLIC] DATABASE LINK yourLinkName
       CONNECT TO theSchema IDENTIFIED BY thePW
       USING 'YourDBAlias';

Это должно помочь (если вы используете именование TNS).

Кроме того, если вы не уверены, какое у вас имя TNS для базы данных, в SQL * Plus вы можете выполнить команду:

show parameter service_names

Это покажет вам имена, в которых база данных зарегистрирована как слушатель. Вы должны быть в состоянии найти соответствующую запись в файле TNSNAMES.ORA из этого.

4 голосов
/ 03 июня 2010

Если вы не можете изменить TNSNAMES.ORA, вы можете использовать синтаксис Easy Connect даже для ссылок на БД. Предполагая, что прослушиватель находится на порте по умолчанию, следующий SQL получит строку подключения

выберите utl_inaddr.get_host_address || ': 1521 /' || sys_context ('USERENV', 'INSTANCE_NAME') из двойного

1 голос
/ 03 июня 2010

У вас может быть проблема, если под "схемой на одном сервере" вы подразумеваете схему в той же базе данных. (Например, если сценарий рассматривал что-либо вне схемы как внешнюю базу данных, чтобы сгладить последующие операции SQL).

Oracle обрабатывает петлевые ссылки несколько по-другому, и вы можете получить ошибки ORA-02082 («петлевая ссылка на базу данных должна иметь спецификатор соединения»), если для ссылки используется глобальное имя базы данных. Если вы получаете эту ошибку, вы должны присвоить ссылке другое имя, например «loopback», но для этого также необходимо, чтобы для параметра базы данных global_names было установлено значение false. В противном случае вы получите «ORA-02085: ссылка на базу данных someName подключается к someOtherName»

...