利用expdp/impdp数据泵对oracle进行数据迁移

按照惯例先报系统环境:

导出环境:

操作系统Release版本CentOS 6.5

OS内核Kernel版本:2.6.32-431.el6.x86.64

Oracle版本信息:

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0    Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

导入环境:

操作系统Release版本CentOS 6.4

OS内核Kernel版本:2.6.32-358.el6.x86_64

Oracle版本信息:

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0    Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

由上可见本次操作是操作系统平台几乎相同,相同平台数据库版本环境下进行

---------------------------------------------------分界线------------------------------------------------------------

下面讲下使用oracle在10g和11g版本推出的expdp/impdp数据泵进行数据的导入导出,下面与oracle相关的命令皆在用户oracle环境下执行:

(PS:expdp/impdp是服务端工具,只运行在数据库服务端,使其不受客户端版本的影响,其次其可解决一定的版本向前向后兼容问题,版本不兼容解决程度比exp/imp高,且expdp/impdp和exp/imp所导出数据不能混用,其余跟exp/imp异同和特性请猛击我

首先查看确认被导入库的oracle版本:

SQL> select * from v$version;

接着查看管理员目录,同时确认操作系统是否存在该目录,以备存放导出数据。因为创建目录时oracle不关心该目录是否存在,如果不存在,则出错(使用mkdir -p /xxx/xxx创建,使用chown -R oracle:oinstall /xxx/xxx更改目录从属为oracle避免权限问题):

SQL>select * from dba_directories;

出于用户权限控制和数据安全考虑等特殊场景考虑,可以新建一个逻辑目录(注意在系统相同位置创建该目录,下同),并对需要使用该目录的用户进行授权使用:

SQL>create directory dpdata1 as '/home/oracle/dumptest';

给用户XXX对该目录dpdata1(即/home/oracle/dumptest)进行读写授权,授权时最好使用具有DBA角色权限的用户进行授权,如system等。由于本次操作进行的是全库导入导出,使用oracle安装时自动创建的用户system,默认该用户角色为DBA数据库管理员,为最高权限,故不需要再对新建目录进行读写授权,下面给出对某个用户授权语句:

SQL>grant read,write on directory dpdata1 to xxx;

接下来使用system用户直接导出全库文件到/home/oracle/dumptest/下,system密码为oracle,导出文件为testfullexpdp.dmp,导出过程日志为testfullexpdp.log,此处@orcl意为连接的实例解析名是orcl,为本机的服务端的实例orcl,使用该命令前可先尝试使用“tnsping [实例名]”的方式测试该实例解析orcl是否生效。关于实例解析名请看$ORACLE_HOME/network/admin/tnsname.ora文件里面有解析名和实例名一一对应关系:

expdp system/oracle@orcl directory=dpdata1 dumpfile=testfullexpdp.dmp log=testfullexpdp.log full=y


导出完毕:

接 下来将导出目录dpdata1/home/oracle/dumptest下的导出文件testfullexpdp.dmp发送到导入目标库服务器上的管理目录里,假设导入库的管理目录也为dpdata1,即物理目录为/home/oracle/dumptest/,接下来导入数据,首先是确认目录存在和对应情况:

select * from dba_directories where directory_name='DPDATA1';


确认完毕,接下来执行导入:

impdp system/oracle DIRECTORY=dpdata1 DUMPFILE=testfullexpdp.dmp LOG=testfullimpdp.log FULL=y IGNORE=y;

如下图提示表已存在,由于本次操作是覆盖导入,故可以使用”IGNORE=y“选项忽略

 导入完成,有相当多的错误报告:


这是由于当前执行的是覆盖导入操作,大量表空间和数据,还有索引等等已经存在,所以提示数据重复错误,当然其中也夹杂了部分其他异常错误,可以根据ORA-xxxxx错误代码结合命令“oerr ora [错误代码]“逐步排查问题所在。

至此数据导入完毕,至于其他类型的数据导入方式,如按表导入,按表空间导入,按查询条件导入,按用户导入等等可以参考以下文章:

Oracle expdp/impdp导出导入命令及数据库备份(转)

使用version参数解决Oracle数据泵版本差异

expdp / impdp 用法详解

EXPDP/IMPDP工具的使用


  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值