Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Отследить цепочку синонимов и вью.  [new]
shurka22
Member

Откуда:
Сообщений: 81
Братья, привет.

Вкратце:
Посоветуйте инструмент, который бы удобно визуально(?) отслеживал цепочку из синонимов и вьюх до конечных таблиц и их полей.
Понятно, что (наверное) можно написать самому восьмиэтажный запрос, но вдруг "всё уже написано до нас"? :)

Подробнее:
Начал работать над проектом, в котором (условно говоря) синонимов больше, чем таблиц.
В проекте около 5ти баз (связаны через дб-линки), в каждой базе порядка 20 схем.
Зачастую таблицы, как правило, имеют вьюхи (чтобы удобнее было накладывать политики) с теми же самыми полями.
Когда я выбираю из таблицы(?) в какой-нибудь рабочей схеме, то это чаще всего синоним, который указывает на вьюху в другой схеме, та в свою очередь может опять ссылаться на синоним и вьюху в третьей схеме, а может быть цепочка уходит и дальше в четвёртую схему. А иногда ещё и через дб-линки.
Как правило, все поля конечных таблиц прокомментированы. Но пока до этого конечного поля конечной таблицы дойдёшь - сто раз изругаешься.

Нет ли какого-нибудь инструмента? Который бы работал приблизительно так:
ему скармливаешь имя таблицы (объекта в схеме), а он бы в ответ расписывал бы всю цепочку (всё дерево) связанных объектов, откуда в итоге будут браться данные.
Ещё лучше, чтобы он это делал по каждому полю отдельно, и чтобы для поля он указывал бы не только цепочку объектов (откуда берётся поле), цепочку типов и цепочку комментариев.

Спасибо.
8 ноя 17, 13:43    [20936319]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
возможно, поможет
all_dependencies
8 ноя 17, 14:28    [20936547]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
shurka22
Member

Откуда:
Сообщений: 81
Увы, инструмента я так и не нашёл, написал коротенький скрипт, который по цепочке (view->synonym..->table ) разворачивает, из каких таблиц в итоге выгребаются данные.

Но остался нерешённым вопрос, откуда выгребаются данные, если очередное вью указывает на объект через дб-линк.
Допустим у меня есть view:

create view view_name_1 (view_field1,view_field2) as
select table_name1.field1, table_name2.field2 from
table_name1, table_name2@db_link_name;

Если посмотреть в all_dependencies, то там видно, что view_name_1 зависит от table_name1. Но никак не видно, что view_name_1 зависит от table_name2, так как table_name2 выбирается через дб-линк. Цепочка обрывается. Есть возможность оследить эту цепочку? Не глазами отследить, а через какое-то view? Ну или ещё какой-нибудь инструмент.

Ну и ещё более интересный вопрос: можно ли отследить, из какой таблицы и какого поля в итоге выбираются данные для конкретного поля view? Для приведённого выше примера хочется видеть, что поле view_name_1.view_field1 - это в итоге значение поля "table_name1.field1". Есть какое-нибудь view в оракле, где это можно было бы посмотреть?
23 мар 18, 07:14    [21279300]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
efendi
Member

Откуда:
Сообщений: 126
shurka22,

Продолжай вести наблюдение своим скриптом через дблинк
23 мар 18, 09:05    [21279452]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
shurka22
Member

Откуда:
Сообщений: 81
А как? Скриптом парсить текст view?
Сейчас-nj я выгребаю зависимости из all_dependencies. Но там есть информация о таблице table_name1, и нет информации о table_name2 (так как она уже за дб-линком)?

Или это был тонкий сарказм за подъём столь старой темы? :)
23 мар 18, 12:11    [21280249]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
shurka22
Member

Откуда:
Сообщений: 81
Поторопился. Теперь без ошибок:

А как? Скриптом парсить текст view?
Сейчас-то я выгребаю зависимости из all_dependencies. Но там есть информация о таблице table_name1, и нет информации о table_name2 (так как она уже за дб-линком).

