Как проверить права на чтение / запись файловой системы каталога Oracle? - PullRequest
2 голосов
/ 21 марта 2012

Допустим, вы создаете каталог, например:

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

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

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

Ответы [ 2 ]

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

Вы можете использовать пакет UTL_FILE. Например, это проверит, что вы можете создать в каталоге новый файл с именем some_new_file_name.txt и записать в него данные

DECLARE
  l_file utl_file.file_type;
BEGIN
  l_file := utl_file.fopen( 'EXT_DATA_FILES', 'some_new_file_name.txt', 'W' );
  utl_file.put_line( l_file, 'Here is some text' );
  utl_file.fclose( l_file );
END;

Это проверит, что файл с именем existing_file_name.txt существует и доступен для чтения

DECLARE
  l_exists     boolean;
  l_size       integer;
  l_block_size integer;
BEGIN
  utl_file.fgetattr( 'EXT_DATA_FILES', 
                     'existing_file_name.txt', 
                     l_exists, 
                     l_size, 
                     l_block_size );
   if( l_exists )
   then
     dbms_output.put_line( 'The file exists and has a size of ' || l_size );
   else
     dbms_output.put_line( 'The file does not exist or is not visible to Oracle' );
   end if;
END;
0 голосов
/ 21 марта 2012

Вы (или администратор) должны будете войти в систему как оракул на коробке, чтобы проверить это.

Или ... просто войдите в систему как root и проверьте права доступа к каталогу. Основная группа оракулов в нашем магазине - "oinstall". Если каталог не принадлежит oracle, вы должны сделать группу каталога oinstall.

У меня недавно была головная боль при получении прав доступа к внешним таблицам, которые я подробно описал здесь: Ошибка sqlplus при выборе из внешней таблицы: ORA-29913: ошибка при выполнении вызова ODCIEXTTABLEOPEN

...