Oracle Data Lineage : Analyse des procédures stockées et des packages PL/SQL

Traçabilité des données Oracle Il s'agit de la cartographie au niveau des colonnes de la circulation des données dans un environnement Oracle : quelles tables et colonnes sources alimentent chaque table, vue ou vue matérialisée cible, et quels packages, procédures, fonctions et déclencheurs PL/SQL effectuent ces déplacements. Étant donné que, dans la plupart des environnements Oracle, la logique de transformation réside dans le PL/SQL plutôt que dans des requêtes autonomes, une traçabilité précise nécessite un outil capable d'analyser le PL/SQL comme un langage procédural, et non comme un simple langage SQL Oracle. Gudu SQLFlow Il intègre un analyseur PL/SQL dédié qui fait exactement cela, y compris le SQL dynamique construit avec EXÉCUTER IMMÉDIATEMENT.

Test it on your own code: coller le corps d'un package Oracle dans le Visualiseur de lignage SQLFlow gratuit, sélectionnez le dialecte Oracle et visualisez la lignée au niveau des colonnes et le graphe d'appels de procédures qu'il produit.

Pourquoi la traçabilité des données Oracle est-elle plus complexe que l'analyse syntaxique des instructions SELECT ?

Les bases de données Oracle sont anciennes au meilleur sens du terme : de nombreux environnements de production hébergent vingt ans, voire plus, de logique métier accumulée, principalement en PL/SQL. Les chargements nocturnes, les actualisations du datamart, les tâches de réconciliation et les journaux d’audit sont implémentés sous forme de packages appelant des procédures qui elles-mêmes appellent des fonctions, avec des déclencheurs activés tout au long du processus. Un outil de traçabilité qui ne comprend que… SÉLECTIONNER, INSÉRER, et CRÉER UNE VUE on ne voit que la surface superficielle d'un tel domaine et on passe à côté de l'essentiel de la logique sous-jacente.

La raison technique est que PL/SQL n'est pas du SQL. Il s'agit d'un langage procédural structuré par blocs, doté de sa propre grammaire : déclarations, flux de contrôle, curseurs, gestionnaires d'exceptions, spécifications de packages et corps de procédures. Les instructions SQL sont imbriquées dans cette structure, et leurs entrées et sorties transitent par des variables, des paramètres et des boucles de curseurs. Extraire la lignée d'une procédure PL/SQL implique d'analyser la couche procédurale, de suivre les valeurs à travers celle-ci et de relier les instructions SQL imbriquées entre elles. Une grammaire exclusivement SQL ne peut pas réaliser cette opération, c'est pourquoi les extracteurs de lignée génériques ignorent généralement complètement les corps de procédures ou échouent dès la première étape. COMMENCER bloc.

Un analyseur PL/SQL dédié, et non un analyseur SQL avec extensions.

SQLFlow est construit sur le Analyseur SQL généralIl s'agit d'une interface de compilation SQL commerciale développée depuis le milieu des années 2000 et validée à l'aide d'environ 13 600 jeux de tests par dialecte. Pour Oracle, elle offre deux fonctionnalités : un analyseur syntaxique SQL pour les requêtes, le DDL et les vues, et un analyseur syntaxique procédural distinct pour PL/SQL. Cet analyseur PL/SQL gère les types d'objets où réside la logique de transformation d'Oracle.

  • Colis : analysés en détail, couvrant chaque procédure et fonction contenue dans le package, avec un graphe d'appels au-delà des limites du package.
  • Procédures et fonctions : La traçabilité est assurée par les paramètres de procédure et les tables temporaires, de sorte qu'une valeur entrant comme argument et se retrouvant dans une table est connectée de bout en bout.
  • Déclencheurs : logique au niveau des lignes qui copie ou transforme les données sur INSÉRER, MISE À JOUR, ou SUPPRIMER apparaît dans l'arbre généalogique au lieu de rester des effets secondaires invisibles.
  • SQL dynamique : instructions assemblées lors de l'exécution et exécutées avec EXÉCUTER IMMÉDIATEMENT sont résolues et analysées au lieu d'être ignorées.

En plus de l'analyse par objet, SQLFlow propose une interface interactive graphe d'appel: quelles procédures appellent lesquelles, au-delà des limites des packages. Dans un code source où etl_driver.run_nightly Se décomposant en une douzaine de procédures de paquetage, le graphe d'appels est ce qui vous permet de trouver celle qui écrit réellement la table qui vous intéresse.

Exemple : traçage de la lignée à travers une procédure de paquetage

Voici un modèle simplifié mais représentatif : une procédure de package qui charge un marché de revenus quotidien depuis l’environnement de transit.

CRÉER OU REMPLACER LE CORPS DU PACKAGE sales_etl COMME PROCÉDURE load_revenue_mart(p_load_date IN DATE) EST BEGIN SUPPRIMER DE mart.revenue_daily OÙ day_id = TO_CHAR(p_load_date, 'YYYYMMDD'); INSÉRER DANS mart.revenue_daily (day_id, region_name, total_amount) SÉLECTIONNER TO_CHAR(o.order_date, 'YYYYMMDD'), r.region_name, SUM(o.amount) DE staging.orders o JOINTURE dim.region r SUR r.region_id = o.region_id OÙ o.status = 'EXPÉDIÉ' ET TRUNC(o.order_date) = TRUNC(p_load_date) GROUPER PAR TO_CHAR(o.order_date, 'YYYYMMDD'), r.region_name; FIN load_revenue_mart; FIN sales_etl;

SQLFlow lit le corps du package et génère des rapports, par colonne de sortie : mart.revenu_daily.montant_total est alimenté par mise en place.commandes.montant à travers SOMME; nom_de_région vient de dim.region.region_name via le lien id_région; jour_id est dérivé de staging.orders.order_date à travers TO_CHARIl est également indiqué que o.statut, o.date_de_commande, et le paramètre date_de_chargement_p façonner le résultat à travers le clause, et que la procédure se situe à l'intérieur de la ventes_etl Le package dans le graphe d'appels. Multipliez cela par les centaines de procédures d'un système immobilier et vous obtenez la carte des dépendances que la documentation manuelle ne met jamais à jour.

SQL dynamique : le point aveugle de l’instruction EXECUTE IMMEDIATE

Les équipes Oracle utilisent constamment le SQL dynamique : chargement de tables nommées par partition, application de DDL depuis des procédures, construction d’instructions dont la cible dépend d’une ligne de configuration. C’est face à ce type de code que la plupart des techniques d’extraction de lignage échouent.

v_sql := 'INSERT INTO mart.revenue_archive (day_id, region_name, total_amount) SELECT day_id, region_name, total_amount FROM mart.revenue_daily WHERE day_id = :d'; EXECUTE IMMEDIATE v_sql USING v_day_id;

SQLFlow résout le SQL dynamique à l'intérieur de la procédure et analyse l'instruction assemblée, de sorte que le flux de revenu_quotidien du marché dans archives de revenus mart.revenue est capturée plutôt que d'être discrètement abandonnée. Si votre domaine utilise EXÉCUTER IMMÉDIATEMENT En résumé, il s'agit de la seule capacité à vérifier avant de faire confiance à un outil de traçabilité : exécutez l'une de vos propres procédures SQL dynamiques et vérifiez si la table cible apparaît dans le graphique.

Lignée directe et indirecte dans le code Oracle

SQLFlow fait la distinction lignée directe (la valeur d'une colonne source est placée dans une colonne cible) à partir de lignée indirecte (une colonne oriente le résultat à travers un prédicat, REJOINDRE condition, GROUPER PAR, ou agréger sans apparaître dans le résultat). Dans l'exemple ci-dessus, statut des commandes Cette relation n'atteint jamais le marché, mais modifier ses valeurs modifierait toutes les données qu'il contient. Les deux types de relations sont activables/désactivables séparément dans le diagramme, ce qui permet à l'analyse d'impact d'inclure ou d'exclure délibérément les dépendances liées uniquement aux filtres. La plupart des outils concurrents ne modélisent pas cette distinction, ce qui rend leur analyse d'impact soit trop restrictive (absence de colonnes de filtres), soit trop complexe (tout est connecté à tout).

Intégrer votre code Oracle dans SQLFlow

Méthode de saisieQuand l'utiliser
Collez du code SQL ou PL/SQLVérifications rapides d'un seul paquet, procédure ou script dans le navigateur
Téléverser des fichiersAnalyse en masse des sources DDL et PL/SQL exportées
Connexion JDBC en directExtraction directe des métadonnées de schéma, des définitions de vues et du code stocké depuis la base de données
Extraction des métadonnées GrabitExtraction des métadonnées à l'aide de l'outil compagnon Grabit et transmission à SQLFlow

Quel que soit le chemin choisi, SQLFlow effectue une analyse statique du texte SQL et PL/SQL ainsi que des métadonnées du schéma. Il ne lit jamais les lignes de vos tables. Pour les banques et autres entreprises Oracle réglementées, Édition sur site Il s'exécute sous Docker ou Kubernetes au sein de votre réseau, y compris en mode totalement isolé du réseau physique, de sorte que le code source ne quitte jamais votre infrastructure. À l'échelle de l'entreprise, il analyse par lots des environnements de plus de 100 bases de données et plus d'un million de colonnes, avec des analyses incrémentales et des adaptateurs d'exportation pour DataHub, Microsoft Purview et OpenMetadata.

Migrations Oracle et environnements mixtes

La traçabilité est particulièrement précieuse au moment où les environnements Oracle sont souvent confrontés à la migration. Avant de transférer les charges de travail vers Snowflake, BigQuery ou Databricks, le graphe de traçabilité indique quels packages alimentent les rapports utilisés par l'entreprise, quelles tables sont obsolètes et dans quel ordre les objets doivent être déplacés. Après la migration, une nouvelle analyse sur la nouvelle plateforme permet de vérifier qu'aucun élément n'est orphelin. SQLFlow prend en charge 39 dialectes avec des grammaires spécifiques à chacun, ce qui permet à un seul outil de couvrir les deux étapes du processus de migration.

Peu de grands systèmes sont exclusivement basés sur Oracle. La même profondeur d'analyse procédurale est disponible pour Lignée T-SQL de SQL Serveret des plateformes d'entrepôt telles que Teradata Ils possèdent leurs propres analyseurs syntaxiques spécifiques à chaque dialecte. Un seul référentiel de lignée peut contenir l'ensemble du patrimoine.

Où les analyseurs syntaxiques open source trouvent leur place

Les projets open source comme SQL Lineage et sqlglot Ils sont particulièrement performants pour analyser les requêtes individuelles et, pour extraire la traçabilité des tables à partir d'instructions SELECT et INSERT autonomes, ils peuvent suffire. Le point faible d'Oracle réside dans la couche procédurale : corps des packages, flux des paramètres, déclencheurs, etc. EXÉCUTER IMMÉDIATEMENT Ce sont précisément les constructions pour lesquelles les analyseurs SQL généralistes ne sont pas conçus, et dans un environnement Oracle, c'est là que réside la majeure partie de la logique de transformation. L'évaluation objective est empirique : prenez votre plus gros package, traitez-le avec les outils que vous envisagez d'utiliser et comptez le nombre de tables cibles que chacun trouve.

Foire aux questions

SQLFlow peut-il retracer la lignée des procédures stockées et des packages Oracle ?

Oui. SQLFlow possède un analyseur PL/SQL dédié, distinct de son analyseur SQL Oracle, qui analyse les packages, les procédures, les fonctions et les déclencheurs. La traçabilité est assurée par les paramètres des procédures et les tables temporaires, et un graphe d'appels interactif affiche les invocations de procédures entre les différents packages.

SQLFlow gère-t-il les requêtes SQL dynamiques EXECUTE IMMEDIATE ?

Oui. Le SQL dynamique intégré aux procédures PL/SQL est résolu et analysé au lieu d'être ignoré ; les instructions construites avec EXÉCUTER IMMÉDIATEMENT contribuent leurs flux source-cible au graphe de lignage.

SQLFlow a-t-il besoin d'accéder à mes données Oracle ?

Non. SQLFlow effectue une analyse statique du code SQL et PL/SQL et peut lire les métadonnées du schéma via JDBC. Il ne lit jamais les données des lignes de table. Avec l'édition sur site, même le texte SQL reste au sein de votre réseau.

La fonctionnalité de traçabilité au niveau des colonnes Oracle est-elle disponible dans la version gratuite ?

Oui. SQLFlow Cloud Il existe une version gratuite : collez du code Oracle SQL ou PL/SQL dans le navigateur pour obtenir des diagrammes de traçabilité au niveau des colonnes. La version Premium coûte $49,99 £/mois ; la version sur site coûte $500 £/mois ou $4 800 £ (paiement unique) par type de base de données sélectionné. Voir tarification pour plus de détails.

Puis-je exporter la lignée Oracle vers un catalogue de données ?

Oui. Les exportations de lignage aux formats JSON, CSV ou PNG sont interrogeables via une API REST, et les déploiements en entreprise incluent des adaptateurs d'exportation pour DataHub, Microsoft Purview et OpenMetadata. SQLFlow peut donc servir de moteur de lignage compatible PL/SQL pour le catalogue que vous utilisez déjà.

Découvrez la lignée cachée dans votre PL/SQL

Collez le corps d'un package dans le visualiseur gratuit, ou contactez-nous pour analyser l'ensemble de votre environnement Oracle sur site.