ORA-29913 je jednou z běžných chyb při práci s externími tabulkami v databázi Oracle. Zkoumali bychom různé způsoby, jak může být chyba způsobena a co lze udělat pro vyřešení chyby
(1) Externí soubor nenalezen nebo nesprávné oprávnění
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
Při analýze tabulky dostanete podobnou zprávu:
SQL> spustit sys.dbms_stats.gather_table_stats(‘SCOTT‘,‘EXAMPLE_EXTERNAL_TABLE‘);
BEGIN sys.dbms_stats.gather_table_stats(‘SCOTT‘,‘EXAMPLE_EXTERNAL_TABLE‘); END;
*
CHYBA na řádku 1:
ORA-29913:chyba při provádění výzvy ODCIEXTTABLEOPEN
ORA-29400:chyba datové kazety
KUP-04040:test souboru1 .dat v TEST_DIR nenalezeno
ORA-06512:na „SYS.DBMS_STATS“, řádek 7161
ORA-06512:na „SYS.DBMS_STATS“, řádek 7174
ORA-06512:na řádku 1
Nebo obecně
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
Důvod
Externí soubory byly přesunuty ze správného umístění
SQL> select * from dba_directories ;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------ -------------- -----------------------
SYS TEST_DIR /u01/oradata/external_files
Zkontrolujte názvy souborů přidružené k externí tabulce
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
Nyní probíhá kontrola na úrovni OS
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
Žádný takový soubor nebo adresář
Soubory se tedy nenacházejí ve správném umístění
Oba výše uvedené dotazy lze také kombinovat, jak je uvedeno níže
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';
Rozlišení:
Přesuňte oba soubory zpět do původního umístění
$ mv /u02/oradata/external_files/test2.dat /u01/oradata/external_files
$ mv /u02/oradata/external_files/test1.dat /u01/oradata/external_files
Nyní
oba níže uvedená prohlášení budou úspěšná
select * from Scott.example_external_table; execute sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');
(2) Nesprávný formát dat v externím souboru
CHYBA na řádku 1: ORA-29913:chyba při provádění výzvy ODCIEXTTABLEFETCH ORA-30653:dosažen limit odmítnutí ORA-06512:na „SYS.ORACLE_LOADER“, řádek 14 ORA-06512:na řádku 1 |
Důvod
(i) Externí soubor může mít prázdné řádky
(ii) Zkontrolujte oddělovač TAB nebo HEX oddělovač
A. Oddělovač TAB ‚\t‘, který používá Oracle, je reprezentován HEX hodnotou ‚09‘
b. Hodnota HEX v datovém souboru by se měla shodovat s hodnotou HEX uvedenou v příkazu
CREATE
c. Specifikace HEX v příkazu CREATE by měla vypadat jako 0X'
(iii) Pokud je sloupec přidaný do externí tabulky, měl by být přítomen i v externí soubor
Rozlišení
Zkontrolujte chybu v protokolu a podle toho problém opravte
(3) Chyba se sloupcem Null
CHYBA na řádku 1: ORA-29913:chyba při provádění výzvy ODCIEXTTABLEOPEN ORA-29400:chyba datové kazety KUP-04043:sloupec tabulky nebyl v externím zdroji nalezen: |
Důvod
Externí soubor má hodnoty null pro poslední sloupec, který je původně číselným sloupcem. Když změníme null na číslo 0, pak dotaz uspěje.
Rozlišení
Chceme-li načíst hodnotu NULL, musíme do definice tabulky zahrnout oddělovač ENCLOSED BY.
záznamy oddělené novým řádkem pole ukončená ',' volitelně ohraničená ' ' <<<===== chybějící hodnoty polí jsou null |
(4) ORA-29913 může také nastat, pokud Oracle není schopen vytvořit také soubory protokolu. Takže zkontrolujte oprávnění k adresářům
(5) Chyba adresáře externí tabulky
K chybě ORA-29913 může dojít také v externích tabulkách, když adresáři neudělíte oprávnění pro čtení a zápis:
VYTVOŘIT NEBO NAHRADIT ADRESÁŘ extdir JAKO ‚/u01/oradata/testdir‘;
POSKYTNUTÍ ČTĚTE V ADRESÁŘ testdir TO
UDĚLIT ZÁPIS DO ADRESÁŘE testdir TO
Zde je několik dobrých informací o externí tabulce, měli byste se podívat
Co jsou EXTERNÍ TABULKY v Oracle?
(1)Externí tabulky jsou tabulky pouze pro čtení, kde jsou data uložena v plochých souborech mimo databázi
(2) Můžete použít funkci externí tabulky pro přístup k externím souborům, jako by to byly tabulky v databázi.
(3) Když vytváříte externí tabulku, definujete její strukturu a umístění pomocí v oracle. V podstatě stačí uložit metadata uvnitř oracle
(4) Když zadáte dotaz na tabulku, Oracle přečte externí tabulku a vrátí výsledky stejně, jako kdyby byla data uložena v databázi.
(5) Server Oracle poskytuje dva hlavní ovladače Oracle pro čtení plochých souborů
- Oracle_loader:Používá se pro čtení plochých souborů pomocí technologie Oracle loader. V zásadě umožňuje číst soubory, které lze interpretovat pomocí technologie sql loader
- Oracle_datapump:Používá se pro import i export dat pomocí formátu nezávislého na platformě
Související články
Externí tabulky Oracle :V tomto příspěvku najdete informace o použití externí tabulky v oracle s příkladem, jak vytvořit externí tabulku, jak ji používat
Oracle Create table :Tabulky jsou základní jednotkou pro ukládání dat v Oracle Database.we popisuje, jak používat příkaz Oracle create table k vytvoření tabulky s cizím klíčem /primárním klíčem
ORA-00936 chybějící výraz :Informace o řešení problémů ORA-00936 chybějící výraz v Oracle SQL.jaká jsou různá řešení, jak můžeme se tomu vyhnout, Oracle chyby pro tyto chyby
ORA-01017:neplatné uživatelské jméno/heslo; přihlášení odepřeno :Zjistěte možné řešení ORA-01017 neplatné uživatelské jméno/heslo; přihlášení odepřeno. Jak to rychle vyřešit bez velkého úsilí
Porušeno jedinečné omezení ORA-00001:Podívejte se na tento příspěvek, kde najdete možné řešení chyby věštce ORA-00001 bylo porušeno jedinečné omezení. Jak to vyřešit a opravit
ORA-00911:neplatný znak :Tento příspěvek je pro běžné příčiny ORA-00911:neplatný znak v oracle s příklady a řešením, které vám pomohou dokončit úlohu
ORA-00900 :Tento příspěvek obsahuje různá řešení pro neplatný příkaz SQL ORA-00900.Důvody chyby.Jak ji rychle odladit a vyřešit,
ORA-03113:konec souboru na komunikačním kanálu :Vyzkoušet způsob vyřešení ORA -03113:konec souboru na komunikačním kanálu. K této chybě může dojít při spouštění databáze, spuštěném programu
Dokumentace Oracle
Doporučené kurzy
Zde je pěkný kurz Udemy pro Oracle SQL
Oracle-Sql-Krok za krokem:Tento kurz pokrývá základní sql, spojení, vytváření tabulek a úpravu jejich struktury, vytváření zobrazení, sjednocení, sjednocení – vše a mnoho dalších věcí. . Skvělý kurz a kurz, který musíte mít pro začátečníky SQL
Úplný certifikační kurz Oracle SQL :Toto je dobrý kurz pro každého, kdo chce být Job připravený na vývojářské dovednosti SQL. Pěkně vysvětlený kurz
Oracle SQL Developer:Základy, tipy a triky :Vývojářský nástroj Oracle Sql používá mnoho vývojářů. Tento kurz nám poskytuje triky a lekce, jak jej efektivně používat a stát se produktivním vývojářem sql
Oracle SQL Performance Tuning Masterclass 2020 :Ladění výkonu je jednou z kritických a nejvyhledávanějších dovedností. Toto je dobrý kurz, jak se o tom dozvědět a začít s laděním výkonu SQL