Внешняя таблица Oracle с каталогом dba - PullRequest
1 голос
/ 21 марта 2012

Я хотел создать внешнюю таблицу, но не имел разрешения CREATE ANY DIRECTORY (и не смог получить его). Справедливо, я попросил администраторов баз выполнить следующее:

CREATE OR REPLACE DIRECTORY ext_data_files AS '/data/ext_data_files';
GRANT ALL ON DIRECTORY ext_data_files TO MYAPPUSER;

Они сделали, и конечный объект имеет следующий сценарий:

CREATE OR REPLACE DIRECTORY 
EXT_DATA_FILES AS 
'/data/ext_data_files';
GRANT READ, WRITE ON DIRECTORY SYS.EXT_DATA_FILES TO MYAPPUSER;

(я получил это от вопроса desc с жабой)

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

CREATE TABLE MYAPPUSER.MY_EXT_TABLE
(
  ID                VARCHAR2(100 BYTE),
  LOGIN             VARCHAR2(100 BYTE),
  CODE              VARCHAR2(100 BYTE),
  CREATED_AT        VARCHAR2(100 BYTE)
)
ORGANIZATION EXTERNAL
  (  TYPE ORACLE_LOADER
     DEFAULT DIRECTORY SYS.EXT_DATA_FILES
     ACCESS PARAMETERS 
       ( RECORDS DELIMITED BY NEWLINE
    NOBADFILE
    NOLOGFILE
    FIELDS TERMINATED BY ';'
    MISSING FIELD VALUES ARE NULL
    ( ID, LOGIN, CODE, CREATED_AT) )
     LOCATION (SYS.EXT_DATA_FILES:'the_external_file.txt')
  )
REJECT LIMIT 0
PARALLEL ( DEGREE DEFAULT INSTANCES DEFAULT )
NOMONITORING;

но тогда, когда я SELECT * FROM MY_EXT_TABLE, результатом будет печально известный

ORA-29913: ошибка при выполнении вызова ODCIEXTTABLEOPEN
ORA-29400: ошибка картриджа данных
KUP-04040: файл the_external_file.txt в файле EXT_DATA_FILES не найден
ORA-06512: в "SYS.ORACLE_LOADER", строка 19

(в Google довольно много хитов, но ни один из них не похож)

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

Единственное отличие, которое я имею здесь от DEV (где он работает), заключается в том, что каталог EXT_DATA_FILES не был создан MYAPPUSER. Я пытался создать для него синоним ... но безрезультатно.

Возможно, стоит упомянуть, что речь идет об Oracle 10g.

Я что-то упускаю из виду? Это разрешено?

Ответы [ 2 ]

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

Все каталоги фактически принадлежат SYS. Вот почему нет привилегии CREATE DIRECTORY, только CREATE ANY DIRECTORY.

Попробуйте команду без префикса имени каталога со схемой SYS и посмотрите, что получится.

0 голосов
/ 21 марта 2012

Сообщение об ошибке гласит: «файл the_external_file.txt в файле EXT_DATA_FILES не найден»

Вы уверены, что он есть?

...