Оракул Dblink, как посмотреть

Обновлено: 21.11.2024


Вопрос: Как отобразить ссылки на базу данных в моей базе данных?

Ответ. Чтобы увидеть все ссылки на базы данных в вашей базе данных Oracle, вы можете запустить этот скрипт для dba_db_links. Полный набор сценариев для создания и отображения состояния ссылок на базы данных см. в коллекции сценариев Oracle. .

SET PAGES 58 LINES 80 VERIFY OFF TERM OFF
START title80 "Отчет о ссылках на базу данных"


COLUMN host FORMAT a18 HEADING "Connect|String"
COLUMN owner FORMAT a8 HEADING "Creator"
COLUMN db_link FORMAT a19 HEADING "DB Link|Name"
COLUMN имя пользователя ФОРМАТ a8 ЗАГОЛОВОК «Подключение|Пользователь»
СТОЛБЦ создан ФОРМАТ a15 ЗАГОЛОВОК «Дата|Создано»

ВЫБЕРИТЕ
хост,владелец,db_link,имя пользователя,
to_char(созданный,'dd-mon-yy hh24:mi') созданный
ИЗ
dba_db_links
ЗАКАЗАТЬ ПО
владельцу,
хозяину;

Пример листинга из скрипта отчета о ссылках на БД.

Дата: 14.10.01 Страница: 1
Время: 14:21 Ссылки на базу данных Отчет DBAUTIL
база данных galinux1

Подключиться к базе данных Дата подключения
Имя создателя строки Создано пользователем
---- -------- --- ---------------- -------- ---------------
aultdb1.mramobile DBAUTIL AULTDB1.TUSCGALINUX DBAUTIL 14 окт. 01 14:01

Обучение Oracle от Дона Берлесона

Лучшие на сайте «Учебные курсы Oracle» находятся на расстоянии одного телефонного звонка! Вы можете пройти индивидуальное обучение Oracle от Дональда Берлесона прямо в своем магазине!

Бурлесон — американская команда

Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.

Проверьте опыт! Любой, кто рассматривает возможность использования услуг эксперта службы поддержки Oracle, должен самостоятельно проверить свои полномочия и опыт, а не полагаться на рекламу и самопровозглашенный опыт. Все законные эксперты Oracle публикуют свои квалификации Oracle.

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:

и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

Используйте оператор CREATE DATABASE LINK, чтобы создать ссылку на базу данных. Ссылка на базу данных — это объект схемы в одной базе данных, который позволяет получить доступ к объектам в другой базе данных. Другая база данных не обязательно должна быть системой Oracle Database. Однако для доступа к системам, отличным от Oracle, необходимо использовать гетерогенные службы Oracle.

После того как вы создали ссылку на базу данных, вы можете использовать ее для ссылки на таблицы и представления в другой базе данных. В операторах SQL вы можете ссылаться на таблицу или представление в другой базе данных, добавляя @dblink к имени таблицы или представления. Вы можете запросить таблицу или представление в другой базе данных с помощью инструкции SELECT. Вы также можете получить доступ к удаленным таблицам и представлениям с помощью любого оператора INSERT , UPDATE , DELETE или LOCK TABLE.

Руководство разработчика приложений баз данных Oracle. Основные сведения о доступе к удаленным таблицам или представлениям с помощью функций, процедур, пакетов и типов данных PL/SQL

Руководство администратора базы данных Oracle для получения информации о системах распределенных баз данных

Справочник по базе данных Oracle для описания существующих ссылок на базы данных в представлениях словаря данных ALL_DB_LINKS , DBA_DB_LINKS и USER_DB_LINKS, а также для получения информации о мониторинге производительности существующих ссылок с помощью динамического представления производительности V$DBLINK

DROP DATABASE LINK для получения информации об удалении существующих ссылок на базы данных

INSERT, UPDATE, DELETE и LOCK TABLE для использования ссылок в операциях DML

Чтобы создать ссылку на частную базу данных, у вас должна быть системная привилегия CREATE DATABASE LINK. Чтобы создать ссылку на общедоступную базу данных, вы должны иметь системную привилегию CREATE PUBLIC DATABASE LINK. Кроме того, у вас должна быть системная привилегия CREATE SESSION для удаленной базы данных Oracle.

Oracle Net должен быть установлен как в локальной, так и в удаленной базе данных Oracle.

Ключевое слово и параметры

Укажите SHARED, чтобы использовать одно сетевое подключение для создания общедоступной ссылки на базу данных, которую могут использовать несколько пользователей. Если вы укажете SHARED , вы также должны указать предложение dblink_authentication.

