Comment déboguer ORA-01775: boucle de la chaîne de synonymes?
Je suis familier avec la question derrière ORA-01775: boucle de la chaîne de synonymes, mais est-il une astuce pour le débogage, ou dois-je créer ou de remplacer" mon moyen de sortir de cela?
Est-il un moyen d'interroger le schéma ou que ce soit pour savoir ce que la définition actuelle d'un synonyme public est?
Encore plus impressionnant serait un outil graphique, mais à ce point, tout serait utile.
Vous devez vous connecter pour publier un commentaire.
Il s'avère que le problème n'est pas vraiment une boucle de la chaîne de synonymes, mais le fait que le synonyme pointait à vue qui n'existe pas.
Oracle apparemment erreurs dans une boucle de la chaîne dans cette condition.
Si vous utilisez CRAPAUD, allez dans Affichage>Crapaud Options>Oracle>Général et supprimer TOAD_PLAN_TABLE d'EXPLIQUER le PLAN de section et de mettre PLAN_TABLE
sys.plan_table$
.Le dictionnaire des données de la table
DBA_SYNONYMS
a des informations sur tous les synonymes dans une base de données. De sorte que vous pouvez exécuter la requêtede voir ce que le public synonyme pointe actuellement à.
Le moins intuitif solution à ce code d'erreur semble avoir des problèmes avec les objets que le synonyme de pointe.
Voici mon SQL pour trouver les synonymes de ce point à des erreurs d'objets.
Essayer cette sélection pour trouver la problématique des synonymes, il répertorie tous les synonymes qui sont pointant vers un objet qui n'existe pas (tables,vues,séquences,des paquets, des procédures, des fonctions)
AND NOT EXISTS ( SELECT * FROM all_objects WHERE object_type NOT IN ( 'SYNONYM' ) AND dba_synonyms.table_name = all_objects.OBJECT_NAME )
Aujourd'hui, j'ai eu cette erreur, et après le débogage, j'ai compris que les tables ont été misssing, dont je faisais allusion à l'aide de synonymes. Je suggère donc de - vérifiez tout d'abord que si les tables existe!! :-))
Un développeur accidentellement écrit le code qui a généré et exécuté l'instruction SQL suivante
CREATE OR REPLACE PUBLIC SYNONYM "DUAL" FOR "DUAL";
qui a causéselect * from dba_synonyms where table_name = 'DUAL';
de retourPUBLIC DUAL SOME_USER DUAL
plutôt quePUBLIC DUAL SYS DUAL
.Nous avons été en mesure de le réparer (grâce à Comment recréer synonyme public "DOUBLE"?) en exécutant
J'ai eu un problème similaire, qui s'est avéré être causés par l'absence des guillemets à descendre de la table et le nom du schéma.
Nous avons eu le même ORA-01775 erreur, mais dans notre cas, l'utilisateur de schéma manquait quelques "grant select' sur un couple de public synonymes.
Étape 1) Voir à ce que les Objets existent avec le nom:
Il pourrait être qu'un Synonyme existe, mais pas de Table?
Étape 2) Si ce n'est pas le problème, d'enquêter sur l'Synonyme:
Il se pourrait que d'un sous-jacent de la Table ou de la Vue pour que Synonyme de manque?
Nous avons rencontré cette erreur aujourd'hui.
C'est ainsi que nous débogué et il fixe.
Paquet est allé à l'état non valide en raison de cette erreur
ORA-01775
.Avec l'erreur numéro de la ligne , Nous sommes allés à travers le
package
code de corps et trouvé le code qui a été d'essayer d'insérer des données dans unetable
.Nous avons couru en dessous de requêtes pour vérifier si les
table
etsynonym
existe.Avec ce que nous avons conclu que la table doit être re - créé. Comme le
synonym
a été pointant vers untable
qui n'existe pas.DBA équipe de re-création de la table et cela a réglé le problème.
ORA-01775: boucle de la chaîne de synonymes
J'ai fait face à l'erreur ci-dessus alors que j'étais en train de compiler un Package qui a été à l'aide d'un objet pour lequel synonyme a été créé objet sous-jacent, n'était pas disponible.
Je suis en utilisant le sql suivant pour trouver des entrées en all_synonyms où il n'y a aucun objet correspondant pour les object_name (en user_objects):
Alors que Jarrod réponse est une bonne idée, et attrape un large éventail de problèmes liés à l', j'ai trouvé cette requête trouvé dans Oracle forums pour plus directement l'adresse (origine) question:
https://community.oracle.com/message/4176300#4176300
Vous n'aurez pas à wade par le biais d'autres types d'objets non valides. Seulement ceux qui sont réellement dans les boucles sans fin.
http://ora-01775.ora-code.com/ suggère:
ORA-01775: boucle de la chaîne de synonymes
Cause: à Travers une série de CRÉER un synonyme états, synonyme, a été défini que visée à lui-même. Par exemple, les définitions suivantes sont circulaires:
CREATE SYNONYM s1 for s2 CREATE SYNONYM s2 for s3 CREATE SYNONYM s3 for s1
Action: Changer un synonyme définition de sorte qu'il s'applique à une base de table ou de la vue et recommencez l'opération.
Si vous compilez une PROCÉDURE, c'est peut-être en se référant à une table ou d'une vue qui n'existe pas car il est créé dans la même PROCÉDURE. Dans ce cas, la solution est de faire la requête déclarée comme une Chaîne de caractères par exemple
v_query: = 'insert into table select * from table2
, et puis l'exécuter immédiatement lav_query
;C'est parce que le compilateur ne reconnaissent pas encore l'objet, et donc ne trouve pas la référence. Salutations.
J'avais une fonction définie dans le mauvais schéma et sans un synonyme public. I. e. mon proc est dans le schéma de "Chiens" et de la fonction dans le schéma "Chats". La fonction n'a pas un synonyme public pour laisser les Chiens d'accès les chats fonction.
Pour moi, le nom de la table et le synonyme à la fois existé, mais sous différents noms de propriétaire. J'ai re-créé les tables sous le nom du propriétaire qui correspondent le nom du propriétaire dans des synonymes.
J'ai utilisé les requêtes posté par @Mahi_0707