ошибка sqlplus при выборе из внешней таблицы: ORA-29913: ошибка при выполнении выноски ODCIEXTTABLEOPEN

я установил простой тест внешней таблицы Oracle, который я (наряду с администратором DBA и Unix) не могу получить для работы.

следующее основано на Oracle Концепции Внешних Таблиц. База данных, которую мы используем, - 11g.

это определение внешней таблицы:

drop table emp_load;

CREATE TABLE emp_load
    (employee_number      CHAR(5),
     employee_dob         DATE,
     employee_last_name   CHAR(20),
     employee_first_name  CHAR(15),
     employee_middle_name CHAR(15),
     employee_hire_date   DATE)
  ORGANIZATION EXTERNAL
    (TYPE ORACLE_LOADER
     DEFAULT DIRECTORY defaultdir
     ACCESS PARAMETERS
       (RECORDS DELIMITED BY NEWLINE
        FIELDS (employee_number      CHAR(2),
                employee_dob         CHAR(20),
                employee_last_name   CHAR(18),
                employee_first_name  CHAR(11),
                employee_middle_name CHAR(11),
                employee_hire_date   CHAR(10) date_format DATE mask "mm/dd/yyyy"
               )
       )
     LOCATION ('external_table_test.dat')
);

это содержимое " external_table_test.dat":

56november, 15, 1980  baker             mary       alice      09/01/2004
87december, 20, 1970  roper             lisa       marie      01/01/1999

Я могу запустить скрипт, который создает "emp_load" без проблем. Я также могу описать стол в порядке. Когда я пытаюсь "выбрать * из emp_load", я получаю следующие ошибки:

SQL> select * from emp_load;
select * from emp_load
              *
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
error opening file /defaultdir/EMP_LOAD_29305.log

правка 1
oracle имеет разрешения на чтение/запись в каталоге.

EDIT 2
Я смог получить эту ошибку, используя следующее определение внешней таблицы:

CREATE TABLE emp_load
    (employee_number      CHAR(3),
     employee_last_name   CHAR(20),
     employee_middle_name CHAR(15),
     employee_first_name  CHAR(15)
     )
  ORGANIZATION EXTERNAL
    (TYPE ORACLE_LOADER
     DEFAULT DIRECTORY defaultdir
     ACCESS PARAMETERS
       (RECORDS DELIMITED BY NEWLINE
        BADFILE DHHSMAPSIS:'EMP.BAD'
        LOGFILE DHHSMAPSIS:'EMP.LOG'
        FIELDS TERMINATED BY ','
       )
    LOCATION ('external_table_test2.dat')
)
REJECT LIMIT UNLIMITED;

мой .файл dat выглядит так...

056,baker,beth,mary
057,smith,teddy,john

мне пришлось установить разрешения на " EMP.ПЛОХО", " EMP.БРЕВНО" & "external_table_test2.dat " до 777, чтобы заставить его работать. Пользователь oracle не владеет этими файлами, но находится в той же группе, что и файлы.

любая идея, почему я не могу заставить это работать, когда я устанавливаю разрешения на эти файлы в 770? Опять же, oracle находится в той же группе, что и эти файлы, поэтому я решил, что 770 будет в порядке для разрешений...

5 ответов


Наша Версия Oracle работает на Red Hat Enterprise Linux. Мы экспериментировали с несколькими различными типами групповых разрешений безрезультатно. Каталог /defaultdir имел группу, которая была вторичной группой для пользователя oracle. Когда мы обновили каталог /defaultdir, чтобы иметь группу "oinstall" (основная группа oracle), я смог выбрать из внешних таблиц под этим каталогом без проблем.

Итак, для других, которые приходят и могут иметь это проблема, сделайте каталог основной группой oracle в качестве группы, и он может решить ее для вас, как и для нас. Мы смогли установить разрешения на 770 в каталоге и файлах, и выбор на внешних таблицах теперь работает нормально.


имейте в виду, что это пользователь, который запускает базу данных oracle, которая должна иметь разрешения на запись в каталог /defaultdir, а не пользователь, вошедший в oracle. Обычно вы запускаете базу данных как пользователь "Oracle". Это не тот же пользователь (обязательно), с которым вы создали внешнюю таблицу.

проверьте права доступа к каталогу.


мы столкнулись с той же проблемой:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error error opening file /fs01/app/rms01/external/logs/SH_EXT_TAB_VGAG_DELIV_SCHED.log

в нашем случае у нас был RAC с 2 узлами. После предоставления разрешения на запись в каталог журнала,С обеих сторон, все работало нормально.


У нас была эта ошибка в Oracle RAC 11g в Windows, и решением было создать одно и то же дерево каталогов ОС и внешний файл на обоих узлах.


Если вы хотите создать external_table, все имя поля должно быть записано в верхнем регистре.

сделано.