数据导出导入-EXPDP和IMPDP

测试环境:Windows Server 2003 Enterprise Edition SP2

数据库环境:Oracle 10.2

在Oracle数据库中,除了前面几篇文章里的RMAN物理备份之外,还有导出的逻辑备份EXP和EXPDP。相对于传统的导出导入EXP和IMP工具,数据泵导出导入EXPDP和IMPDP在速度和效率上更快更高效。

数据泵的EXPDP导出模式包括导出表、导出模式、导出表空间、导出全库4种。在这里,需要注意的是EXPDP工具导出和RMAN的CATALOG模式一样,备份只能存放在DIRECTORY对象对应的操作系统目录里,不能直接指定存储路径的目录里。因此,我们在使用EXPDP工具之前,需要先建立DIRECTORY对象,并给使用该对象的数据库用户授权。

下面,我们做几个实机操作。

源库导出:

在进行导出导入之前,我们先来看看源数据库的导出导入对象是否已建立,代码和运行结果如下。

SQL>SELECT * FROM DBA_DIRECTORIES;

从结果看出,我们的源数据库已经创建4个对象,为了方便小伙伴们更了解导出导入对象的创建,我们再来演示一下。

一、我们先在服务器的命令提示符窗口执行以下语句:

C:\>connect system/passwordas sysdba;

SQL>create or replace directory dump_dir as 'e:\rmdatabase';

SQL>grant read,write on directory dump_dir to system;

下面,我们就可以进行数据导出了,这里,只演示导出表和导出全数据库,至于导出模式和导出表空间,语法大同小异,小伙伴们可以在自己的测试库里做测试。

二、导出表

导出表是指将一张或多张表的结构及数据存储到转储文件里。一般来说普通用户只能导出自身模式的表,如果要导出其他用户的表,则必须要求具有DBA或EXP_FULL_DATABASE角色,如上授权的SYSYDBA用户,如果要导出我们HIS数据实例里的表,则需要在表前加入该表的用户名。

我们先来导出一张HIS数据库COMM用户的USERS表,代码和运行结果如下。

C:\>expdp system/******* directory=dump_dir dumpfile=users.dmp tables=comm.users logfile=users.log

我们来看看导出的备份是否存储在对象对应的操作系统文件目录里。

如果我们不给出该表的用户名,在导出时会出现下图的错误。

三、导出全数据库

导出全数据库是指将数据库中的所有对象及其数据存储到转储文件里,同样,导出数据库要求具有DBA或EXP_FULL_DATABASE角色。在这里,我们需要注意的是,全库导出并不导出如下模式中的对象:SYS/ORDSYS/ORDPLUGINS/CTXSYS/MDSYS/LBACSYS/XDB

导出全数据库,代码和结果如下。

C:\>expdp system/******* directory=dump_dir dumpfile=full.dmp full=y logfile=full.log

新库导入

如果是在新服务器里导入,与源库一样必须建立存储对象。在导入数据时,必须注意导入目录所在的磁盘空间是否充足,因为导入数据时会释放大量的数据文件占用磁盘空间。如果空间不足,会导致需要释放出来的文件无存储空间而造成导入失败。

一、指定导入某张表,同样需要在表前加上所属用户名,如果是原库导入数据,请使用TRUNCATE TABLE语句删除源库的表,执行完后COMMIT一下就行了。如果你不确定备份是否有效,可以为该表创建个备份表,语法是:

SQL>CREAGE TABLE TABLE_NAME_BAK AS SELECT * FORM TABLE_NAME WHERE 1=1;

现在,我们使用前面导出的USERS表备份做测试,先删除该表,再进行恢复。

SQL>truncata table comm.users;

SQL>commit;

C:\>impdp system/******* directory=dump_dir dumpfile=users.dmp tables=comm.users table_exists_action=replace logfile=full.log

查看一下,数据是否已经恢复。

OK...

二、全库导入

这个就不多讲。

C:\>impdp system/****** directory=dump_dir dumpfile=full.dmp full=y table_exists_action=replace logfile=full.log

【彩蛋】

在ORACLE数据库中,我们经常会遇到数据在不同版中迁移的问题,如 10G和11G的互相导出导入。我们来简单说一下从高版本11G迁移至低版本10G操作。

首先在11G服务器上,使用EXPDP命令备份数据,要求指定导出的低版本号。

C:\>EXPDP USERID='SYSTEM/*******@ORCL AS SYSDBA'SCHEMAS=COMMDIRECTORY=DUMP_DIR DUMPFILE=COMM.DMP LOGFILE=EXPDP.LOGVERSION=10.2.0.1.0

在10G服务器上,使用IMPDP命令恢复数据,需要做的准备工作:1、建库,2、建表空间,3、建用户并授权,4、将FULL.DMP拷贝到10G服务器的DUMP_DIR目录下。

C:\>IMPDP USERID='SYSTEM/******@ORCL AS SYSDBA'SCHEMAS=COMMDIRECTORY=DUMP_DIR DUMPFILE=COMM.DMP LOGFIE=IMPDP.LOG VERSION=10.2.0.1.0

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180611G20EGW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券