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