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