Erro no UTL_FILE - ORA-29283

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
brunomruiz
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Seg, 26 Out 2009 3:04 pm
Localização: Bebedouro - SP

Bom dia.

Preciso de um help de vocês, porque não sei o que fazer, rsrsrs.

O owner que está rodando o processo, tem acesso ao diretório \USR\TMP\ do banco. Porém eu criei e dei permissão para um novo diretório, segue código abaixo.

Selecionar tudo

CREATE OR REPLACE DIRECTORY CADASTROS AS '\USR\TMP\CADASTROS';

GRANT READ, WRITE ON DIRECTORY CADASTROS TO OWN_BRUIZ;

Selecionar tudo

DECLARE
          v_dir VARCHAR2(20) := 'CADASTROS';
          v_file UTL_FILE.FILE_TYPE;
          v_arq VARCHAR2(20) := 'FUNCIO.TXT';
          v_string VARCHAR2(32000);
BEGIN
     v_file := UTL_FILE.FOPEN_NCHAR(v_dir, v_arq, 'w',10000);
    -- inicio linha 1
    v_string := 'ABC';
    --v_string := LPAD('x', 1000, 'x');
    --UTL_FILE.PUT_NCHAR(v_file, v_string); -- parte 1
    --v_string := '0';
    UTL_FILE.PUT_LINE_NCHAR(v_file, v_string); -- parte 2
    UTL_FILE.FFLUSH(v_file);
    -- fim linha 1
UTL_FILE.FCLOSE(v_file);
END;
Ai ocorre o erro abaixo:

Selecionar tudo

ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 565
ORA-29283: invalid file operation
ORA-06512: at line 13
Perguntas:
1) Como eu faço para dar certo gravar no diretório \USR\TMP\ ? ( Levando em consideração que não vou criar o diretório para ela )
2) Preciso dar alguma permissão para usar esse objeto ( UTL_FILE ) ?
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá Bruno,

Uma descrição do erro, em primeiro lugar:
--------------------------------------------------------------------------------
29283. 00000 - "invalid file operation"
*Cause: An attempt was made to read from a file or directory that does
not exist, or file or directory access was denied by the
operating system.
*Action: Verify file and directory access privileges on the file system,
and if reading, verify that the file exists.
--------------------------------------------------------------------------------
Com base no erro acima, verifique o seguinte:

A) Os diretórios '\USR\TMP' e \USR\TMP\CADASTROS' já existem no seu servidor de banco de dados? Por motivos de segurança, o Oracle não tem como criar estas pastas para você. Caso não existam, peça para o administrador LINUX/UNIX criar elas para você, com as devidas permissões;

B) Se elas já existem, você está certo que o ORACLE tem permissão de gravação e leitura nelas ? O banco de dados ORACLE é executado por um usuário no LINUX/UNIX (ex: oracle) que pertence a um grupo de usuários (ex: dba). As pastas devem ter permissões adequadas para que este usuário ou grupo de usuário possam fazer operações neles;

C) Existe um parâmetro de banco chamado UTL_FILE_DIR, que indica os diretórios do sistema operacional do servidor de banco de dados usado para operações de leitura/gravação. Certifique-se que ambos os diretórios estejam registrados nesta variável.

Maiores informações sobre como consultar e atualizar o valor desta variável se encontram em : http://glufke.net/oracle/viewtopic.php? ... hlight=utl

Já a documentação do UTL_FILE pode ser encontrada aqui: http://docs.oracle.com/cd/B28359_01/app ... u_file.htm

Abraços e boa sorte,

Sergio Coutinho
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes