Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak rozwiązać ORA-29913 za pomocą tabel zewnętrznych

ORA-29913 jest jednym z częstych błędów podczas pracy z tabelami zewnętrznymi w bazie danych Oracle. Przyjrzelibyśmy się różnym sposobom powstawania błędu i sposobom jego rozwiązania

(1) Nie znaleziono pliku zewnętrznego lub niepoprawne uprawnienia

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

Podczas analizy tabeli otrzymujesz podobny komunikat:

SQL> wykonaj sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');
BEGIN sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE'); END;
*
BŁĄD w wierszu 1:
ORA-29913:błąd podczas wykonywania wywołania ODCIEXTTABLEOPEN
ORA-29400:błąd kasety z danymi
KUP-04040:test pliku1 .dat w TEST_DIR nie znaleziono
ORA-06512:w „SYS.DBMS_STATS”, wiersz 7161
ORA-06512:w „SYS.DBMS_STATS”, wiersz 7174
ORA-06512:w wierszu 1

Lub ogólnie

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

Powód

Pliki zewnętrzne zostały przeniesione z właściwej lokalizacji

SQL> select * from dba_directories ;

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

Sprawdź nazwy plików powiązane z tabelą zewnętrzną

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

Teraz sprawdzanie na poziomie systemu operacyjnego
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
Brak takiego pliku lub katalogu

Dlatego pliki nie znajdują się we właściwej lokalizacji

Oba powyższe zapytania można połączyć jak poniżej

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

Rozdzielczość:
Przenieś oba pliki do pierwotnej lokalizacji

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

Teraz
Obie poniższe stwierdzenie odniesie sukces

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

(2) Nieprawidłowy format danych w pliku zewnętrznym

BŁĄD w wierszu 1:
ORA-29913:błąd podczas wykonywania objaśnienia ODCIEXTTABLEFETCH
ORA-30653:osiągnięto limit odrzuceń
ORA-06512:w „SYS.ORACLE_LOADER”, wiersz 14
ORA-06512:w wierszu 1

Powód

(i) Plik zewnętrzny może zawierać puste wiersze
(ii) Sprawdź separator TAB lub separator HEX

a. Ogranicznik TAB „\t”, używany przez Oracle, jest reprezentowany przez wartość szesnastkową „09”
b. Wartość HEX w pliku danych powinna być zgodna z wartością HEX określoną w
instrukcji CREATE
c. Specyfikacja HEX w instrukcji CREATE powinna wyglądać tak:0X'gt;' lub 0x''
(iii) Jeśli kolumna dodana do tabeli zewnętrznej, to samo powinno być obecne w plik zewnętrzny

Rozdzielczość
Sprawdź błąd w dzienniku i odpowiednio napraw problem

(3) Błąd z kolumną Null

BŁĄD w wierszu 1:
ORA-29913:błąd podczas wykonywania objaśnienia ODCIEXTTABLEOPEN
ORA-29400:błąd kasety z danymi
KUP-04043:nie znaleziono kolumny tabeli w zewnętrznym źródle:

Powód
Zewnętrzny plik ma wartości null dla ostatniej kolumny, która pierwotnie była kolumną liczbową. Gdy zmienimy wartość null na 0, zapytanie się powiedzie.

Rozdzielczość
Aby załadować wartość NULL, musimy dołączyć ogranicznik ENCLOSED BY do definicji tabeli.

rekordy rozdzielone znakami nowej linii
pola zakończone znakami ','
opcjonalnie ujęte w ' ' <<<=====
brakujące wartości pól są zerowe

(4) ORA-29913 może również wystąpić, jeśli Oracle nie może również utworzyć plików dziennika. Więc sprawdź uprawnienia do katalogów

(5) Błąd katalogu tabeli zewnętrznej
Błąd ORA-29913 może również wystąpić w tabelach zewnętrznych, jeśli nie przyznasz uprawnień do odczytu i zapisu do katalogu:

UTWÓRZ LUB ZASTĄP KATALOG extdir AS „/u01/oradata/testdir”;
ZAPEWNIJ ODCZYT W KATALOGU testdir ;
UDZIEL ZAPIS W KATALOGU testdir ;

Oto kilka dobrych informacji na temat tabeli zewnętrznej, powinieneś sprawdzić

Co to są ZEWNĘTRZNE TABELE w Oracle?

(1)Zewnętrzne tabele to tabele tylko do odczytu, w których dane są przechowywane w płaskich plikach poza bazą danych

