Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да разрешите ORA-29913 с външни таблици

ORA-29913 е една от често срещаните грешки при работа с външни таблици в базата данни на Oracle. Ще разгледаме различни начини, по които може да се създаде грешката и какво може да се направи, за да се разреши грешката

(1) Външен файл не е намерен или разрешението е неправилно

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

Когато анализирате таблицата, получавате подобно съобщение:

SQL> изпълни sys.dbms_stats.gather_table_stats(‘SCOTT’,’EXAMPLE_EXTERNAL_TABLE’);
BEGIN sys.dbms_stats.gather_table_stats(‘SCOTT’,’EXAMPLE_EXTERNAL_TABLE’); END;
*
ГРЕШКА на ред 1:
ORA-29913:грешка при изпълнение на извикване на ODCIEXTTABLEOPEN
ORA-29400:грешка в касетата с данни
KUP-04040:файл test1 .dat в TEST_DIR не е намерен
ORA-06512:в “SYS.DBMS_STATS”, ред 7161
ORA-06512:в “SYS.DBMS_STATS”, ред 7174
ORA-06512:на ред 1

Или по принцип

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

Причина

Външните файлове са преместени от правилното място

SQL> select * from dba_directories ;

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

Проверете имената на файлове, свързани с външна таблица

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

Сега се проверява на ниво ОС
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
Няма такъв файл или директория

Така че файловете не присъстват на правилното място

И двете по-горе заявки могат да бъдат комбинирани както по-долу

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

Резолюция:
Преместете и двата файла обратно на оригиналното местоположение

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

Сега
И двете изявления по-долу ще бъдат успешни

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

(2) Неправилен формат на данните във външен файл

ГРЕШКА на ред 1:
ORA-29913:грешка при изпълнение на извикване на ODCIEXTTABLEFETCH
ORA-30653:лимитът за отхвърляне е достигнат
ORA-06512:на „SYS.ORACLE_LOADER“, ред 14
ORA-06512:на ред 1

Причина

(i) Външният файл може да има празни редове
(ii) Проверете разделителя TAB или HEX разделителя

а. Разделителят TAB „\t“, използван от Oracle, е представен от HEX стойност „09“
b. HEX стойността във файла с данни трябва да съответства на HEX стойността, посочена в
изявлението CREATE
c. Спецификацията HEX в израза CREATE трябва да изглежда като 0X'gt;' или 0x''
(iii) Ако колоната, добавена към външната таблица, същото трябва да присъства в външен файл

Резолюция
Проверете грешката в регистрационния файл и съответно коригирайте проблема

(3) Грешка с нула колона

ГРЕШКА на ред 1:
ORA-29913:грешка при изпълнение на извикване на ODCIEXTTABLEOPEN
ORA-29400:грешка в касетата за данни
KUP-04043:колоната на таблицата не е намерена във външен източник:

Причина
Външният файл има нулеви стойности за последната колона, която първоначално е числова колона. Когато променим нулата на число 0, тогава заявката е успешна.

Резолюция
За да заредим стойност NULL, трябва да включим разделител ENCLOSED BY в дефиницията на таблицата.

записи, разделени с нов ред
полета, завършени с ','
по избор оградени с ' ' <<<=====
липсващи стойности на полета са нулеви

(4)ORA-29913 може да възникне и ако Oracle не може да създаде и регистрационните файлове. Така че проверете за разрешението на директориите

(5) Грешка в директорията на външна таблица
Грешката ORA-29913 може да възникне и във външни таблици, когато не предоставите разрешения за четене и запис на директорията:

СЪЗДАДЕТЕ ИЛИ ЗАМЕНЕТЕ ДИРЕКТОРА extdir КАТО ‘/u01/oradata/testdir’;
ПРЕДОСТАВЯТЕ ПРОЧЕТЕНЕ В ДИРЕКТОРА testdir на <потребителско име>;
ПРЕДОСТАВЯТЕ ЗАПИСВАНЕ В ДИРЕКЦИЯ testdir НА <потребителско име>;