Руководство администратора базы данных Oracle для получения дополнительной информации об общих ссылках на базу данных

Укажите PUBLIC, чтобы создать общедоступную ссылку на базу данных, доступную для всех пользователей.Если вы опустите этот пункт, ссылка на базу данных будет частной и доступна только вам.

Укажите полное или частичное имя ссылки на базу данных. Если указать только имя базы данных, Oracle Database неявно добавит домен локальной базы данных.

Используйте только символы ASCII для dblink . Многобайтовые символы не поддерживаются. Имя ссылки на базу данных нечувствительно к регистру и хранится в виде символов ASCII верхнего регистра. Если вы укажете имя базы данных как идентификатор в кавычках, кавычки игнорируются.

Если значение параметра инициализации GLOBAL_NAMES равно TRUE , ссылка на базу данных должна иметь то же имя, что и база данных, к которой она подключается. Если значение GLOBAL_NAMES равно FALSE и если вы изменили глобальное имя базы данных, вы можете указать глобальное имя.

Максимальное количество ссылок на базу данных, которое может быть открыто за один сеанс или один экземпляр конфигурации Real Application Clusters, зависит от значения параметров инициализации OPEN_LINKS и OPEN_LINKS_PER_INSTANCE.

Ограничение на создание ссылок на базы данных. Вы не можете создать ссылку на базу данных в схеме другого пользователя, и вы не можете указать dblink с именем схемы. В именах ссылок на базы данных разрешены точки, поэтому Oracle Database интерпретирует полное имя, например ralph.linktosales, как имя ссылки на базу данных в вашей схеме, а не как ссылку на базу данных с именем linktosales в схеме ralph.)

"Ссылка на объекты в удаленных базах данных" для рекомендаций по именованию ссылок на базы данных

Справочник по базе данных Oracle для получения информации о параметрах инициализации GLOBAL_NAMES , OPEN_LINKS и OPEN_LINKS_PER_INSTANCE

"Предложение RENAME GLOBAL_NAME" (предложение ALTER DATABASE) для получения информации об изменении глобального имени базы данных

Пункт CONNECT TO

Предложение CONNECT TO позволяет разрешить подключение к удаленной базе данных. Вы можете указать это предложение и предложение dblink_authentication, только если вы создаете ссылку на общую базу данных.

Укажите CURRENT_USER, чтобы создать ссылку на базу данных текущего пользователя. Текущий пользователь должен быть глобальным пользователем с действительной учетной записью в удаленной базе данных.

Если ссылка на базу данных используется напрямую, то есть не из хранимого объекта, то текущий пользователь совпадает с подключенным пользователем.

При выполнении хранимого объекта (например, процедуры, представления или триггера), который инициирует связь с базой данных, CURRENT_USER — это имя пользователя, которому принадлежит хранимый объект, а не имя пользователя, вызвавшего этот объект. Например, если ссылка на базу данных появляется внутри процедуры scott.p (созданной scott ), а пользователь jane вызывает процедуру scott.p , текущий пользователь — scott .

Однако, если сохраненный объект является функцией, процедурой или пакетом с правами вызывающей стороны, идентификатор авторизации вызывающей стороны используется для подключения в качестве удаленного пользователя. Например, если ссылка на привилегированную базу данных появляется внутри процедуры scott.p (процедура с правами вызывающего, созданная scott ), и пользователь Джейн вызывает процедуру scott.p , то CURRENT_USER — это Джейн, и процедура выполняется с привилегиями Джейн.

CREATE FUNCTION для получения дополнительной информации о функциях с правами вызывающего

пользователь, ОПРЕДЕЛЕННЫЙ ПО паролю

Укажите имя пользователя и пароль, используемые для подключения к удаленной базе данных с использованием фиксированной ссылки на базу данных пользователей. Если вы опустите это предложение, ссылка на базу данных будет использовать имя пользователя и пароль каждого пользователя, подключенного к базе данных. Это называется ссылкой на базу данных подключенных пользователей .

Укажите имя пользователя и пароль для целевого экземпляра. Это предложение аутентифицирует пользователя на удаленном сервере и требуется для обеспечения безопасности. Указанные имя пользователя и пароль должны быть действительными именем пользователя и паролем на удаленном экземпляре. Имя пользователя и пароль используются только для аутентификации. Никакие другие операции от имени этого пользователя не выполняются.

Вы должны указать это предложение при указании предложения SHARED. Вы не можете указать это предложение, если не укажете предложение SHARED.

ИСПОЛЬЗОВАНИЕ ' строки подключения '

