Ошибка sqlplus при выборе из внешней таблицы: ORA-29913: ошибка при выполнении вызова ODCIEXTTABLEOPEN - PullRequest
7 голосов
/ 30 января 2012

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

Нижеследующее основано на концепциях внешних таблиц Oracle . База данных, которую мы используем, составляет 11 г.

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

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 имеет разрешения на чтение / запись для каталога.

РЕДАКТИРОВАТЬ 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.BAD", "EMP.LOG" и "external_table_test2.dat" на 777, чтобы заставить его работать. Пользователь oracle не владеет этими файлами, но находится в той же группе, что и файлы.

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

Ответы [ 5 ]

4 голосов
/ 10 февраля 2012

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

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

1 голос
/ 07 марта 2012

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

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 узлами.После предоставления разрешения на запись в каталог журналов, с обеих сторон , все работало нормально.

1 голос
/ 30 января 2012

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

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

0 голосов
/ 08 декабря 2014

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

0 голосов
/ 03 сентября 2014

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

Готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...