sql >> Databáze >  >> RDS >> Oracle

Jak vyřešit ORA-29913 pomocí externích tabulek

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


  1. Umožněte zákazníkům business intelligence prostřednictvím datových katalogů, obchodních glosářů a správy dat

  2. SQL Server 2017:Import dat CSV z Linuxu do Salesforce pomocí SSIS

  3. Funkce TO_DATE() v Oracle

  4. SQL Server používá vysoký procesor při hledání uvnitř řetězců nvarchar