Ето малко добра информация за външната таблица, трябва да  проверите

Какво представляват ВЪНШНИ ТАБЛИЦИ в Oracle?

(1) Външните таблици са таблици само за четене, където данните се съхраняват в плоски файлове извън базата данни

(2) Можете да използвате функцията за външна таблица за достъп до външни файлове, сякаш са таблици в базата данни.

(3)   Когато създавате външна таблица, вие дефинирате нейната структура и местоположение с в oracle. По принцип просто съхранявате метаданните в оракула

(4) Когато направите заявка към таблицата, oracle чете външната таблица и връща резултатите, точно както ако данните са били съхранени в базата данни.

(5) Сървърът на oracle предоставя два основни драйвера на oracle за четене на плоските файлове

  • Oracle_loader:Използва се за четене на плоски файлове с помощта на технологията за зареждане на Oracle. По принцип позволява четене на файлове, които могат да бъдат интерпретирани с помощта на технологията за зареждане на sql
  • Oracle_datapump:Използва се както за импортиране, така и за експортиране на данни, използвайки независим от платформа формат

Сродни статии
Външни таблици на Oracle:Разгледайте тази публикация за информация относно използването на външна таблица в oracle с пример, как да създадете външна таблица, как да я използвате
Oracle Създайте таблица:Таблиците са основната единица за съхранение на данни в Oracle Database.we обхваща как да използвате командата Oracle create table за създаване на таблица с външен ключ /първичен ключ
Липсващ израз на ORA-00936 :Научете как да отстранявате неизправности ORA-00936 липсващ израз в Oracle SQL. какви са различните решения, как можем да го избегнем, грешки на Oracle за тези грешки
ORA-01017:невалидно потребителско име/парола; Отказано влизане:Научете възможното разрешаване на ORA-01017 невалидно потребителско име/парола; влизане е отказано. Как да го разрешим бързо без усилия за мук
Нарушено е уникално ограничение ORA-00001 :Разгледайте тази публикация за възможното решение за грешка на оракула. ​​Нарушено е уникално ограничение ORA-00001. Как да го разрешите и коригирате
ORA-00911:невалиден знак :Тази публикация е за често срещани причини за ORA-00911:невалиден знак в oracle с примери и резолюция, които да ви помогнат да завършите задачата
ORA-00900 :Тази публикация за различните решения за ORA-00900 невалиден sql израз. Причини за грешката. Как да отстраните грешките и бързо да я отстраните,
ORA-03113:край на файла на комуникационния канал :Разгледайте метод за разрешаване на ORA -03113:край на файла на комуникационния канал. Тази грешка може да се случи при стартиране на базата данни, стартиране на програма
документация на Oracle

Препоръчани курсове

Ето хубавия курс на Udemy за Oracle SQL
Oracle-Sql-Step-by-step :Този курс обхваща основния sql, присъединяването, Създаването на таблици и промяната на структурата им, Създаване на изглед, Обединение, Обединение - всичко и много други неща . Страхотен курс и задължителен курс за SQL начинаещи
Пълният курс за сертифициране на Oracle SQL :Това е добър курс за всеки, който иска да бъде готов за работа за SQL разработчици. Приятно обяснен курс
Oracle SQL Developer:Основни неща, съвети и трикове :Инструментът за разработчици на Oracle Sql се използва от много разработчици. Този курс ни дава трикове и уроци за това как ефективно да го използваме и да станем продуктивен sql разработчик
Майсторски клас за настройка на производителността на Oracle 2020 г. :Настройката на производителността е едно от критичните и най-търсените умения. Това е добър курс, за да научите за него и да започнете да правите настройка на производителността на 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. Как да стартирате Create Table DDL с EXECUTE IMMEDIATE в Oracle Database

  2. Преобразуване на Unix Timestamp в стойност на дата в Oracle

  3. Подходящите инструменти правят настройката бърза

  4. PL/SQL:как да подканя въвеждането на потребителя в процедура?

  5. Oracle RAC и последователности