Oracle通过数据泵(expdp/impdp)+dblink复制数据库

需求背景

为什么要用数据泵+dblink,是因为本来想直接用数据泵的方式先导出再导入数据库,奈何数据库服务器只剩下1个G的内存了,而数据文件是70个G,查阅很多资料后发现可以用数据泵+dblink的方式指定导出文件位置或指定导入文件位置,很好的解决了空间不足无法导出的问题。
以上过程都在linux服务器上操作

一:首先要做的是在目标端数据库建立用户,表空间,赋权限等操作

 1.1 目标端数据库建立表空间
 CREATE TABLESPACE tablespace_name DATAFILE 'D:\tablespace\tablespace.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K; 
 
 1.2 目标端数据库建立用户
 create user user_name identified by "passwd" default tablespace tablespace_name;

 1.3 目标端建立和源端数据库dblink
 create public database link dblink_name connect to system identified by passwd using 'ip:port/orcl'; 
 这里的system是目标端数据库用户名 passwd是目标端数据库账号 
 ip/port/orcl 是源端数据库ip/端口/数据库实例
 
 1.4  创建导出文件目录
 CREATE OR REPLACE DIRECTORY export_file AS 'u01\dump.dmp';
 
 1.5 赋权限给新建用户
 grant read,write on directory export_file to user_name;

二:在目标端数据库进行数据导入导出操作

impdp system/passwd network_link=dblink_name schemas=user_name EXCLUDE=statistics cluster=N job_name=SYS_IMPORT_ILA_SAP parallel=20
其中system、passwd是目标端信息 dblink_name是上文建立的通向源端 schemas是用户名 因为我这里的需求是复制整个用户,其他的都是正常参数,可自行调整。通过impdp+dblink可以省略expdp导出的步骤。

expdp username/password DIRECTORY=expdp_file NETWORK_LINK=dblink_name  DUMPFILE=net_export.dmp

三:检查数据总量

检查数据库表总量这里不要用user_tables,与实际值会有差异,所以写个游标循环打印出表对应总量,在源端数据库和目标端数据库中SQL窗口运行之后,在output窗口查看结果比对一下就可以了。

declare 
  s varchar2(500);
  name2 varchar2(500);
  --cursor  声明 光标
  cursor cur_emp is select table_name from user_tables;
begin 
   for  i in cur_emp loop
        name2 := 'select count(*) from '||i.table_name;
        execute immediate name2 into s;
   if (s>=0) then
        dbms_output.put_line(i.table_name||':'||s);         
   end if;
        
   end loop;  
end;

导入的时候有可能会遇到
job stopped due to fatal error
job遇到致命性错误
这里需要在
导入语句中将参数 exclude改为 exclude=PROCACT_INSTANCE
这是一个Oracle的bug

当表里有数据时 impdp的TABLE_EXISTS_ACTION这个参数给了我们几个选择
SKIP:跳过已经存在的表,继续导入下一个对象,如果CONTENT设置了DATA_ONLY参数,则不能使用SKIP
APPEND:不会影响已存在的数据,在原有数据表的基础上继续增加数据
REPLACE:先删除掉表,然后创建表,最后完成数据插入
TRUNCATE:删除已存在的行,然后插入所有的数据


版权声明:本文为qq_38333578原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。