Как я создаю Ссылку Базы данных, где удаленный и локальный тот же сервер

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

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

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

6
задан Brian G 2 June 2010 в 18:46
поделиться

3 ответа

Механизм связи с БД проходит через 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.

8
ответ дан 8 December 2019 в 18:32
поделиться

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

select utl_inaddr.get_host_address || ': 1521 /' || sys_context ('USERENV', 'INSTANCE_NAME') из двойного

4
ответ дан 8 December 2019 в 18:32
поделиться

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

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

1
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: