標籤:
--(‘TABLE‘,‘LINE‘,‘ODS_XX‘)這裡面的表和使用者都需要大寫。
如果表名使用者名稱不大寫會報這個錯誤:對象 "emp" 屬於類型 TABLE, 在方案 "scott" 中未找到
親測的代碼:
set long 90000;
set linesize 4000;
set pagesize 4000;
spool table.sql
select dbms_metadata.get_ddl(‘TABLE‘,‘LINE‘,‘ODS_XX‘) from dual;
spool off
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看不到。
關於匯出oracle多個表的建表語句DLL,產生.sql語句。