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

Sådan løses ORA-29913 med eksterne tabeller

ORA-29913 er en af ​​de almindelige fejl, når man arbejder med eksterne tabeller i Oracle-databasen. Vi ville se på forskellige måder, hvorpå fejlen kan frembringes, og hvad der kan gøres for at løse fejlen

(1) Ekstern fil blev ikke fundet, eller tilladelsen er forkert

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

Når du analyserer tabellen, får du en lignende besked:

SQL> kør sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');
BEGIN sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE'); SLUT;
*
FEJL på linje 1:
ORA-29913:fejl ved udførelse af ODCIEXTTABLEOPEN-forklaring
ORA-29400:datapatronfejl
KUP-04040:filtest1 .dat i TEST_DIR ikke fundet
ORA-06512:ved “SYS.DBMS_STATS”, linje 7161
ORA-06512:ved “SYS.DBMS_STATS”, linje 7174
ORA-06512:ved linje 1

Eller generelt

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

Årsag

De eksterne filer er blevet flyttet fra den korrekte placering

SQL> select * from dba_directories ;

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

Tjek de filnavne, der er knyttet til ekstern tabel

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

Kontrollerer nu på OS-niveau
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
Ingen sådan fil eller mappe

Så filer er ikke til stede på den korrekte placering

Begge ovenstående forespørgsler kan også kombineres som nedenfor

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

Opløsning:
Flyt begge filer tilbage til den oprindelige placering

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

Nu
Begge udsagn nedenfor vil lykkes

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

(2) Forkert dataformat i ekstern fil

FEJL på linje 1:
ORA-29913:fejl ved udførelse af ODCIEXTTABLEFETCH-forklaring
ORA-30653:afvisningsgrænse nået
ORA-06512:ved "SYS.ORACLE_LOADER", linje 14
ORA-06512:ved linje 1

Årsag

(i) Den eksterne fil kan have tomme linjer
(ii) Tjek TAB-adskilleren eller HEX-adskilleren

en. TAB-afgrænseren '\t', der bruges af Oracle, er repræsenteret af en HEX-værdi '09'
b. HEX-værdien i datafilen skal matche HEX-værdien angivet i
CREATE-sætningen
c. HEX-specifikationen i CREATE-sætningen skal se ud som 0X'gt;' eller 0x''
(iii) Hvis kolonnen tilføjet til den eksterne tabel, skal den samme være til stede i ekstern fil

Opløsning
Tjek fejlen i loggen og ret problemet i overensstemmelse hermed

(3) Fejl med Null-kolonnen

FEJL på linje 1:
ORA-29913:fejl under udførelse af ODCIEXTTABLEOPEN-forklaring
ORA-29400:datapatronfejl
KUP-04043:tabelkolonne blev ikke fundet i ekstern kilde:

Årsag
Den eksterne fil har null-værdier for den sidste kolonne, som oprindeligt er en talkolonne. Når vi ændrer null til et tal 0, så lykkes forespørgslen.

Opløsning
For at indlæse en NULL-værdi skal vi inkludere INKLUDERET AF skilletegn i tabeldefinitionen.

poster afgrænset af newline
felter afsluttet af ','
valgfrit omgivet af ' ' <<<=====
manglende feltværdier er null

(4) ORA-29913 kan også forekomme, hvis Oracle ikke også er i stand til at oprette logfilerne. Så tjek om mappernes tilladelse

(5) Ekstern tabelbiblioteksfejl
ORA-29913-fejlen kan også forekomme i eksterne tabeller, når du ikke giver læse- og skrivetilladelser til mappen:

OPRET ELLER ERSTAT DIRECTORY extdir AS ‘/u01/oradata/testdir’;
GIV LÆS PÅ DIRECTORY testdir TIL ;
GIV SKRIV PÅ DIRECTORY testdir TIL ;

Her er nogle gode oplysninger om ekstern tabel, du bør  tjekke ud

Hvad er EKSTERNE TABELLER i Oracle?

