ORACLE獲取建表SQL


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看不到。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM