Estou tentando obter o DDL usando METADATA_DBMS.GET_DDL
para um objeto em um banco de dados e recebo o seguinte erro:
ORA-31603: object "MY_PACKAGE" of type PACKAGE not found in schema "S1"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA", line 3149
ORA-06512: at "SYS.DBMS_METADATA", line 4787
ORA-06512: at line 1
É assim que estou chamando o METADATA_DBMS.GET_DDL
:
SELECT DBMS_METADATA.GET_DDL (object_type, object_name, owner)
FROM dba_objects
WHERE OBJECT_ID = (select OBJECT_ID from dba_objects where object_name ='MY_PACKAGE' and object_type = 'PACKAGE' and owner = 'S1')
Escrevi com a subconsulta para garantir que o objeto existe no esquema S1. Tenho certeza de que S1.MY_PACKAGE
existe, posso até vê-lo no TOAD Schema Browser.
Eu tenho as seguintes funções concedidas:
select * from USER_ROLE_PRIVS
USERNAME GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE OS_GRANTED
MYUSER CONNECT NO YES NO
MYUSER DBA NO YES NO
MYUSER SELECT_CATALOG_ROLE NO YES NO
Eu tinha DBA Role
primeiro, e desde que estava jogando aquele erro, eu me concedi SELECT_CATALOG_ROLE
.
Verifiquei em outra instância de banco de dados onde a consulta funciona e tenho as mesmas funções, o que mais preciso para fazer DBMS_METADATA.GET_DDL
funcionar?
Ambos os bancos de dados são um clone do mesmo banco de dados de origem e, posteriormente, obtive os privilégios concedidos.
Parece que houve algum problema com o TOAD. Eu abri o TOAD depois que eles me concederam
DBA Role
, mas era como se não tivesse surtido efeito.Eu poderia consultar a
USER_ROLE_PRIVS
tabela e ver que tinha o role, euGRANT
mesmo poderia o SELECT_CATALOG_ROLE, mas quando chameiDBMS_METADATA.GET_DDL
não funcionou.Como abri o TOAD depois que o acesso foi concedido, não achei que esse fosse o problema. Por fim, como medida desesperada, tentei fechar tudo e abrir novamente e funcionou.
Eu ia excluir esta pergunta, mas acho que pode ser útil para outra pessoa no futuro.