(1) Eksterne tabeller er skrivebeskyttede tabeller, hvor dataene er gemt i flade filer uden for databasen

(2) Du kan bruge ekstern tabelfunktion til at få adgang til eksterne filer, som om de var tabeller inde i databasen.

(3)   Når du opretter en ekstern tabel, definerer du dens struktur og placering med i oracle. Grundlæggende gemmer du bare metadataene inde i oraklet

(4) Når du forespørger i tabellen, læser Oracle den eksterne tabel og returnerer resultaterne, ligesom hvis dataene var blevet gemt i databasen.

(5) Oracle-serveren har to store oracle-drivere til at læse de flade filer

  • Oracle_loader:Dette bruges til at læse de flade filer ved hjælp af oracle loader-teknologien. Det giver grundlæggende mulighed for at læse filerne, som kan fortolkes ved hjælp af sql loader-teknologi
  • Oracle_datapump:Dette bruges til både import og eksport af data ved hjælp af platformsuafhængigt format

Relaterede artikler
Oracle Eksterne tabeller:Tjek dette indlæg for information om brug af ekstern tabel i Oracle med eksempel, hvordan man opretter ekstern tabel, hvordan man bruger den
Oracle Opret tabel:Tabeller er den grundlæggende enhed for datalagring i en Oracle Database.we dækker, hvordan man bruger Oracle create table-kommando til at oprette tabel med fremmednøgle /primær nøgle
ORA-00936 manglende udtryk :Lær fejlfinding ORA-00936 manglende udtryk i oracle SQL.hvad er forskellige løsninger, hvordan vi kan undgå det, Oracle fejl for denne fejl
ORA-01017:ugyldigt brugernavn/adgangskode; logon nægtet:Lær den mulige løsning af ORA-01017 ugyldigt brugernavn/adgangskode; logon nægtet. Sådan løses det hurtigt uden større indsats
ORA-00001 unik begrænsning overtrådt:Tjek dette indlæg for den mulige løsning på orakelfejlen ORA-00001 unik begrænsning overtrådt. Sådan løses og repareres det
ORA-00911:ugyldigt tegn:Dette indlæg er for almindelige årsager til ORA-00911:ugyldigt tegn i oracle med eksempler og opløsning, der hjælper dig med at fuldføre jobbet
ORA-00900:Dette indlæg for de forskellige løsninger til ORA-00900 ugyldig sql-sætning. Årsager til fejlen.Sådan fejlretter og løser du det hurtigt,
ORA-03113:slutningen af ​​filen på kommunikationskanalen :Tjek metoden til at løse ORA -03113:slutningen af ​​filen på kommunikationskanalen. Denne fejl kan opstå under opstart af database, hvor programmet kører
Oracle-dokumentation

Anbefalede kurser

Her er det fine Udemy-kursus til Oracle SQL
Oracle-Sql-trin-for-trin :Dette kursus dækker grundlæggende sql, joins, oprettelse af tabeller og ændring af strukturen, Create View, Union, Union -alle og meget andet. . Et godt kursus og must-have kursus for SQL starter
The Complete Oracle SQL Certification Course :Dette er et godt kursus for enhver, der ønsker at være jobklar til SQL-udviklerfærdigheder. Et godt forklaret kursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-udviklerværktøj bliver brugt af mange udviklere. Dette kursus giver os tricks og lektioner til, hvordan man effektivt bruger det og bliver en produktiv sql-udvikler
Oracle SQL Performance Tuning Masterclass 2020 :Indstilling af ydeevne er en af ​​de kritiske og mest søgte færdigheder. Dette er et godt kursus for at lære om det og begynde at lave sql-ydelsesjustering


  1. dbms_output.put_line

  2. 3 måder at kontrollere en kolonnes datatype i PostgreSQL

  3. Oracle 9i, Oracle 10g og Oracle 11g Developer Suite Selvstudie til formularer og rapporter

  4. Installation af pg -v 0.17.1