如何测试目录Oracle的读/写文件系统权限?

时间:2012-03-21 14:30:38

标签: oracle permissions directory

假设你创建了一个目录:

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 个答案:

答案 0 :(得分:11)

您可以使用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;

答案 1 :(得分:0)

您(或管理员)必须在框中以oracle身份登录才能对其进行测试。

或者......只需以root身份登录并检查目录的权限。 oracle在我们商店的主要小组是“oinstall”。如果该目录不归oracle所有,则应将该目录的组设为oinstall。

我最近在获取有关外部表格的权限方面感到头疼,我在此详述:sqlplus error on select from external table: ORA-29913: error in executing ODCIEXTTABLEOPEN callout

相关问题