|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
Ребята, выручайте) Как получить список ВСЕХ синонимов, которые указывают на несуществующие объекты? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2014, 18:51 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
NikoTrend, Код: sql 1.
сработало? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2014, 19:06 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
РустамкаNikoTrend, Код: sql 1.
сработало? Так если я правильно понимаю это просто все объекты с типом синоним? Вопрос-то как раз в том, как получить список, указывающий на несуществующие объекты? Я не уверен, правильно ли это?: Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2014, 19:24 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
NikoTrend, Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2014, 19:34 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
ORA__SQL, Не все так просто: Синоним может быть на обьект в удаленной базе. Cиноним может указывать на синоним, т.е. пройтись надо по иерархии. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2014, 22:35 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
простой вариант: цикл по синонимам, внутри цикла dbms_utility.name_resolve: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Ловим exception "ORA-06564: object yy1 does not exist", чтобы определить, что синоним мертвый ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2014, 06:16 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
ORA__SQLNikoTrend, Код: plsql 1. 2. 3.
just query generated by TOAD: дохлые --публичные, --частные синонимы Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2014, 09:53 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
Всем спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 10:50 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
Кстати, если кому интересно вот красивый вариант: SELECT owner,object_name FROM dba_invalid_objects WHERE object_type = ‘SYNONYM’; ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2014, 21:37 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
NikoTrendКстати, если кому интересно вот НЕкрасивый вариант: ....... FROM dba_invalid_objects WHERE object_type = ‘SYNONYM’; Когда синоним инвалидируется Invalid Synonyms After an Upgrade ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2014, 09:47 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
Viewer , спасибо за подсказку со скриптом из TOAD (сообщение от 31.03.2014). Хотел уточнить про следующую непонятную _обратную_ ситуацию. Имеем набор скриптов создания демо схемы OE для Oracle 18c (взят с GitHub). Основной скрипт oe_main.sql вызывает скрипт coe_v3.sql -> coe_xml.sql, который вызывает скрипты xdbConfiguration.sql и xdbUtilities.sql, которые создают 5 пакетов с именами coe_%, создают для этих пакетов одноименные PUBLIC SYNONYMs coe_% и используют вызовы процедур из этих пакетов. В конце скрипт coe_xml.sql _удаляет_ все эти 5 пакетов. После возврата из этой цепочки вызовов скриптов в основной скрипт oe_main.sql в нем _повторно_ выполняются операторы создания PUBLIC SYNONYMs coe_% - те же самые, что и ранее: Код: plaintext 1.
Но при этом пакетов с именами coe_% уже _нет_, т.к. они были удалены после использования. Тем не менее эти синонимы создаются и имеют статус VALID: select owner, object_name, object_type, status from dba_objects where object_name like 'COE_%'; Код: plaintext 1. 2. 3. 4. 5.
А указанный выше скрипт из TOAD выводит их как указывающие "в никуда": select s.owner as synonym_owner, s.synonym_name, s.table_owner, s.table_name Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Вопрос: Как могли быть созданы синонимы со ссылкой на несуществующие пакеты? Почему синонимы имеют статус VALID, если они никуда не ссылаются? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 09:22 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
SBremenВопрос: Как могли быть созданы синонимы со ссылкой на несуществующие пакеты? Почему синонимы имеют статус VALID, если они никуда не ссылаются? Oracle не проверяет существовaние обьекта при создании синонима. Синоним инвалидируется как только обьект изменяется (т.е. выдан DDL на обьект). Так-что создание обьекта инвалидирует синоним если он создан раньше самого обьекта: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 14:21 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
SY , спасибо за разъяснение. Тогда получается, что повторно выполняющиеся в конце скрипта oe_main.sql операторы создания PUBLIC SYNONYMs coe_% на убитые пакеты - просто лишние, не вызывающие ошибки, но и не имеющие смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 20:16 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
SY , еще один вопрос. Есть ли какая-то настройка в глубинах Oracle, чтобы в сообщении об успешном завершении SQL оператора (хотя бы DDL) выводилось имя объекта? То есть не "View created", а "View <Имя> created". Не "Synonym dropped, а "Synonym <Имя> dropped". Не "Package Body created with compilation errors", а "Package Body <Имя> created with compilation errors". Понятно, что можно включить настройки SQL Plus: SET ECHO ON SET VERIFY ON и смотреть SQL операторы целиком вместе с сообщениями о результате их исполнения, идущими после операторов. Но вариант, описанный выше, существенно более компактный для просмотра и достаточно наглядный. В документации по SQL и SQL Plus ничего похожего не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 21:48 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
SBremenЕсть ли какая-то настройка в глубинах Oracle, чтобы в сообщении об успешном завершении SQL оператора (хотя бы DDL) выводилось имя объекта? Нет, но при большом желании можно создать AFTER DDL триггер который через DBMS_OUTPUT выводит Код: plsql 1.
Правда придется включать SET SERVEROUTPUT ON. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 22:24 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
SY , "большое желание" связано с тем, что SQL Developer выводит сообщения о результатах DDL с указанием имени объекта: Код: plaintext 1. 2. 3. 4. 5.
А SQL Plus имена объектов не пишет (странно, почему это не сделано просто по умолчанию): Код: plaintext 1. 2. 3. 4. 5.
Поэтому и появилась мысль, что есть какая-то настройка Oracle (типа SET SERVEROUTPUT ON), которая включает/выключает вывод имени объекта в сообщении. По Вашей рекомендации я создал триггер уровня БД (от имени SYSTEM): Код: plaintext 1. 2. 3. 4. 5.
Этот триггер выводит необходимую информацию. Спасибо за подсказку. Некоторая странность состоит в том, что почему-то вывод триггера по-разному работает в схемах SYSTEM и HR. В схеме SYSTEM все происходит, как ожидалось: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
А в схеме HR при удалении таблицы выдается ДВА сообщения от триггера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Так и должно быть? Или что я делаю не так? БД Oracle 18c XE, все операции в контейнере БД XEPDB1 (создан по умолчанию при установке Oracle 18c). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 13:00 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
SBremenТак и должно быть? Или что я делаю не так? Зависит от того включен ли recyclebin или нет. У тебя включен. У пользователя SYSTEM tablespace по умолчанию SYSTEM. На SYSTEM recyclebin не распрoстраняется. Создай под SYSTEM таблицу в, скажем, tablespace USERS и получишь дважды. Добавь вывод DDL в триггер и все увидишь: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
Можешь добавить проверку DDL на NOT LIKE '%RENAME TO "BIN$%' перед выводом ora_dict_obj_owner || '.' || ora_dict_obj_name. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 13:56 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
SY , так и сделал. Итоговый триггер получился такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Свою функцию выполняет, при создании/удалении объектов в SQL Plus имена объектов показывает... И тут всплыл подводный камень. В составе комплекта демо схем Oracle есть скрипты mkunplug.sql и mkplug.sql, которые соответственно выгружают ТП EXAMPLE с демо схемами как переносимое ТП и загружают его в БД. Я чуть раньше уже проверил, что они работают правильно - табличное пространство восстанавливается из бэкапа. А сейчас в ходе очередного эксперимента с объектами ТП снова запустил скрипт импорта mkplug.sql - при активном триггере AFTER DDL ON DATABASE с кодом выше. И скрипт не смог воссоздать ТП, т.к. рухнул вызов impdp с ошибкой _в этом триггере_ (в скрипте импорт идет от имени SYS). Получается, что использование такого триггера совсем небезопасно и имеет побочные эффекты. Или я чего-то не учел? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 20:19 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
SBremenПолучается, что использование такого триггера совсем небезопасно и имеет побочные эффекты. Или я чего-то не учел? Hе учел. Ты почему-то решил что SQL > 2000 байт в природе не бывает. Меняй 2000 нa 32767 алучше на CLOB. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 21:30 |
|
Получить список всех синонимов, указывающих на несуществующие объекты
|
|||
---|---|---|---|
#18+
Эх, Семён Семёныч, точно... Исправил на CLOB, пересоздал триггер - теперь он не мешает работе impdp. Отлично! Но зато наблюдаю другой эффект (поначалу непонятный). Согласно документации "Oracle 18c Database PL-SQL Language Reference": "Trigger AFTER DDL fires when most SQL DDL statements are issued. Not fired for ALTER DATABASE, CREATE CONTROLFILE, CREATE DATABASE, and DDL issued through the PL/SQL subprogram interface". Однако при исполнении скрипта mkplug.sql импорта ТП EXAMPLE с демо схемами при включенном триггере - вывода сообщений триггера _нет_ при выполнении практически всех SQL: CREATE TABLE, CREATE SEQUENCE, CREATE VIEW, CREATE INDEX, ALTER TABLE, CREATE SYNONYM, DROP DIRECTORY, CREATE TYPE... Не мог сначала понять, почему триггер так избирательно работает - в диалоге SQL Plus на создание / удаление тестовых таблиц триггер выводит сообщение, а при работе скрипта - нет (хотя я добавил set serveroutput on в начало скрипта mkplug.sql, а во всех вызываемых скриптах параметр set serveroutput отсутствует). Потом дошло. В этом скрипте происходит постоянное _изменение connect_ между всеми 6 демо схемами и схемой SYS. И при каждом коннекте - параметр serveroutput _сбрасывается_ в OFF. Наверное, сбрасываются и другие параметры SQL Plus (?) - я не проверял. В общем, вопрос с этим триггером закрыт. Спасибо за помощь, SY . ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 12:58 |
|
|
start [/forum/topic.php?fid=52&msg=38600273&tid=1882094]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 163ms |
0 / 0 |