Oracle
 sql >> Database >  >> RDS >> Oracle

Come risolvere ORA-29913 con tabelle esterne

ORA-29913 è uno degli errori comuni quando si lavora con tabelle esterne nel database Oracle. Vorremmo esaminare vari modi in cui l'errore può essere prodotto e cosa si può fare per risolvere l'errore

(1) File esterno non trovato o autorizzazione errata

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

Quando analizzi la tabella, ricevi un messaggio simile:

SQL> esegui sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');
BEGIN sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE'); END;
*
ERRORE alla riga 1:
ORA-29913:errore nell'esecuzione del callout ODCIEXTTABLEOPEN
ORA-29400:errore cartuccia dati
KUP-04040:file test1 .dat in TEST_DIR non trovato
ORA-06512:in "SYS.DBMS_STATS", riga 7161
ORA-06512:in "SYS.DBMS_STATS", riga 7174
ORA-06512:in riga 1

O in generale

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

Motivo

I file esterni sono stati spostati dalla posizione corretta

SQL> select * from dba_directories ;

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

Controlla i nomi dei file associati alla tabella esterna

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

Ora verifica a livello di sistema operativo
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
Nessun file o directory di questo tipo

Quindi i file non sono presenti nella posizione corretta

Entrambe le query di cui sopra possono essere combinate come di seguito anche

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';

Risoluzione:
Sposta entrambi i file nella posizione originale

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

Ora
Entrambe le affermazioni seguenti avranno esito positivo

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

(2) Formato dati errato nel file esterno

ERRORE alla riga 1:
ORA-29913:errore nell'esecuzione del callout ODCIEXTTABLEFETCH
ORA-30653:limite di scarto raggiunto
ORA-06512:a “SYS.ORACLE_LOADER”, riga 14
ORA-06512:a riga 1

Motivo

(i) Il file esterno potrebbe avere righe vuote
(ii) Controllare il delimitatore TAB o il delimitatore HEX

un. Il delimitatore TAB '\t', utilizzato da Oracle, è rappresentato da un valore HEX '09'
b. Il valore esadecimale nel file di dati deve corrispondere al valore esadecimale specificato nell'
istruzione CREATE
c. La specifica HEX nell'istruzione CREATE dovrebbe apparire come 0X'gt;' o 0x''
(iii) Se la colonna è stata aggiunta alla tabella esterna, la stessa dovrebbe essere presente nella file esterno

Risoluzione
Controlla l'errore nel registro e correggi il problema di conseguenza

(3) Errore con la colonna Null

ERRORE alla riga 1:
ORA-29913:errore nell'esecuzione del callout ODCIEXTTABLEOPEN
ORA-29400:errore cartuccia dati
KUP-04043:colonna tabella non trovata in origine esterna:

Motivo
Il file esterno ha valori Null per l'ultima colonna che originariamente è una colonna numerica. Quando cambiamo il valore null in un numero 0, la query ha esito positivo.

Risoluzione
Per caricare un valore NULL, dobbiamo includere il delimitatore ENCLOSED BY nella definizione della tabella.

record delimitati da newline
campi terminati da ','
facoltativamente racchiusi da ' ' <<<=====
valori di campo mancanti sono nulli

(4) ORA-29913 può verificarsi anche se Oracle non è in grado di creare anche i file di registro. Quindi controlla l'autorizzazione delle directory

(5) Errore nella directory della tabella esterna
L'errore ORA-29913 può verificarsi anche nelle tabelle esterne quando non si concedono autorizzazioni di lettura e scrittura alla directory:

CREATE O SOSTITUIRE DIRECTORY extdir COME '/u01/oradata/testdir';
CONCEDERE LETTURA SULLA DIRECTORY testdir A ;
CONCEDERE SCRITTURA SULLA DIRECTORY testdir TO ;

Ecco alcune buone informazioni sulla tabella esterna, dovresti controllare

Cosa sono le TABELLE ESTERNE in Oracle?

(1)Le tabelle esterne sono tabelle di sola lettura in cui i dati sono archiviati in file flat esterni al database

(2) È possibile utilizzare la funzione tabella esterna per accedere a file esterni come se fossero tabelle all'interno del database.

(3)   Quando crei una tabella esterna, ne definisci la struttura e la posizione con in Oracle. Fondamentalmente memorizzi i metadati all'interno dell'oracolo

(4) Quando si interroga la tabella, Oracle legge la tabella esterna e restituisce i risultati proprio come se i dati fossero stati archiviati nel database.

(5) Il server Oracle fornisce due principali driver Oracle per leggere i file flat

  • Oracle_loader:viene utilizzato per leggere i file flat utilizzando la tecnologia Oracle Loader. In pratica permette di leggere i file che possono essere interpretati utilizzando la tecnologia sql loader
  • Oracle_datapump:viene utilizzato sia per l'importazione che per l'esportazione di dati utilizzando un formato indipendente dalla piattaforma

Articoli correlati
Tabelle esterne Oracle:dai un'occhiata a questo post per informazioni sull'utilizzo di tabelle esterne in Oracle con esempi, come creare una tabella esterna, come usarla
Oracle Create table:le tabelle sono l'unità di base dell'archiviazione dei dati in un database Oracle. spieghiamo come utilizzare il comando Oracle create table per creare una tabella con chiave esterna/chiave primaria
ORA-00936 espressione mancante:scopri la risoluzione dei problemi ORA-00936 espressione mancante in Oracle SQL. quali sono le varie soluzioni, come possiamo evitarlo, Oracle bug per questi errori
ORA-01017:nome utente/password non validi; accesso negato:scopri la possibile risoluzione di ORA-01017 nome utente/password non validi; accesso negato. Come risolverlo rapidamente senza troppi sforzi
Ora-00001 vincolo univoco violato:dai un'occhiata a questo post per la possibile soluzione per l'errore Oracle ORA-00001 vincolo univoco violato. Come risolverlo e risolverlo
ORA-00911:carattere non valido :Questo post è per cause comuni di ORA-00911:carattere non valido in Oracle con esempi e risoluzione per aiutarti a completare il lavoro
ORA-00900 :Questo post per le varie soluzioni per ORA-00900 istruzione sql non valida. Motivi dell'errore. Come eseguire il debug e risolverlo rapidamente,
ORA-03113:fine del file sul canale di comunicazione:Scopri il metodo per risolvere ORA -03113:fine file sul canale di comunicazione. Questo errore potrebbe verificarsi all'avvio del database, durante l'esecuzione del programma
Documentazione Oracle

Corsi consigliati

Ecco il bel corso Udemy per Oracle SQL
Oracle-Sql-Step-by-step:questo corso copre SQL di base, join, creazione di tabelle e modifica della sua struttura, creazione di viste, unione, unione, tutto e molto altro . Un ottimo corso e un corso indispensabile per principianti SQL
Il corso completo di certificazione Oracle SQL :Questo è un buon corso per chiunque voglia essere pronto per il lavoro per le competenze di sviluppatore SQL. Un bel corso spiegato
Oracle SQL Developer:Essentials, Tips and Tricks :lo strumento di sviluppo Oracle Sql è utilizzato da molti sviluppatori. Questo corso offre trucchi e lezioni su come utilizzarlo in modo efficace e diventare uno sviluppatore sql produttivo
Oracle SQL Performance Tuning Masterclass 2020 :l'ottimizzazione delle prestazioni è una delle abilità critiche e più ricercate. Questo è un buon corso per conoscerlo e iniziare a ottimizzare le prestazioni di sql