ORA-29913 is een van de meest voorkomende fouten bij het werken met externe tabellen in de Oracle-database. We kijken naar verschillende manieren waarop de fout kan worden veroorzaakt en wat er kan worden gedaan om de fout op te lossen
(1) Extern bestand niet gevonden of toestemming onjuist
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
Bij het analyseren van de tabel krijg je een soortgelijk bericht:
SQL> execute sys.dbms_stats.gather_table_stats(‘SCOTT’,’EXAMPLE_EXTERNAL_TABLE’);
BEGIN sys.dbms_stats.gather_table_stats(‘SCOTT’,’EXAMPLE_EXTERNAL_TABLE’); END;
*
ERROR op regel 1:
ORA-29913:fout bij het uitvoeren van ODCIEXTTABLEOPEN callout
ORA-29400:fout datacartridge
KUP-04040:bestand test1 .dat in TEST_DIR niet gevonden
ORA-06512:op “SYS.DBMS_STATS”, regel 7161
ORA-06512:op “SYS.DBMS_STATS”, regel 7174
ORA-06512:op regel 1
Of in het algemeen
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
Reden
De externe bestanden zijn verplaatst van de juiste locatie
SQL> select * from dba_directories ;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------ -------------- -----------------------
SYS TEST_DIR /u01/oradata/external_files
Controleer de bestandsnamen die zijn gekoppeld aan de externe 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
Controleer nu op OS-niveau
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
Zo'n bestand of map bestaat niet
Bestanden staan dus niet op de juiste locatie
Beide bovenstaande zoekopdrachten kunnen worden gecombineerd zoals hieronder ook
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';
Oplossing:
Verplaats beide bestanden terug naar de oorspronkelijke locatie
$ mv /u02/oradata/external_files/test2.dat /u01/oradata/external_files
$ mv /u02/oradata/external_files/test1.dat /u01/oradata/external_files
Nu
Beide onderstaande beweringen zullen slagen
select * from Scott.example_external_table; execute sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');
(2) Onjuist gegevensformaat in extern bestand
FOUT op regel 1: ORA-29913:fout bij het uitvoeren van ODCIEXTTABLEFETCH-aanroep ORA-30653:weigeringslimiet bereikt ORA-06512:op "SYS.ORACLE_LOADER", regel 14 ORA-06512:op regel 1 |
Reden
(i) Het externe bestand heeft mogelijk lege regels
(ii) Controleer het TAB-scheidingsteken of het HEX-scheidingsteken
a. Het TAB-scheidingsteken '\t', gebruikt door Oracle, wordt weergegeven door een HEX-waarde '09'
b. De HEX-waarde in het gegevensbestand moet overeenkomen met de HEX-waarde die is opgegeven in de
CREATE-instructie
c. De HEX-specificatie in de CREATE-instructie zou eruit moeten zien als 0X'
(iii) Als de kolom die aan de externe tabel is toegevoegd, hetzelfde zou moeten zijn in de extern bestand
Oplossing
Controleer de fout in het logboek en corrigeer het probleem dienovereenkomstig
(3) Fout met Null-kolom
ERROR op regel 1: ORA-29913:fout bij het uitvoeren van ODCIEXTTABLEOPEN callout ORA-29400:fout datacartridge KUP-04043:tabelkolom niet gevonden in externe bron: |
Reden
Het externe bestand heeft wel null-waarden voor de laatste kolom, die oorspronkelijk een nummerkolom is. Als we de null veranderen in een getal 0, dan slaagt de query.
Oplossing
Om een NULL-waarde te laden, moeten we ENCLOSED BY scheidingsteken opnemen in de tabeldefinitie.
records gescheiden door nieuwe regel velden afgesloten door ',' optioneel omsloten door ' ' <<<===== ontbrekende veldwaarden zijn null |
(4) ORA-29913 kan ook optreden als Oracle de logbestanden ook niet kan maken. Dus controleer of de mappen toestemming hebben
(5) Externe tabelmapfout
De ORA-29913-fout kan ook optreden in externe tabellen wanneer u geen lees- en schrijfrechten aan de map verleent:
CREER OF VERVANG DIRECTORY extdir AS ‘/u01/oradata/testdir’;
GRATIS LEES IN DIRECTORY testdir NAAR
GRAT SCHRIJF IN DIRECTORY testdir NAAR
Hier is wat goede informatie over externe tafel, u moet eens kijken
Wat zijn EXTERNE TABELLEN in Oracle?
(1) Externe tabellen zijn alleen-lezen tabellen waarin de gegevens zijn opgeslagen in platte bestanden buiten de database
(2) U kunt de externe tabelfunctie gebruiken om toegang te krijgen tot externe bestanden alsof het tabellen in de database zijn.
(3) Wanneer u een externe tabel maakt, definieert u de structuur en locatie met in oracle. In principe sla je de metadata gewoon op in het orakel
(4) Wanneer u de tabel opvraagt, leest orakel de externe tabel en geeft de resultaten terug alsof de gegevens in de database waren opgeslagen.
(5) De orakelserver biedt twee belangrijke orakelstuurprogramma's om de platte bestanden te lezen
- Oracle_loader:dit wordt gebruikt voor het lezen van platte bestanden met behulp van de Oracle Loader-technologie. Het maakt het in principe mogelijk om de bestanden te lezen die kunnen worden geïnterpreteerd met behulp van sql loader-technologie
- Oracle_datapump:dit wordt gebruikt voor zowel het importeren als exporteren van gegevens met een platformonafhankelijk formaat
Verwante artikelen
Oracle externe tabellen:bekijk dit bericht voor informatie over het gebruik van een externe tabel in Oracle, met bijvoorbeeld hoe u een externe tabel maakt en hoe u deze gebruikt
Oracle Create-tabel:tabellen zijn de basiseenheid van gegevensopslag in een Oracle Database.we behandelt het gebruik van de Oracle Create Table-opdracht om een tabel te maken met een externe sleutel /primaire sleutel
ORA-00936 ontbrekende expressie:leer oplossen van problemen met ORA-00936 ontbrekende expressie in Oracle SQL.Wat zijn verschillende oplossingen, hoe we kunnen het vermijden, Oracle bugs voor deze fouten
ORA-01017:ongeldige gebruikersnaam/wachtwoord; aanmelding geweigerd :Leer de mogelijke oplossing van ORA-01017 ongeldige gebruikersnaam/wachtwoord; Aanmelding geweigerd. Hoe het snel op te lossen zonder veel inspanningen
ORA-00001 unieke beperking geschonden :Bekijk dit bericht voor de mogelijke oplossing voor orakelfout ORA-00001 unieke beperking geschonden. Hoe dit op te lossen en op te lossen
ORA-00911:ongeldig teken :Dit bericht is voor veelvoorkomende oorzaken van ORA-00911:ongeldig teken in orakel met voorbeelden en oplossing om u te helpen de taak te voltooien
ORA-00900:Dit bericht voor de verschillende oplossingen voor de ongeldige SQL-instructie van ORA-00900.Redenen voor de fout.Hoe debuggen en snel oplossen,
ORA-03113:end-of-file op communicatiekanaal:Check out methode om ORA op te lossen -03113:einde bestand op communicatiekanaal. Deze fout kan optreden bij het opstarten van de database, terwijl het programma wordt uitgevoerd
Oracle-documentatie
Aanbevolen cursussen
Hier is de mooie Udemy-cursus voor Oracle SQL
Oracle-Sql-Step-voor-stap:deze cursus behandelt basis-sql, joins, tabellen maken en de structuur wijzigen, weergave maken, Union, Union -alles en nog veel meer . Een geweldige cursus en een must-have cursus voor SQL-starters
De complete Oracle SQL-certificeringscursus :Dit is een goede cursus voor iedereen die Job-klaar wil zijn voor SQL-ontwikkelaarsvaardigheden. Een mooi uitgelegde cursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-ontwikkelaarstool wordt door veel ontwikkelaars gebruikt. Deze cursus geeft ons trucs en lessen om het effectief te gebruiken en een productieve sql-ontwikkelaar te worden
Oracle SQL Performance Tuning Masterclass 2020 :Het afstemmen van prestaties is een van de belangrijkste en meest gezochte vaardigheden. Dit is een goede cursus om erover te leren en te beginnen met het afstemmen van sql-prestaties