Связь базы данных Oracle (database link) — это одностороннее соединение локальной базы данных с удаленной базой данных. Связь всегда односторонняя. Пользователи удаленной базы не могут применять ее для подключения к локальной базе — вместо этого они должны создать отдельную связь базы данных.
Database Link (cвязь) базы данных позволяет получать доступ к разным базам данных через учетную запись пользователя удаленной базы; вы сами не обязаны быть зарегистрированным пользователем удаленной базы данных. Привилегии в этой базе данных будут идентичны привилегиям пользовательской учетной записи, которая применялась для создания связи. Связи баз данных удобны, когда необходимо запросить таблицу в распределенной базе данных, или даже вставить данные из таблицы другой базы в собственную локальную таблицу. Связи баз данных позволяют пользователям обращаться к множеству баз данных как к единой логической базе данных.
Create database link - создание связей на примерах
Создавать можно приватные и общедоступные связи баз данных. Далее мы рассмотрим соответствующие примеры.
Создание приватной связи базы данных
Приватная связь базы данных принадлежит пользователю, который ее создал. В следующем операторе пользователь SYSTEM
создает приватную связь базы данных. Связь базы данных позволяет устанавливать соединение с удаленной базой, используя имя и пароль пользователя hr
этой удаленной базы.
SQL> CONNECT system/system_passwd@finance
Connected.
SQL>
SQL> CREATE DATABASE LINK MONITOR
2 CONNECT TO hr IDENTIFIED BY hr
3 USING 'monitor';
Database link created.
SQL>
После создания связи пользователь SYSTEM
может выполнять запросы к таблице hr.employees
в удаленной базе данных.
SQL> SELECT COUNT(*) FROM hr.employees@monitor;
COUNT(*)
----------
107
SQL>
На заметку! Для создания связи базы данных пользователь должен иметь привилегию
CREATE PRIVATE DATABASE LINK
илиCREATE PUBLIC DATABASE LINK
в локальной базе данных
Обратите внимание, что в предыдущем операторе имя связи удаленной базы данных — MONITOR
— совпадает с TNS-псевдонимом удаленной базы (псевдонимом Oracle Net Service), но вообще может быть любым, по вашему усмотрению. Конструкция CONNECT TO...IDENTIFIED BY
означает, что пользователь этой связи базы данных применяет указанное имя и пароль для входа на удаленную базу данных. Конструкция USING 'monitor' просто специфицирует TNS-псевдоним удаленной базы данных.
Поскольку это приватная связь базы данных, только пользователь SYSTEM
может использовать ее. Когда пользователь hr
попытается воспользоваться этой связью удаленной базы данных, произойдет следующее:
SQL> CONNECT hr/hr;
Connected.
SQL> SELECT count(*) FROM hr.employees@monitor;
select count(*) from hr.employees@monitor
*
ERROR at line 1:
ORA-02019: connection description for remote database not found
не найдено описание подключения для удаленной базы данных
SQL>
Создание общедоступной связи базы данных
Общедоступная связь базы данных позволяет любому пользователю или любому модулю программы PL/SQL обращаться к объектам удаленной базы данных. Оператор создания такой связи очень похож на оператор создания приватной связи. К оператору CREATE DATABASE LINK
просто добавляется ключевое слово PUBLIC
:
SQL> connect system/system_passwd as sysdba;
Connected.
SQL> CREATE PUBLIC DATABASE LINK MONITOR
2 CONNECT TO hr IDENTIFIED BY hr
3 USING 'monitor';
Database link created.
SQL>
Совет. Если нескольким пользователям требуется доступ к удаленной базе данных Oracle из локальной, можно создать общедоступную связь. В противном случае создавайте приватную связь базы данных, которая позволяет обращаться к объектам удаленной базы данных только владельцу.
Как только общедоступная связь MONITOR
создана, любой пользователь может с ее помощью входить в удаленную базу. В следующем примере пользователь tester
применяет общедоступную связь для выполнения запросов к удаленной базе MONITOR
.
SQL> CONNECT tester/tester1;
Connected.
SQL> SELECT COUNT(*) FROM hr.employees@monitor;
COUNT(*)
----------
107
SQL>
На заметку! Пользователь
tester
может обращаться к удаленной базе, даже не будучи ее зарегистрированным пользователем, потому что применяет общедоступную связь, что избавляет его от необходимости указывать комбинацию имени и пароля пользователяhr
для доступа к объектам удаленной базы. Разумеется, с точки зрения безопасности общедоступная связь базы данных — не слишком хорошая идея, особенно с точки зрения аудиторов базы данных.
Использование Database Control для создания связей баз данных
С помощью OEM Database Control очень легко создать связь базы данных. Для этого на домашней странице Database Control нужно щелкнуть на вкладке Administration (Администрирование), а затем на ссылке Database Links (Связи базы данных) в группе Schema (Схема). На этой странице можно создать связь базы данных, ответив на несколько простых вопросов.