https://www.cnblogs.com/andy6/p/8029334.html
如果如下方式獲取建表語句報錯,是用戶權限的問題,使用SYSDBA賬戶登錄即可。
-- 獲取ddl ##('TABLE','表名','用戶名')
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','CBZS_DMCODE_DEP_TYPE','MOBILE_CBZS') FROM DUAL;
1、一次想查詢表附加日志:
dbms_metadata.get_ddl('TABLE','表名','用戶名') from dual;
2、報錯如下:
ora-31603:對象“表名”屬於類型 Table,在方案“用戶名”中未找到
3、原因:
用戶缺少相關數據字典視圖的查詢權限。
4、解決辦法:
grant select_catalog_role to 用戶名.表名;
注:授權select any dictionary權限則報錯依舊。
5、總結:
select any dictionary 與 select_catalog_role
相同之處:有了這兩個中的一個,基本就可以查詢數據字典
不同之處:
1) select any dictionary是一種系統權限(system privilege),而select_catalog_role 是一種角色(a role)。
2) 角色的話需要重新登錄或者顯式的set role 來生效,而賦予系統權限是立即生效的。(P.S. 同樣revoke權限也 是立即生效)
3) select_catalog_role可以查看一些數據字典的視圖·(可以看role的定義),如dba_之類的,而select any
dictionary 可以查看sys的表,select_catalog_role看不到。