Или это был тонкий сарказм за подъём столь старой темы? :)
23 мар 18, 12:12    [21280253]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
shurka22
Поторопился. Теперь без ошибок:

А как? Скриптом парсить текст view?
Сейчас-то я выгребаю зависимости из all_dependencies. Но там есть информация о таблице table_name1, и нет информации о table_name2 (так как она уже за дб-линком).

Или это был тонкий сарказм за подъём столь старой темы? :)

вам же сказали уже
если хотите распарсить вью, которая за дблинком, то и зависимости надо смотреть (не локальные, а..) за дблинком
23 мар 18, 12:34    [21280340]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
shurka22
Member

Откуда:
Сообщений: 81
orawish
вам же сказали уже
если хотите распарсить вью, которая за дблинком, то и зависимости надо смотреть (не локальные, а..) за дблинком

Это понятно.
Но как я вообще узнаю о том, что в моём вью присутствует дб-линк? И какой объект за дб-линком мне надо исследовать?
Сейчас я это делаю только глазами, то есть вручную смотрю на текст view. Вручную - не хочется, много времени занимает. Хочу некий автомат.
23 мар 18, 12:50    [21280417]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
shurka22
Member

Откуда:
Сообщений: 81
shurka22
Но как я вообще узнаю о том, что в моём вью присутствует дб-линк? И какой объект за дб-линком мне надо исследовать?
Сейчас я это делаю только глазами, то есть вручную смотрю на текст view. Вручную - не хочется, много времени занимает. Хочу некий автомат.

Чтобы было понятнее. Сейчас я делаю запрос:
select .. from all_dependencies where name='VIEW_NAME_1' (разумеется, ещё условие по owner)
И в ответе вижу только запись, где referenced_name = 'TABLE_NAME1'. Но нет записи, где referenced_name = 'TABLE_NAME2'. Хотя table_name2@db_link_name - присутствует в теле VIEW_NAME_1.
Видимо оракл нигде не хранит такую связь?
23 мар 18, 12:57    [21280450]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
efendi
Member

Откуда:
Сообщений: 126
[quot shurka22]
shurka22
Но как я вообще узнаю о том, что в моём вью присутствует дб-линк?
...
Видимо оракл нигде не хранит такую связь?


select * from all_dependencies a WHERE a.REFERENCED_LINK_NAME IS NOT NULL
23 мар 18, 14:13    [21280841]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
shurka22
Member

Откуда:
Сообщений: 81
efendi
select * from all_dependencies a WHERE a.REFERENCED_LINK_NAME IS NOT NULL

Хм.. Есть такие записи, но для объектов с типами (поле TYPE) 'PROCEDURE', 'PACKAGE BODY' и 'TYPE BODY'.
Почему-то view, которые выбирают данные через дб-линк, у меня не попали в эту выборку. :(
Копаю дальше.
28 мар 18, 12:40    [21292890]     Ответить | Цитировать Сообщить модератору
 Re: Отследить цепочку синонимов и вью.  [new]
shurka22
Member

Откуда:
Сообщений: 81
shurka22
efendi
select * from all_dependencies a WHERE a.REFERENCED_LINK_NAME IS NOT NULL

Хм.. Есть такие записи, но для объектов с типами (поле TYPE) 'PROCEDURE', 'PACKAGE BODY' и 'TYPE BODY'.
Почему-то view, которые выбирают данные через дб-линк, у меня не попали в эту выборку. :(
Копаю дальше.

А, всё, понял.

Читаю: https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1041.htm#i1576452
ALL_DEPENDENCIES describes dependencies between procedures, packages, functions, package bodies, and triggers accessible to the current user, including dependencies on views created without any database links.

То есть view, которая использует db-link в этой выборке не присутствует. Так было задумано.
Пичалька..
28 мар 18, 13:19    [21292989]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить