Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment résoudre ORA-29913 avec des tables externes

ORA-29913 est l'une des erreurs courantes lorsque vous travaillez avec des tables externes dans la base de données Oracle. Nous examinerons différentes façons dont l'erreur peut être produite et ce qui peut être fait pour résoudre l'erreur

(1) Fichier externe introuvable ou autorisation incorrecte

SQL> select * from Scott.example_external_table;
select * from example_external_table
*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file test1.dat in TEST_DIR not found
ORA-06512: at "SYS.ORACLE_LOADER", line 14
ORA-06512: at line 1

Lors de l'analyse du tableau, vous obtenez un message similaire :

SQL> exécuter sys.dbms_stats.gather_table_stats(‘SCOTT’,’EXAMPLE_EXTERNAL_TABLE’);
COMMENCER sys.dbms_stats.gather_table_stats(‘SCOTT’,’EXAMPLE_EXTERNAL_TABLE’); END ;
*
ERREUR à la ligne 1 :
ORA-29913 :erreur lors de l'exécution de l'appel ODCIEXTTABLEOPEN
ORA-29400 :erreur de cartouche de données
KUP-04040 :test de fichier 1 .dat dans TEST_DIR introuvable
ORA-06512 :à "SYS.DBMS_STATS", ligne 7161
ORA-06512 :à "SYS.DBMS_STATS", ligne 7174
ORA-06512 :à la ligne 1

Ou de manière générale

ORA-20011: Approximate NDV failed:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file <file_name> in <directory_name> not found

Raison

Les fichiers externes ont été déplacés de l'emplacement correct

SQL> select * from dba_directories ;

OWNER DIRECTORY_NAME DIRECTORY_PATH
------ -------------- -----------------------
SYS TEST_DIR /u01/oradata/external_files

Vérifiez les noms de fichiers associés à la table externe

select * from dba_external_locations
where table_name='EXAMPLE_EXTERNAL_TABLE';OWNER TABLE_NAME LOCATION DIRECTORY_OWNER DIRECTORY_NAME
----- ------------- -------- --------------- ---------------
SYS EXAMPLE_EXTERNAL_TABLE test1.dat SYS TEST_DIR
SYS EXAMPLE_EXTERNAL_TABLE test2.dat SYS TEST_DIR

Vérification en cours au niveau du système d'exploitation
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
Aucun fichier ou répertoire de ce type

Les fichiers ne sont donc pas présents au bon emplacement

Les deux requêtes ci-dessus peuvent également être combinées comme ci-dessous

select TABLE_NAME, DIRECTORY_PATH||'/'||LOCATION file_name from DBA_EXTERNAL_LOCATIONS loc, dba_directories dir
where loc.DIRECTORY_OWNER=dir.OWNER
and loc.DIRECTORY_NAME=dir.DIRECTORY_NAME
and loc.OWNER='&1' and loc.TABLE_NAME='&2';

Résolution :
Replacez les deux fichiers vers leur emplacement d'origine

$ mv /u02/oradata/external_files/test2.dat /u01/oradata/external_files
$ mv /u02/oradata/external_files/test1.dat /u01/oradata/external_files

Maintenant
Les deux instructions ci-dessous réussiront

select * from Scott.example_external_table;
execute sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');

(2) Format de données incorrect dans le fichier externe

ERREUR à la ligne 1 :
ORA-29913 :erreur lors de l'exécution de l'appel ODCIEXTTABLEFETCH
ORA-30653 :limite de rejet atteinte
ORA-06512 :à "SYS.ORACLE_LOADER", ligne 14
ORA-06512 :à la ligne 1

Raison

(i) Le fichier externe peut avoir des lignes vides
(ii) Vérifiez le délimiteur TAB ou le délimiteur HEX

un. Le délimiteur TAB '\t', utilisé par Oracle, est représenté par une valeur HEX '09'
b. La valeur HEX du fichier de données doit correspondre à la valeur HEX spécifiée dans l'
instruction CREATE
c. La spécification HEX dans l'instruction CREATE doit ressembler à 0X'gt;' ou 0x''
(iii) Si la colonne est ajoutée à la table externe, elle doit être présente dans la fichier externe

Résolution
Vérifiez l'erreur dans le journal et corrigez le problème en conséquence

(3) Erreur avec la colonne Null

ERREUR à la ligne 1 :
ORA-29913 :erreur lors de l'exécution de l'appel ODCIEXTTABLEOPEN
ORA-29400 :erreur de cartouche de données
KUP-04043 :colonne de table introuvable dans la source externe :

Raison
Le fichier externe a des valeurs nulles pour la dernière colonne qui est à l'origine une colonne numérique. Lorsque nous changeons le null en un nombre 0, la requête réussit.

Résolution
Pour charger une valeur NULL, nous devons inclure le délimiteur ENCLOSED BY dans la définition de la table.

enregistrements délimités par une nouvelle ligne
champs terminés par ','
éventuellement entourés de ' ' <<<=====
valeurs de champ manquantes sont nuls

(4) ORA-29913 peut également se produire si Oracle n'est pas en mesure de créer également les fichiers journaux. Donc, vérifiez l'autorisation des répertoires

(5) Erreur de répertoire de table externe
L'erreur ORA-29913 peut également se produire dans les tables externes lorsque vous n'accordez pas les autorisations de lecture et d'écriture au répertoire :

CRÉER OU REMPLACER LE RÉPERTOIRE extdir AS '/u01/oradata/testdir' ;
ACCORDER LA LECTURE SUR LE RÉPERTOIRE testdir À  ;
ACCORDER L'ÉCRITURE SUR LE RÉPERTOIRE testdir À  ;

Voici quelques bonnes informations sur la table externe, vous devriez vérifier

Que sont les TABLES EXTERNES dans Oracle ?

(1)Les tables externes sont des tables en lecture seule où les données sont stockées dans des fichiers plats en dehors de la base de données

(2) Vous pouvez utiliser la fonction de table externe pour accéder aux fichiers externes comme s'il s'agissait de tables dans la base de données.

(3)   Lorsque vous créez une table externe, vous définissez sa structure et son emplacement avec Oracle. Fondamentalement, vous stockez simplement les métadonnées dans l'oracle

(4) Lorsque vous interrogez la table, Oracle lit la table externe et renvoie les résultats comme si les données avaient été stockées dans la base de données.

(5) Le serveur oracle fournit deux pilotes oracle majeurs pour lire les fichiers plats

  • Oracle_loader :ceci est utilisé pour la lecture des fichiers plats à l'aide de la technologie Oracle Loader. Il permet essentiellement de lire les fichiers qui peuvent être interprétés à l'aide de la technologie sql loader
  • Oracle_datapump :utilisé à la fois pour l'importation et l'exportation de données à l'aide d'un format indépendant de la plate-forme

Articles connexes
Oracle Tables externes :consultez cet article pour plus d'informations sur l'utilisation d'une table externe dans Oracle avec un exemple, comment créer une table externe, comment l'utiliser
Oracle Créer une table :les tables sont l'unité de base du stockage de données dans une base de données Oracle.nous expliquons comment utiliser la commande Oracle create table pour créer une table avec une clé étrangère / clé primaire nous pouvons l'éviter, bogues Oracle pour ces erreurs
ORA-01017 :nom d'utilisateur/mot de passe invalide ; connexion refusée :découvrez la résolution possible du nom d'utilisateur/mot de passe invalide ORA-01017 ; connexion refusée. Comment le résoudre rapidement sans trop d'efforts
Contrainte unique ORA-00001 violée :Consultez cet article pour la solution possible à l'erreur Oracle ORA-00001 violation de la contrainte unique. Comment le résoudre et le corriger
ORA-00911 : caractère non valide : ce message concerne les causes courantes de ORA-00911 : caractère non valide dans oracle avec des exemples et une résolution pour vous aider à terminer le travail
ORA-00900 :Ce message pour les différentes solutions pour ORA-00900 instruction sql invalide. Raisons de l'erreur. Comment déboguer et résoudre rapidement,
ORA-03113 :fin de fichier sur le canal de communication :consultez la méthode pour résoudre ORA -03113 :fin de fichier sur le canal de communication. Cette erreur peut se produire lors du démarrage de la base de données, en exécutant le programme
Documentation Oracle

Cours recommandés

Voici le joli cours Udemy pour Oracle SQL
Oracle-Sql-Step-by-step :Ce cours couvre les bases de SQL, les jointures, la création de tables et la modification de sa structure, la création de vues, l'union, l'union -all et bien d'autres choses . Un excellent cours et un cours indispensable pour les débutants SQL
Le cours complet de certification Oracle SQL  :c'est un bon cours pour tous ceux qui veulent être prêts à travailler pour les compétences de développeur SQL. Un cours bien expliqué
Oracle SQL Developer :Essentials, Tips and Tricks  :l'outil de développement Oracle SQL est utilisé par de nombreux développeurs. Ce cours nous donne des astuces et des leçons sur la façon de l'utiliser efficacement et de devenir un développeur sql productif
Oracle SQL Performance Tuning Masterclass 2020  :l'optimisation des performances est l'une des compétences essentielles et les plus recherchées. C'est un bon cours pour en savoir plus et commencer à ajuster les performances SQL