Укажите имя службы удаленной базы данных. Если вы укажете только имя базы данных, Oracle Database неявно добавит домен базы данных к строке подключения, чтобы создать полное имя службы. Поэтому, если домен базы данных удаленной базы данных отличается от домена текущей базы данных, необходимо указать полное имя службы.

Руководство администратора базы данных Oracle для получения информации об указании удаленных баз данных

В следующих примерах предполагается две базы данных, одна с именем local, а другая с именем remote . В примерах используется домен базы данных Oracle. Домен вашей базы данных будет другим.

Определение ссылки на общедоступную базу данных: пример Следующий оператор определяет общую ссылку на общедоступную базу данных с именем remote, которая ссылается на базу данных, заданную именем службы remote :

Эта ссылка на базу данных позволяет пользователю hr в локальной базе данных обновлять таблицу в удаленной базе данных (при условии, что у hr есть соответствующие привилегии):

Определение фиксированной пользовательской ссылки на базу данных: пример В следующем операторе пользователь hr в удаленной базе данных определяет фиксированную пользовательскую ссылку на базу данных с именем local для схемы hr в локальной базе данных:

После создания этой связи с базой данных hr может запрашивать таблицы в схеме hr в локальной базе данных следующим образом:

Пользователь hr также может использовать операторы DML для изменения данных в локальной базе данных:

Используя эту фиксированную ссылку на базу данных, пользователь hr в удаленной базе данных также может получить доступ к таблицам, принадлежащим другим пользователям в той же базе данных. Этот оператор предполагает, что пользователь hr имеет привилегии SELECT в таблице oe.customers. Оператор соединяется с пользователем hr в локальной базе данных, а затем запрашивает oe. таблица клиентов:

Определение ссылки на базу данных CURRENT_USER: пример Следующий оператор определяет ссылку базы данных текущего пользователя на удаленную базу данных, используя полное имя службы в качестве имени ссылки:

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

Вы можете создать синоним, чтобы скрыть тот факт, что конкретная таблица находится в удаленной базе данных. Следующий оператор заставляет все будущие ссылки на emp_table обращаться к таблице сотрудников, принадлежащей hr в удаленной базе данных:

Я хотел бы знать, существует ли команда Oracle, чтобы узнать, используется ли DB-LINK (имя: myBDLink) где-то в БД и как отображать объекты (представления, материализованные представления, процедуры, функции, . ) которые его используют.

Не могли бы вы помочь мне с этим?

Спасибо за помощь

Если ничего не помогает, настройте триггер ПОСЛЕ ВХОДА для пользователя ссылки на БД в удаленной БД, который проверяет использование ссылки на БД.

3 ответа 3

Ну, вы можете попробовать запросить различные системные представления и посмотреть, содержит ли какое-либо из них искомую строку. Поскольку вы хотите проверить всю базу данных, вы, вероятно, подключитесь как привилегированный пользователь и проверите dba_views; в противном случае подойдет all_ или user_.

Например, для проверки процедур, функций, пакетов и т. д.

Для проверки представлений вам понадобится функция, которая будет выполнять поиск в столбце с типом данных LONG (поскольку вы не можете использовать ее непосредственно в SQL):

Я исключил SYS и SYSTEM, поскольку они не должны содержать что-либо из материалов пользователей. Возможно, вы захотите исключить еще нескольких пользователей.

Чтобы увидеть дополнительные источники (ресурсы), запросите словарь, например

Для их просмотра необходимо быть привилегированным пользователем (например, SYS). Если нет, поговорите со своим администратором баз данных, чтобы узнать, что они могут сделать. Для начала запустите скрипт с ALL_SOURCE и ALL_VIEWS; он покажет данные об объектах, к которым у вас есть доступ.

Полного ответа нет. Как база данных узнает о коде, находящемся вне базы данных? Это невозможно. Таким образом, если у вас есть сценарий sql или какое-либо приложение, которое не использует хранимые процедуры для выполнения всего, база данных не будет знать о них.

Тем не менее, для зависимостей, которые находятся в хранимых процедурах в базе данных, вы можете попробовать следующее:

Я попробовал выполнить запрос (даже ту его часть), но он не работает. dba_dependencies не распознается. Не могли бы вы помочь мне с этим?

Чтобы добавить к другим (правильным) ответам, опубликованным @Littlefoot и @EdStevens, можно также провести быстрый и грязный анализ с помощью автоматизированного репозитория рабочих нагрузок (AWR).

Преимущество этого подхода заключается в том, что он найдет использование удаленных объектов из SQL, отправленных в базу данных, независимо от того, находится ли этот SQL в DBA_SOURCE или нет (например, встроен во внешнее приложение).

