2017-04-26 64 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具有读/写权限