2012-03-21 1 views
1

Я хотел создать внешнюю таблицу, но не имел разрешения CREATE ANY DIRECTORY (и не мог предоставить ее). Справедливо, я попросил АБД выполнить следующие действия:Внешняя таблица Oracle с каталогом dba

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: данные об ошибке картриджа
КУП-04040: файл the_external_file.txt в EXT_DATA_FILES не найдено
ORA-06512: на "SYS.ORACLE_LOADER", строка 19

(который имеет довольно много хитов на Google, но ни один не кажется связаны)

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

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

Возможно, стоит упомянуть, это Oracle 10g, о котором мы говорим.

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

+0

1. Почему в системах? Не могли ли DBA создать его в правильной схеме? 2. Вы действительно существуете в каталоге? – Ben

+1

действительно ли файл txt существует? – Randy

+0

Ну, этот каталог должен использоваться более чем одной схемой .. Я думал, что это имело смысл быть в SYS или где-то общее для всех пользователей. Что касается файлов, да, он существует, и, как я упоминаю, «были проверены разрешения всех файлов и каталогов». :/ – filippo

ответ

1

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

Итак, попробуйте выполнить команду без префикса имени каталога с помощью схемы SYS и посмотреть, что произойдет.

+0

Тот же результат без SYS .. На самом деле это был оригинальный скрипт. Я добавил SYS, чтобы сделать это явным в вопросе. Приятно это знать. Ошибка должна быть в другом месте. – filippo

+0

Просто нашел что-то интересное: В моем dev env. если я делаю 'desc EXT_DATA_FILES', он показывает описание объекта. Теперь, в prod env. если я сделаю то же 'desc EXT_DATA_FILES', он не будет работать, однако он покажет описание, если я добавлю SYS. к нему, например. 'desc SYS.EXT_DATA_FILES'. Будет ли это ключом? @VincentMalgrat это также будет иметь смысл для вас? благодаря! – filippo

0

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

Вы уверены, что это там?

+0

положительные. :(Он также имеет правильные разрешения. – filippo