Проблема в том, что данные AWR не являются полными на 100 %. Во-первых, он не хранится вечно, поэтому ссылка на базу данных, которая использовалась в последний раз более месяца (или двух месяцев, или любого другого времени, в течение которого ваши администраторы баз данных хранят данные AWR), не будет видна. Во-вторых, AWR делает снимки только периодически, скажем, каждый час. Таким образом, теоретически возможно, что SQL использует ссылку на базу данных, а затем устаревает из библиотечного кеша до следующего моментального снимка AWR.

Вывод: в этом руководстве вы узнаете о ссылке базы данных Oracle и о том, как создать ссылку базы данных на удаленный сервер базы данных Oracle.

Что такое ссылка на базу данных Oracle

Ссылка на базу данных — это соединение базы данных Oracle с другой удаленной базой данных. Удаленная база данных может быть базой данных Oracle или любой другой базой данных, совместимой с ODBC, например SQL Server или MySQL.

Зачем вам нужна ссылка на базу данных

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

После создания ссылки на базу данных вы можете получить доступ к таблицам или представлениям из удаленной базы данных, используя следующий шаблон:

Например, вы можете запрашивать данные из таблицы в удаленной базе данных, как если бы они находились на локальном сервере:

При доступе к удаленной таблице или представлению по ссылке базы данных база данных Oracle действует как клиент Oracle.

Использование синонима для упрощения синтаксиса доступа к объектам через ссылку на базу данных

Чтобы упростить синтаксис, вы можете создать синоним для удаленного объекта, доступ к которому осуществляется через ссылку на базу данных, и использовать этот объект, как если бы он был локальным объектом.

Этот синтаксис показывает, как создать синоним для удаленной таблицы:

И этот запрос использует синоним вместо имени удаленной таблицы со ссылкой на базу данных:

Выражение Oracle CREATE DATABASE LINK

Существует два типа ссылок на базы данных: общедоступные и частные.

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

Чтобы создать ссылку на частную базу данных, используйте оператор CREATE DATABASE LINK следующим образом:

  • Сначала укажите имя ссылки на базу данных после ключевых слов CREATE DATABASE LINK.
  • Во-вторых, укажите имя пользователя и пароль удаленной базы данных после ключевых слов CONNECT TO и IDENTIFIED BY.
  • Наконец укажите имя службы удаленной базы данных. Если вы укажете только имя базы данных, Oracle добавит домен базы данных к строке подключения, чтобы сформировать полное имя службы.

Обычно вы добавляете запись в файл tnsnames.ora и ссылаетесь на нее как на remote_database в предложении USING.

В следующем операторе показано, как создать ссылку на частную базу данных для пользователя в удаленной базе данных с полной строкой подключения.

Чтобы создать общедоступную ссылку на базу данных, просто добавьте ключевое слово PUBLIC:

Создать пример ссылки на базу данных

В этом примере мы создадим ссылку базы данных на удаленный сервер базы данных Oracle, расположенный на сервере 10.50.100.143, с портом 1521 и именем службы SALES.

Сначала добавьте следующую запись в файл tnsnames.ora на локальном сервере базы данных Oracle. Обычно файл tnsnames.ora находится в каталоге /NETWORK/ADMIN/ в разделе ORACLE_HOME:

Затем используйте оператор CREATE DATABASE LINK, чтобы создать новую ссылку на частную базу данных, которая подключается к базе данных SALES через учетную запись bob:

Затем выполните оператор SELECT, чтобы запросить данные из таблицы клиентов в базе данных SALES:

Вот результат:

После этого вставьте новую строку в таблицу клиентов:

Наконец, снова запросите данные из таблицы клиентов:

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

Рекомендации по Oracle Database Link

Вот несколько рекомендаций по использованию ссылок на базы данных:

  1. Соглашение об именах: имена ссылок на базы данных должны отражать характер данных, а не сервер базы данных. Например, вместо того, чтобы называть ссылку базы данных SALES_PRD , вы называете ее как SALES .
  2. Удаленные пользователи базы данных: вы должны создать пользователя, предназначенного для связи с базой данных. Кроме того, вы не должны отдавать этого пользователя кому-либо еще. Если вы этого не сделаете, база данных не будет работать, когда кто-то изменит пароль пользователя или даже удалит его.
  3. Используйте запись для конкретной службы в tnsnames.ora вместо псевдонима для конкретной базы данных, чтобы при копировании между средами продукта, тестирования и разработки вам не нужно было заново создавать ссылку на базу данных.

В этом руководстве вы узнали о концепции связи базы данных Oracle и о том, как использовать Oracle CREATE DATABASE LINK для создания новой связи базы данных с удаленным сервером базы данных Oracle.

Читайте также: