ORA-06512: em SYS.UTL_FILE

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
paulaholti
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Sex, 29 Jan 2010 4:02 pm
Localização: sp
iniciante oracle pl/sql forms reports

To com problema para trazer uma carga de dados pelo pacote utl.
A linha que da erro é essa :

Selecionar tudo

 arq := utl_file.fopen('c:\teste','CARGA.SQL','R'); 
Mas o script compila direitinho e o erro que dá é : Invalid_ Path
(tenho a pasta \teste no c: ,com a arquivo carga.sql, conferido)

Acho que é problema no pacote UTL ou alguma configuracao para validar esse path.

Selecionar tudo

SQL> show parameters utl

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir                         string
Alguém sabe o que devo proceder ? (quem sabe recompilar)

OBRIGADA A TODOS !!!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Onde está esse C:\teste ? no servidor oracle ou na sua máquina?

* Se for na sua máquina, esquece, pois o UTL FILE funciona apenas no servidor.

* Se essa pasta está no servidor, dá uma olhada no parametro do oracle UTL_FILE_DIR

Leia esse tópico E os outros relacionados nessa pagina pra saber mais sobre esse parametro, como consultar, etc.
http://glufke.net/oracle/viewtopic.php?t=1783
paulaholti
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Sex, 29 Jan 2010 4:02 pm
Localização: sp
iniciante oracle pl/sql forms reports

A pasta está no servidor.

Tentei esse comando (do tópico), mas parece que não existe nenhuma pasta com permissao.

Selecionar tudo

  1*  SELECT * FROM V$PARAMETER WHERE name like 'utl%'
SQL> /

       NUM NAME
---------- ----------------------------------------------------------------
      TYPE
----------
VALUE
--------------------------------------------------------------------------------
ISDEFAULT ISSES ISSYS_MOD ISMODIFIED ISADJ
--------- ----- --------- ---------- -----
DESCRIPTION
----------------------------------------------------------------
UPDATE_COMMENT
--------------------------------------------------------------------------------
       443 utl_file_dir

       NUM NAME
---------- ----------------------------------------------------------------
      TYPE
----------
VALUE
--------------------------------------------------------------------------------
ISDEFAULT ISSES ISSYS_MOD ISMODIFIED ISADJ
--------- ----- --------- ---------- -----
Depois conectado como DBA, tentei dá permissoa para a pasta e não deu em nada (com base de um topico que achei no google)

Selecionar tudo

SQL> /
ALTER SYSTEM SET UTL_FILE_DIR=teste SCOPE=SPFILE
*
ERRO na linha 1:
ORA-32001: a gravação em SPFILE foi solicitada mas nenhum SPFILE foi
especificado na inicialização 
Como dou permissao para a pasta ? E a criei direto pelo explorer, será que tem que criar por um comando sql ? ..

O B R I G A D A A T O D O S ! ! !
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

faça aí,

altere o UTL_FILE_DIR, deve conter o seu diretorio, ou então pode colocar o valor do parametro como *, valendo para tudo, em ambiente de produção não colocaria,

depois crie um directory apontando para o seu diretorio:

Selecionar tudo

create or replace directory DIR_TESTE as 'C:\teste';
depois permissão (grant)

Selecionar tudo

GRANT Read, Write ON DIRECTORY DIR_TESTE TO USUARIO;
arq := utl_file.fopen('DIR_TESTE','CARGA.SQL','R');
paulaholti
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Sex, 29 Jan 2010 4:02 pm
Localização: sp
iniciante oracle pl/sql forms reports

Obrigada,

executei tudo como citado e criou o diretorio e permissao. Mas o erro do exception ainda insiste: path_invalid .

O diretorio agora existe.

Selecionar tudo

SQL> SELECT *
  2  FROM dba_directories;

OWNER                          DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
-----------------------------------------------------------------------------
SYS                            SERVIDOR_FOTOS
/oracle/bin

SYS                            DIR_TESTE
C:\teste   
E alterei o alias :

Selecionar tudo

arq := utl_file.fopen('DIR_TESTE','CARGA.SQL','R');
Mas não quer dá certo, to tentando ainda.

O B R I G A D A A T O D O S ! ! !
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Lá no servidor do banco de dados, existe o diretorio C:\Teste?

O Oracle não vai cria-lo, você deve cria-lo manualmente,

em principio parece ser isso, tem ele criado ai?
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Posta também o resultado da consulta:

Selecionar tudo

select * from v$version
paulaholti
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Sex, 29 Jan 2010 4:02 pm
Localização: sp
iniciante oracle pl/sql forms reports

Tem sim a pasta c:\teste,
uma pergunta boba, mas por um acaso essa pasta não tem que está dentro de alguma pasta do oracle ? (acho que não, mas vai saber).

o resultado do v$version

Selecionar tudo

SQL> select * from v$version 
  2  ;

BANNER
------------------------------------------------------
Oracle9i Release 9.0.1.1.1 - Production
PL/SQL Release 9.0.1.1.1 - Production
CORE    9.0.1.1.1       Production
TNS for 32-bit Windows: Version 9.0.1.1.0 - Production
NLSRTL Version 9.0.1.1.1 - Production
Obrigada!!!!
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Não, agora falta somente colocar no parametro utl_file_dir este diretorio,

Selecionar tudo

ALTER SYSTEM SET UTL_FILE_DIR='C:\Teste' scope=spfile;
Reinicia o banco, shutdown immediate e depois startup,

depois disso vai funcionar...

=]
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Olha só, como você usa o 9i, você tem que criar o init, ou então dependendo do seu banco banco, você deve ir até o init do banco já existente, init é o arquivo com os parametros de inicialização, lá dentro você vai por o UTL_FILE_DIR=C:\teste,

é possível que o scope spfile não funcione pra você, veja como alterar no 9i o parametro, com certeza após isso vai funcionar,
paulaholti
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Sex, 29 Jan 2010 4:02 pm
Localização: sp
iniciante oracle pl/sql forms reports

Deu o mesmo erro que havia tentado antes ..

Selecionar tudo

SQL> ALTER SYSTEM SET UTL_FILE_DIR='C:\Teste' scope=spfile;
ALTER SYSTEM SET UTL_FILE_DIR='C:\Teste' scope=spfile
*
ERRO na linha 1:
ORA-32001: a gravação em SPFILE foi solicitada mas nenhum SPFILE foi
especificado na inicialização
Executei esse comando:

Selecionar tudo

SQL> show parameter SPFILE;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string 
Mas não sei se confirma a existencia do spfile.

Pesquisei aqui e não achei nenhum SPFILE.ORA
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

http://www.oracle-base.com/articles/9i/ ... meters.php

você tem que criar um pfile, e alterar ele,

Selecionar tudo

create pfile from spfile;

create spfile from pfile;
no final você tem que achar o pfile criado, alterar o parametro dentro do arquivo pfile, que não tem esse nome necessariamente, e então subir o banco informando o arquivo pfile alterado,
paulaholti
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Sex, 29 Jan 2010 4:02 pm
Localização: sp
iniciante oracle pl/sql forms reports

Obrigada por todas as dicas, eu ainda não tentei criar *file para não acabar não alterando coisas que não deve. Mas fiz a mesma coisa com text.io e funcionou.

OBRIGADA + UMA VEZ
Responder
  • Informação
  • Quem está online

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