2017-04-26 79 views
-1

我想寫一個將DDL命令從某個模式寫入文件的SQL過程到服務器上的導演。我使用spool命令完成該操作並將其保存在本地,但每次運行時都需要在服務器上使用它。 我正在使用Oracle RDBMS。將DDL導出到服務器上

+0

有你'UTL_FILE'試過嗎? –

+0

你可以創建一個執行你的程序的shell腳本,然後將新創建的文件移動到你想要放置它的服務器上 – Sandeep

+0

你確定你沒有用'content = metadata_only'選項重新設計DataPump嗎? – APC

回答

0

DBMS_METADATA可以是你的朋友。使用其過程GET_DDL()可以爲您提供DDL腳本。您可以使用UTL_FILE將其寫入「Oracle DB目錄」(這是確切的Oracle對象)。

或者您可以使用外部腳本連接到數據庫,使用DBMS_METADATA爲您提供DDL。

在這些情況下,您需要與選擇USER_OBJECTS腳本它(或全部/ DBA對象)等

或者你也可以使用第三方工具,如如。 Oraschemadoc是。

0

這將導出當前模式中所有對象的ddl。

CREATE OR REPLACE PROCEDURE ddl_import 
    IS 
     file_ctl UTL_FILE.FILE_TYPE; 
     CURSOR object_cv IS 
     SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS; 
     code VARCHAR2(10000); 
    BEGIN 
     FOR cur in object_cv 
     LOOP 
      file_ctl:=UTL_FILE.FOPEN('ORADIR',cur.object_name||'.sql','W'); 
      code:=DBMS_METADATA.GET_DDL(CUR.OBJECT_TYPE,CUR.OBJECT_NAME,'ORATUT'); 
      UTL_FILE.PUTF(file_ctl,code); 
      UTL_FILE.FCLOSE(file_ctl); 
     END LOOP; 
    END ddl_import; 

但你編譯和執行之前此過程確保你做以下步驟事情。

STEP1:在主機(OS)環境中創建目錄,並將READ/WRITE授予給oracle用戶。

STEP2:執行CREATE OR REPLACE DIRECTORY ORADIR AS'D:/ dir_name'; dir_name是您在步驟1中創建的目錄的名稱。

第3步:請求您的DBA授予您對UTL_FILE的執行權限。或者,如果您擁有DBA的憑據,那麼請執行以下命令 - 授予UTL_FILE TO用戶名的EXECUTE執行權限; user_name當然是你。

0

1)以下描述如何爲模式提取ddl。 Extract whole schema

我們必須改變

-- add 
dest_clob clob; 
-- change 
    DBMS_OUTPUT.PUT_LINE (DDL); 
    to 
    DBMS_LOB.APPEND (dest_clob, DDL); 

DBMS_XSLPROCESSOR.CLOB2FILE(dest_clob,dest_directory, my_schema.sql) 

的dest_directory是Oracle Directory具有讀/寫權限

相關問題