Не удается прочитать внешнюю таблицу или прочитать с помощью utl_file.get_line в Windows 10 с Oracle 18c

#oracle #external-tables

#Oracle #внешние таблицы

Вопрос:

Я только что обновился до Oracle 18c XE с 11g. У меня есть внешняя таблица, которая отлично работала на 11g, но я продолжаю получать следующие ошибки на 18c.

 ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-11604: no directory object specified for log file
 

Каталог существует, и у меня есть правильные разрешения.

 SELECT *
FROM   all_directories
WHERE  directory_name = 'MYDIR';

OWNER  DIRECTORY_NAME  DIRECTORY_PATH  ORIGIN_CON_ID
SYS  MYDIR  C:UserssneufOneDrivePLSQLOracleDirectory  1
 

У меня есть необходимые привилегии.

 SELECT * 
FROM all_tab_privs 
WHERE table_name = 'MYDIR' 
AND grantee = 'C##_SNEUF'; 
GRANTOR GRANTEE TABLE_SCHEMA TABLE_NAME PRIVILEGE GRANTABLE HIERARCHY COMMON TYPE INHERITED 
SYS     C##_SNEUF    SYS         MYDIR    EXECUTE      YES     NO       NO   DIRECTORY NO 
SYS     C##_SNEUF    SYS         MYDIR    READ         YES     NO       NO   DIRECTORY NO 
SYS     C##_SNEUF    SYS         MYDIR    WRITE        YES     NO       NO   DIRECTORY NO
 

Я почти уверен, что мне где-то не хватает гранта, но я не могу понять, что. Может кто-нибудь, пожалуйста, помогите?

Вот моя таблица:

 CREATE TABLE C##_SNEUF.CHECKING_TBL_EXT2 
   (  
  DB_KEY NUMBER, 
  CHECK_NUM VARCHAR2(10), 
  TRANS_DATE TIMESTAMP (6), 
  DESCRIPTION VARCHAR2(100), 
  DEPOSIT_WITHDRAWAL VARCHAR2(1), 
  AMOUNT VARCHAR2(12), 
  MEMO VARCHAR2(200)
   ) 
   ORGANIZATION EXTERNAL 
    ( TYPE ORACLE_LOADER
      DEFAULT DIRECTORY MYDIR
      ACCESS PARAMETERS
      ( RECORDS DELIMITED BY NEWLINE
    BADFILE MYDIR: 'checking.bad'
    FIELDS TERMINATED BY ","
    OPTIONALLY ENCLOSED BY '"'
    LDRTRIM
    MISSING FIELD VALUES ARE NULL
(
  DB_key CHAR,
  check_num CHAR(10),
  trans_date CHAR(21) DATE_FORMAT DATE MASK 'MM/DD/YYYY HH24:MI:SS',
  description CHAR(100),
  deposit_withdrawal CHAR(1),
  amount CHAR(12),
  memo CHAR(200)
            )
                     )
      LOCATION
       ( MYDIR: 'checking.csv'
       )
    )
   REJECT LIMIT UNLIMITED ;
 

Спасибо,
Стив

Комментарии:

1. » для файла журнала не указан объект каталога». Итак, как выглядит ТАБЛИЦА CREATE (external)? Есть какая-нибудь зацепка?

2. Файл журнала не указан, поэтому — по умолчанию — он находится в том же каталоге, что и файл данных. Однако при записи в файл журнала вам требуются права на запись в каталог MYDIR. Опубликованная вами информация предполагает, что у вас есть только права на чтение, поэтому попробуйте также разрешить ЗАПИСЬ.

3. Обратите внимание, что у вас будет та же проблема с поврежденным файлом — по умолчанию будет использоваться MYDIR, поэтому, если вы отклонили строку, вам также потребуется доступ на запись в каталог.

4. У меня есть необходимые мне привилегии. Выполнение, чтение и запись.

5. @Littlefoot — Вы собираетесь добавить это в качестве ответа?

Ответ №1:

Файл журнала не указан, поэтому по умолчанию он находится в том же каталоге, что и файл данных.

Однако при записи в файл журнала вам требуются права на запись в каталоге MYDIR. Опубликованная вами информация предполагает, что у вас есть только права на ЧТЕНИЕ, поэтому разрешите также ЗАПИСЬ.