|
|
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
Братья, привет. Вкратце: Посоветуйте инструмент, который бы удобно визуально(?) отслеживал цепочку из синонимов и вьюх до конечных таблиц и их полей. Понятно, что (наверное) можно написать самому восьмиэтажный запрос, но вдруг "всё уже написано до нас"? :) Подробнее: Начал работать над проектом, в котором (условно говоря) синонимов больше, чем таблиц. В проекте около 5ти баз (связаны через дб-линки), в каждой базе порядка 20 схем. Зачастую таблицы, как правило, имеют вьюхи (чтобы удобнее было накладывать политики) с теми же самыми полями. Когда я выбираю из таблицы(?) в какой-нибудь рабочей схеме, то это чаще всего синоним, который указывает на вьюху в другой схеме, та в свою очередь может опять ссылаться на синоним и вьюху в третьей схеме, а может быть цепочка уходит и дальше в четвёртую схему. А иногда ещё и через дб-линки. Как правило, все поля конечных таблиц прокомментированы. Но пока до этого конечного поля конечной таблицы дойдёшь - сто раз изругаешься. Нет ли какого-нибудь инструмента? Который бы работал приблизительно так: ему скармливаешь имя таблицы (объекта в схеме), а он бы в ответ расписывал бы всю цепочку (всё дерево) связанных объектов, откуда в итоге будут браться данные. Ещё лучше, чтобы он это делал по каждому полю отдельно, и чтобы для поля он указывал бы не только цепочку объектов (откуда берётся поле), цепочку типов и цепочку комментариев. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 13:43 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
возможно, поможет all_dependencies ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 14:28 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
Увы, инструмента я так и не нашёл, написал коротенький скрипт, который по цепочке (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.03.2018, 07:14 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
shurka22, Продолжай вести наблюдение своим скриптом через дблинк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 09:05 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
А как? Скриптом парсить текст view? Сейчас-nj я выгребаю зависимости из all_dependencies. Но там есть информация о таблице table_name1, и нет информации о table_name2 (так как она уже за дб-линком)? Или это был тонкий сарказм за подъём столь старой темы? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 12:11 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
Поторопился. Теперь без ошибок: А как? Скриптом парсить текст view? Сейчас-то я выгребаю зависимости из all_dependencies. Но там есть информация о таблице table_name1, и нет информации о table_name2 (так как она уже за дб-линком). Или это был тонкий сарказм за подъём столь старой темы? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 12:12 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
shurka22Поторопился. Теперь без ошибок: А как? Скриптом парсить текст view? Сейчас-то я выгребаю зависимости из all_dependencies. Но там есть информация о таблице table_name1, и нет информации о table_name2 (так как она уже за дб-линком). Или это был тонкий сарказм за подъём столь старой темы? :) вам же сказали уже если хотите распарсить вью, которая за дблинком, то и зависимости надо смотреть (не локальные, а..) за дблинком ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 12:34 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
orawishвам же сказали уже если хотите распарсить вью, которая за дблинком, то и зависимости надо смотреть (не локальные, а..) за дблинком Это понятно. Но как я вообще узнаю о том, что в моём вью присутствует дб-линк? И какой объект за дб-линком мне надо исследовать? Сейчас я это делаю только глазами, то есть вручную смотрю на текст view. Вручную - не хочется, много времени занимает. Хочу некий автомат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 12:50 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
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.03.2018, 12:57 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
[quot shurka22]shurka22Но как я вообще узнаю о том, что в моём вью присутствует дб-линк? ... Видимо оракл нигде не хранит такую связь? Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2018, 14:13 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
efendiselect * from all_dependencies a WHERE a.REFERENCED_LINK_NAME IS NOT NULL Хм.. Есть такие записи, но для объектов с типами (поле TYPE) 'PROCEDURE', 'PACKAGE BODY' и 'TYPE BODY'. Почему-то view, которые выбирают данные через дб-линк, у меня не попали в эту выборку. :( Копаю дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2018, 12:40 |
|
||
|
Отследить цепочку синонимов и вью.
|
|||
|---|---|---|---|
|
#18+
shurka22efendiselect * 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.03.2018, 13:19 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=120&tid=1884231]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 355ms |

| 0 / 0 |
