Как отладить ORA-01775: циклическая цепочка синонимов? - PullRequest
42 голосов
/ 29 октября 2008

Я знаком с проблемой, стоящей за ORA-01775: циклическая цепочка синонимов, но есть ли хитрость для ее отладки, или мне просто нужно «создать или заменить» мой выход из этого?

Есть ли способ запросить схему или что-то еще, чтобы узнать, каково текущее определение общедоступного синонима?

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

Ответы [ 18 ]

1 голос
/ 13 марта 2013

У нас была та же ошибка ORA-01775, но в нашем случае пользователь схемы пропустил некоторый «выбор гранта» в паре общедоступных синонимов.

0 голосов
/ 18 января 2019

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

Я использовал запросы, отправленные @ Mahi_0707

0 голосов
/ 26 июня 2018

Хотя ответ Джаррода является хорошей идеей и охватывает более широкий круг связанных проблем, я обнаружил, что этот запрос был найден на форумах Oracle для более прямого решения (первоначально заявленной) проблемы:

select owner, synonym_name, connect_by_iscycle CYCLE
from dba_synonyms
where connect_by_iscycle > 0
connect by nocycle prior table_name = synonym_name
and prior table_owner = owner
union
select 'PUBLIC', synonym_name, 1
from dba_synonyms
where owner = 'PUBLIC'
and table_name = synonym_name
and (table_name, table_owner) not in (select object_name, owner from dba_objects
where object_type != 'SYNONYM')

https://community.oracle.com/message/4176300#4176300

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

0 голосов
/ 31 января 2017

У меня была функция, определенная в неверной схеме и без открытого синонима. То есть мой процесс был в схеме "Dogs", а функция была в схеме "Cats". У функции не было общедоступного синонима, чтобы собаки могли получить доступ к функции кошек.

0 голосов
/ 21 апреля 2016

Я использую следующий sql, чтобы найти записи в all_synonyms, где нет соответствующего объекта для имени объекта (в user_objects):

 select * 
   from all_synonyms 
   where table_owner = 'SCOTT' 
     and synonym_name not like '%/%'
     and table_name not in (
       select object_name from user_objects
         where object_type in (
           'TABLE', 'VIEW', 'PACKAGE', 'SEQUENCE',
           'PROCEDURE', 'FUNCTION', 'TYPE'
         )
    );
0 голосов
/ 04 марта 2015

Если вы компилируете ПРОЦЕДУРУ, возможно, это относится к таблице или представлению, которое не существует, так как оно создано в той же ПРОЦЕДУРЕ. В этом случае решение состоит в том, чтобы сделать запрос, объявленный как String, например, v_query: = 'insert into table select * from table2, а затем немедленно выполнить его на v_query;

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

0 голосов
/ 29 октября 2008

http://ora -01775.ora-code.com / предлагает:

ORA-01775 : циклическая цепочка синонимов
Причина : С помощью ряда операторов синонимов CREATE был определен синоним, который ссылался на себя. Например, следующие определения являются круглыми:
CREATE SYNONYM s1 for s2 CREATE SYNONYM s2 for s3 CREATE SYNONYM s3 for s1
Действие : измените одно определение синонима, чтобы оно применялось к базовой таблице или представлению, и повторите операцию.

0 голосов
/ 21 июля 2011

ORA-01775: циклическая цепочка синонимов Я столкнулся с вышеуказанной ошибкой, когда пытался скомпилировать пакет, в котором использовался объект, для которого был создан синоним, однако базовый объект был недоступен.

...