我正在尝试为数据库中的对象获取DDL ,METADATA_DBMS.GET_DDL
但出现以下错误:
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
这就是我所说的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')
我用子查询编写它以确保对象存在于模式 S1 中。我确定S1.MY_PACKAGE
存在,我什至可以在 TOAD 模式浏览器中查看它。
我授予了以下角色:
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
我有DBA Role
第一个,因为它抛出了那个错误,所以我承认了自己SELECT_CATALOG_ROLE
。
我检查了查询工作的另一个数据库实例并且我具有相同的角色,我还需要做什么DBMS_METADATA.GET_DDL
工作?
两个数据库都是同一个源数据库的克隆,后来我获得了特权。
TOAD 似乎有一些问题。在他们授予我之后我打开了 TOAD
DBA Role
,但它就像它没有生效一样。我可以查询
USER_ROLE_PRIVS
表并查看我的角色,我可以GRANT
自己选择 SELECT_CATALOG_ROLE,但是当我调用DBMS_METADATA.GET_DDL
它时它不起作用。由于在授予访问权限后我打开了 TOAD,我认为这不是问题所在。最后,作为一种绝望的措施,我尝试关闭所有东西并再次打开它,它起作用了。
我打算删除这个问题,但我想它将来可能对其他人有用。