我需要将数据库对象从一个数据库复制到另一个数据库。 对于表格我可以通过
来完成CREATE TABLE TBL_USERS AS SELECT * FROM TBL_USERS@DBLINK;
将复制表结构和数据。
是否有类似的方法使用基础SQL代码和过程/包复制实体化视图?
提前致谢。
答案 0 :(得分:0)
对此的简短回答是:不,您不能通过PL / SQL复制PL / SQL过程,视图,触发器,表等。
可能会有一些技巧,但并非一切都会被复制。您在上面描述的是使用Database Link复制数据的简单DDL。它本身不是PL / SQL,它只复制表结构和数据集本身。不会复制约束,索引,触发器或任何安全属性(如授权)。 Oracle有多种方法可以跨多个数据库复制数据库对象,其中一种方法是Data Pump Export和Data Pump Import:
来源数据库" GV11202"
SQL> select directory_path from all_directories where directory_name = 'DATA_PUMP_DIR';
DIRECTORY_PATH
--------------------------------------------------------------------------------
/u01/app/oracle/admin/GV11202/dpdump/
bash$ expdp system/system@GV11202 DIRECTORY=DATA_PUMP_DIR DUMPFILE=export.dmp SCHEMAS=test
目标数据库" GVENZL"
SQL> select directory_path from all_directories where directory_name = 'DATA_PUMP_DIR';
DIRECTORY_PATH
--------------------------------------------------------------------------------
/u01/app/oracle/admin/GVENZL/dpdump/
bash$ cp /u01/app/oracle/admin/GV11202/dpdump/export.dmp /u01/app/oracle/admin/GVENZL/dpdump/
bash$ impdp system/system@GVENZL DIRECTORY=DATA_PUMP_DIR DUMPFILE=export.dmp
导入转储文件 - 由于转储文件中只有测试模式,我可以简单地导入模式及其所有对象。但是,如果导入到可能已存在表的现有架构中,请查看TABLE_EXISTS_ACTION