(2) Możesz użyć funkcji zewnętrznej tabeli, aby uzyskać dostęp do zewnętrznych plików tak, jakby były tabelami w bazie danych.

(3)   Podczas tworzenia tabeli zewnętrznej definiujesz jej strukturę i lokalizację za pomocą narzędzia Oracle. Zasadniczo przechowujesz metadane wewnątrz wyroczni

(4) Kiedy wysyłasz zapytanie do tabeli, oracle odczytuje zewnętrzną tabelę i zwraca wyniki tak, jakby dane były przechowywane w bazie danych.

(5) Serwer Oracle udostępnia dwa główne sterowniki Oracle do odczytywania płaskich plików

  • Oracle_loader:Służy do odczytywania płaskich plików przy użyciu technologii Oracle Loader. Zasadniczo pozwala na odczyt plików, które można zinterpretować za pomocą technologii ładowania sql
  • Oracle_datapump:Służy zarówno do importowania, jak i eksportowania danych przy użyciu formatu niezależnego od platformy

Powiązane artykuły
Zewnętrzne tabele Oracle :Sprawdź ten post, aby dowiedzieć się, jak używać zewnętrznej tabeli w Oracle, jak utworzyć zewnętrzną tabelę, jak jej używać
Oracle Utwórz tabelę :Tabele są podstawową jednostką przechowywania danych w Oracle Database. omawiamy, jak używać polecenia Oracle create table do tworzenia tabeli z kluczem obcym /kluczem podstawowym
brakujące wyrażenie ORA-00936 :Dowiedz się, jak rozwiązać problem z brakującym wyrażeniem ORA-00936 w Oracle SQL.Jakie są różne rozwiązania, jak możemy tego uniknąć, błędy Oracle dotyczące tych błędów
ORA-01017:nieprawidłowa nazwa użytkownika/hasło; odmowa logowania :Dowiedz się, jak rozwiązać problem z nieprawidłową nazwą użytkownika/hasłem ORA-01017; Logowanie odrzucone. Jak szybko rozwiązać ten problem bez wysiłku
Naruszone ograniczenie unikatowe ORA-00001 :Sprawdź ten post, aby poznać możliwe rozwiązanie błędu Oracle Naruszono ograniczenie unikatowe ORA-00001. Jak go rozwiązać i naprawić
ORA-00911:nieprawidłowy znak :Ten post dotyczy typowych przyczyn ORA-00911:nieprawidłowy znak w Oracle z przykładami i rozwiązaniem, które pomogą Ci ukończyć zadanie
ORA-00900 :Ten post dotyczy różnych rozwiązań dotyczących nieprawidłowej instrukcji sql ORA-00900.Przyczyny błędu.Jak debugować i szybko go rozwiązać,
ORA-03113:koniec pliku w kanale komunikacyjnym :Sprawdź metodę rozwiązania problemu ORA -03113:koniec pliku w kanale komunikacyjnym. Ten błąd może wystąpić podczas uruchamiania bazy danych podczas uruchamiania programu
Dokumentacja Oracle

Polecane kursy

Oto fajny kurs Udemy dotyczący Oracle SQL
Oracle-Sql-Step-by-step :Ten kurs obejmuje podstawowy SQL, złączenia, tworzenie tabel i modyfikowanie ich struktury, tworzenie widoków, łączenie, łączenie i wiele innych rzeczy . Świetny kurs i obowiązkowy kurs dla początkujących SQL
Pełny kurs certyfikacji Oracle SQL :To dobry kurs dla każdego, kto chce być gotowy do pracy w zakresie umiejętności programistycznych SQL. Fajnie objaśniony kurs
Oracle SQL Developer:Essentials, Tips and Tricks :Narzędzie programistyczne Oracle SQL jest używane przez wielu programistów. Ten kurs zawiera sztuczki i lekcje, jak skutecznie z niego korzystać i zostać produktywnym programistą sql
Oracle SQL Performance Tuning Masterclass 2020 :Dostrajanie wydajności jest jedną z najważniejszych i najbardziej poszukiwanych umiejętności. To dobry kurs, aby się o tym dowiedzieć i zacząć dostrajać wydajność sql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyrocznia:LONG czy CLOB?

  2. Funkcja NLSSORT() w Oracle

  3. Czy instrukcje DDL zawsze dają niejawne zatwierdzenie, czy można uzyskać niejawne wycofanie?

  4. Wprowadzenie do zbiorczego zbierania danych PL/SQL w bazie danych Oracle

  5. ORA-01658:nie można utworzyć INITIAL ekstentu dla segmentu w przestrzeni tabel TS_DATA