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:删除已存在的行,然后插入所有的数据

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Oracle数据库提供了expdpimpdp命令用于备份和恢复数据库。这两个命令的使用方式如下: 1. expdp命令 expdp命令用于备份Oracle数据库,它能够将某个schema或整个数据库导出到一个二进制文件中。具体命令格式如下: ``` expdp username/password@connect_string DIRECTORY=directory_name DUMPFILE=dumpfile_name.dmp SCHEMAS=schema_name ``` 其中: - `username/password@connect_string`:指定连接Oracle数据库的用户名、密码和连接字符串。 - `DIRECTORY=directory_name`:指定备份文件的目录。 - `DUMPFILE=dumpfile_name.dmp`:指定备份文件的名称。 - `SCHEMAS=schema_name`:指定要备份的schema名称,多个schema可以用逗号分隔。 执行命令后,Oracle数据库会将指定的schema或整个数据库导出到一个二进制文件中。 2. impdp命令 impdp命令用于恢复Oracle数据库,它能够将之前导出的二进制文件导入到数据库中。具体命令格式如下: ``` impdp username/password@connect_string DIRECTORY=directory_name DUMPFILE=dumpfile_name.dmp SCHEMAS=schema_name ``` 其中: - `username/password@connect_string`:指定连接Oracle数据库的用户名、密码和连接字符串。 - `DIRECTORY=directory_name`:指定备份文件所在的目录。 - `DUMPFILE=dumpfile_name.dmp`:指定备份文件的名称。 - `SCHEMAS=schema_name`:指定要恢复的schema名称,多个schema可以用逗号分隔。 执行命令后,Oracle数据库会将指定的schema或整个数据库从备份文件中恢复出来。 需要注意的是,expdpimpdp命令需要在Oracle数据库服务器上执行,而不是在客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值