我想从数据库导出所有数据,例如用户拥有所有者权限的函数,过程,视图和触发器。我知道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;
答案 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数据库的导出和导入实用程序。