导出数据库的PL / SQL脚本

时间:2016-04-26 20:40:19

标签: oracle plsql oracle-sqldeveloper

我想从数据库导出所有数据,例如用户拥有所有者权限的函数,过程,视图和触发器。我知道SQL Developer可以选择在sql文件中导出数据库,但我想从代码中执行此操作。当我运行代码时,我想创建一个扩展名为.sql的文件,该文件必须包含数据库中的所有数据。首先,我想知道这是否可能,如果是的话,有人可以告诉我这样做的一些提示吗? 我开始制作一个文件:

CREATE DIRECTORY test_dir AS 'H:\';

DECLARE
   out_File  UTL_FILE.FILE_TYPE;
BEGIN
  out_File := UTL_FILE.FOPEN('test_dir', 'test.sql' , 'W');
  UTL_FILE.PUT_LINE(out_file , 'here will be the database export');
  UTL_FILE.FCLOSE(out_file);
END;

3 个答案:

答案 0 :(得分:0)

Oracle导出/导入实用程序将使用二进制文件格式以用户模式导出/导入数据库对象(使用OWNER参数)

http://docs.oracle.com/cd/B28359_01/server.111/b28319/exp_imp.htm

但是,如果要将对象和数据的元数据导出到sql文件中,可以查询Oracle的目录用户视图,例如user_objects - >对于用户的数据库对象user_tables - > tables,user_constraints - >约束(甚至user_source来获取编译对象的文本)。如果您打算将.sql文件重新创建对象和数据,那么您将面临繁重的工作,特别是如果您希望脚本可移植。在那种情况下,我会看第三方工具。

答案 1 :(得分:0)

我想这应该是你正在寻找的答案。希望能帮助到你。这只是您要问的一个例子。其他类型也可以根据需要加入。

spool on;
spool <target path>/filename;

SET SERVEROUTPUT ON SIZE UNLIMITED;
BEGIN
  FOR I IN
  (SELECT al.*
  FROM ALL_SOURCE al
  WHERE OWNER = 'AVROY'
  ORDER BY name,
    line
  )
  LOOP
    dbms_output.put_line(I.TEXT);
  END LOOP;
  FOR I IN
  (SELECT * FROM ALL_TABLES WHERE OWNER = 'AVROY'
  )
  LOOP
    BEGIN
      dbms_output.put_line(dbms_metadata.get_ddl('TABLE',i.table_name,'AVROY'));
    EXCEPTION
    WHEN OTHERS THEN
      NULL;
    END;
  END LOOP;
END;

SPOOL OFF;

答案 2 :(得分:-1)

您可能希望使用Oracle数据库的导出和导入实用程序。

http://www.oracle-dba-online.com/export_and_import.htm