Comment trouver la clé étrangère dépendances pointant vers un dossier dans Oracle?
J'ai une très grande base de données Oracle, avec de nombreux de nombreux tableaux et des millions de lignes. J'ai besoin de supprimer l'un d'eux, mais vous voulez vous assurer que la suppression il ne sera pas briser toute autre fonction lignes qui soulignent que c'est une clé étrangère d'enregistrement. Est-il possible d'obtenir une liste de tous les autres enregistrements, ou au moins schémas de table, que le point de cette ligne? Je sais que je pouvais tout simplement essayer de le supprimer moi-même, et d'intercepter l'exception, mais je ne vais pas être en cours d'exécution du script moi-même et en ont besoin pour fonctionner nettoyer la première fois.
J'ai les outils SQL Developer Oracle et PL/SQL Developer de AllRoundAutomations à ma disposition.
Merci d'avance!
- ne pas tenter de supprimer l'enregistrement référencé jeter l'exception?
- oui, mais j'en ai besoin pour courir sans lancer une exception.
Vous devez vous connecter pour publier un commentaire.
Je regarde toujours les clés Étrangères de la table de départ et de travailler mon chemin de retour. La DB outils ont généralement une des dépendances ou des contraintes de nœud. Je sais PL/SQL Developer est une façon de voir les FK, mais il a été un moment depuis que je l'ai utilisé, donc je ne peux pas l'expliquer...
il suffit de remplacer XXXXXXXXXXXX avec un nom de table...
and a.table_name='XXXXXXXXXXXX' -- Table name
si nous voulons la liste de toutes les lignes où les tables AA, BB et CC tous le tableau de référence des XXXXXXXXXXXX?Voici ma solution à la liste de toutes les références à une table:
Avec cette solution, vous avez aussi les informations de la colonne de la table qui fait référence à la colonne de votre table cible (et vous pouvez filtrer sur elle).
J'ai eu un problème similaire récemment, expérimentés, mais bientôt, que de trouver les dépendances directes n'est pas assez. J'ai donc écrit une requête pour afficher un arbre de la multi-niveaux de clé étrangère dépendances:
Il donne un résultat de ce genre, lors de l'utilisation de l'EXPÉDITION comme MYTABLE dans ma base de données:
Nous pouvons utiliser le dictionnaire de données pour identifier les tableaux qui référence la clé primaire de la table en question. À partir de là on peut générer une certaine dynamique SQL pour interroger les tables de la valeur que nous voulons zap:
Cet exemple triche un peu. Le nom de la cible clé primaire est codé en dur, ainsi que le référencement de la colonne a le même nom sur toutes les tables dépendantes. La résolution de ces problèmes est laissé comme exercice pour le lecteur 😉
Eu une situation similaire. Dans mon cas, j'ai eu un couple de dossiers qui avaient fini avec le même ID qui ne diffèrent que par la casse. Voulu vérifier ce que dépendante des enregistrements existe pour chacun de savoir qui était le plus facile à supprimer/mettre à jour
La suivante affiche tous les enregistrements enfant pointant vers le dossier donné, par enfant la table avec un décompte pour chaque table/fiche combinaison
J'ai été surpris de voir à quel point il était difficile de trouver l'ordre de dépendance des tables basées sur les relations de clé étrangère. J'en avais besoin parce que je voulais supprimer les données de toutes les tables et de les importer à nouveau. Voici la requête que j'ai écrit pour la liste des tables dans l'ordre des dépendances. J'ai été en mesure de faire un script supprime l'aide de la requête ci-dessous, et de les importer à nouveau en utilisant les résultats de la requête dans l'ordre inverse.
Oracle contraintes utilise les Index des tables de données de référence.
Pour savoir quels tableaux font référence à un tableau, il suffit de regarder pour les index dans l'ordre inverse.
Obs.: La désactivation de références améliore considérablement le temps de DML commandes (mise à jour, la suppression et l'insertion).
Cela peut aider beaucoup dans des opérations en bloc, où vous savez que tout est conforme.