Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Администрирование Oracle Database:
- Установка и настройка базы данных
- Обновление, применение патчей
- Оптимизация, настройка производительности
- Обучение, подготовка персонала, оптимизация
  • Страница:
  • 1
  • 2
  • 3

ТЕМА: Oracle: Как создать Database Link

Oracle: Как создать Database Link 24 июль 2011 09:24 #2919

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 44
  • Спасибо получено: 0
Есть 2 компьютера, один локальный, девелоперский, находится в домене MYDOMEN. Global Name локальной базы называется sbase.
Второй удаленный, рабочий. Ни в каком домене не состоит. Global Name удаленной базы также называется sbase.
На локальной машине в tnsnames.ora есть следующее (это собственно весь файл):

LOCALLINK.MYDOMEN.RU =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sbase)
)
)

REMOTELINK.MYDOMEN.RU =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 217.xxx.xxx.xxx)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sbase)
)
)


SQL> disc;
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
JServer Release 8.1.7.0.0 - Production
SQL>
SQL> connect .../...@REMOTELINK.MYDOMEN.RU --- коннекчусь к удаленному компьютеру
Connected.
SQL>
SQL> select * from global_name;

GLOBAL_NAME
SBASE

SQL> disc;
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
JServer Release 8.1.7.0.0 - Production
SQL>
SQL> connect .../...@LOCALLINK.MYDOMEN.RU --- коннекчусь к локальному компьютеру
Connected.
SQL>
SQL> select * from global_name;

GLOBAL_NAME
SBASE.MYDOMEN.RU

В общем, все верно.

Подскажите, как на основе этих данных создать в любой схеме локального комьютера линк на схему удаленного компьютера.

На обоих компьютерах Win2000AdvServer+Oracle8.1.7

P.S. Вот что мне не понравилось, так это путаница с терминологией в документации. Вот например:
В Oracle8i SQL Reference/CREATE DATABASE LINK написано:
USING 'connect string' - specifies the service name of a remote database. For information on specifying remote databases, see Net8 Administrator's Guide.
Насколько я понимаю service name of a remote database - это в моем случае SBASE (Написано же в tnsnames.ora - SERVICE_NAME = sbase).
В другой же части Oracle8i SQL Reference/Basic Elements of Oracle SQL/Referring to Objects in Remote Databases/Database Connect String написано:
The database connect string is the specification used by Net8 to access the remote database. Насколько я понимаю - это REMOTELINK.MYDOMEN.RU.
Это так? Или это путаница в моей голове, а не в доках?

P.S. Все имена вымышлены, но вроде я нигде ошибок не допустил.

P.S. Сам когдато с большими потугами создавал такие линки, а вот щас чегото вообще не получается. Посему за большого ламера не считайте.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как создать Database Link 24 июль 2011 09:25 #2920

  • Doc
  • Doc аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 68
  • Спасибо получено: 1
В глоссарии Oracle9i Net Services Administrator's Guide под "net service name" подразумевается именно "A simple name for a service that resolves to a connect descriptor". Тут же дается объяснение того, что такое connect descriptor.

В твоем случае это REMOTELINK.MYDOMEN.RU, или просто REMOTELINK, по-моему это может зависеть от параметра NAMES.DEFAULT_DOMAIN в sqlnet.ora.

Строго говоря, наличие net service name для создания линка необязательно, можно обойтись и без него, зная только connect descriptor:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как создать Database Link 24 июль 2011 09:57 #2921

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 44
  • Спасибо получено: 0
dblink - это просто имя линка. От балды. Просто потом в запросе ты будешь его задавать в виде SELECT * FROM TABLE table_name@dblink. А connect_string - это имя сервиса из tnsnames.ora. Ты его всегда задаешь, когда коннектишься к базе по сети, типа
CONNECT scott/tiger@REMOTELINK.MYDOMEN.RU

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как создать Database Link 24 июль 2011 10:01 #2922

  • Gwen
  • Gwen аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 49
  • Спасибо получено: 0
Привет!
В случае использования глобальных имён, имя линка к БД должно совпадать с global_name этой БД.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как создать Database Link 24 июль 2011 10:03 #2923

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 44
  • Спасибо получено: 0
спасибо за информацию.

Итак, насчет терминологии:
Смотрел глассарий, все понатно и такие выводы:

connect descriptor - это в моем случае:
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 217.xxx.xxx.xxx)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sbase)
)
)

net service name - это, то что указывает на connect descriptor в файле tnsnames.ora. То есть в моем случае: REMOTELINK.MYDOMEN.RU

service name - абсолютно НЕ одно и тоже, что net service name. По докуметации это: A logical representation of a database, which is the way a database is presented to clients. В частности это одно и тоже, что и global database name.

Например, если бы я писал докуметацию и раздел касался бы только Net-а (в частности как database link), у меня был бы соблазн опускать net перед net service name. Получалось бы service name, что в данном контексте корректно, но НЕ в пределах всей документации.
Это я уже приводил:
USING 'connect string' - specifies the service name of a remote database.
Что в данном случае имеется ввиду под service name? net service name или (true :-)) service name. Думаю именно net service name.

Ладно, это проехали. Теперь реплики в адрес полу-ник-тезки (Noname_):
dblink - это просто имя линка. От балды.

Это не так. Ели так, то дакажите. Во-первых, почему тогда возникает ошибка:

ORA-02085 database link string connects to string
Cause: The database link attempted to connect to a database with a different name. The name of the database link must be the same name as the name of the database.
Action: Create a database link with the same name as the database to which it connects.
Потому, что между названием database link-а и между service name удаленной базы должно быть соответсвие.

Если я напишу просто SBASE то будет ошибка:
SQL> create database link sbase
2 connect to .... identified by ...
3 using
4 'REMOTELINK.MYDOMEN.RU'
5 ;
connect to ... identified by ....
*
ERROR at line 2:
ORA-02082: a loopback database link must have a connection qualifier

И это первое, второе, есть раздел Oracle8i SQL Reference/Basic Elements of Oracle SQL/Referring to Objects in Remote Databases/Database Connect String в котором написано как по правилам назначать имена db-линкам. Формат такой:
database.domain@connect_descriptor.
domain и connect_descriptor можно опускать. А вот интересно, если connect_descriptor это тот самый connect descriptor о котором я упоминал выше, то тогда как он там прописывается? В одну строку, в кавычках, без? У меня не вышло никак.

И для себя я делаю вывод - назначить таки домен для удаленной базы, чтобы исключить это двоезначие. Тогда думаю должно все заработать.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как создать Database Link 24 июль 2011 10:04 #2924

  • Doc
  • Doc аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 68
  • Спасибо получено: 1
ORA-02082 говорит о том, что нельзя создавать линк с именем, совпадающим с global_name той БД, где ты его создаешь. Ради смеха, попробуй удалить все линки с именем, совпадающим с глобальным именем базы (у тебя это sname), и скажи select * from obj@sname; Оно будет работать, хотя линка с таким именем нет.

Имя database link не должно быть одинаково с global_name той БД, на которой ты его создаешь, иначе ORA-02082. Но оно может не совпадать с global_name БД, куда ты его указываешь. Последнее я могу доказать пока только личным опытом, но пороюсь в документации, м.б. найду ссылку на это.

Мы создавали репликацию между серверами и столкнулись с тем, что для updatable snapshots требуется создавать линк с именем, совпадающим с global_name удаленной базы. Надо поискать в доке, так ли это или нет, но для твоего случая с 2-мя БД с одинаковыми global_name это может составить проблему.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3