一、 我们为什么现在要用expdp/impdp命令,而不是使用exp/imp命令来备份/还原数据库?
- expdp/impdp命令,我们也通常称之为“数据泵(DataPump)”,它具有以下优点:
l 在性能上,具有并行处理能力,因此可以获得性能上的优势,加快导入导出速度。
l 在功能上,
——为数据及数据对象提供更细微级别的选择性
——可以设定数据库版本号(主要是用于兼容老版本的数据库系统)
——预估导出作业所需要的磁盘空间
——支持导入时重新映射功能(即将对象导入到新的目标数据文件,架构,表空间等)
——支持元数据压缩及数据采样
- 限制条件:
数据泵是服务端的实用程序,只能在数据库服务器上执行,不能在客户端执行。
- 如需详细了解,可参考网上文章:
http://www.oracledatabase12g.com ... A8%A1%E5%BC%8F.html
二、 准备过程(以下步骤在源数据库和目标数据库上均需要执行,第一次执行即可,以后不需要重复执行,如不确认是否已做相关设置,可直接执行第3步查看)
创建数据库物理存放路径,例如d:dbbak
(以下3步操作都是)创建逻辑目录,指向上面所建物理路径。dpdata1为我们定义的逻辑目录名。
SQL>create directory dpdata1 as 'd:dbbak';
验证上述步骤操作是否成功(注意:此处只是验证是否成功创建逻辑路径,并不会检查对应的物理路径是否真实有效)
SQL>select * from dba_directories;
以管理员身份赋予sbnetdba用户赋予在指定目录的操作权限,如果有多个用户,请对用户授权。
SQL>grant read,write on directory dpdata1 to sbnetdba;
三、 导出数据(注意下面命令不是在SQL下执行,而是直接在CMD命令行中执行)
l 按用户导数据,如果有多个用户,按每个用户分别执行备份。
expdp sbnetdba/passwd@netdb schemas=sbnetdba dumpfile=expdp.dmp DIRECTORY=dpdata1
——schemas:需要进行导出的用户身份
——dumpfile:导出的文件名
——导出完成后,会生产export.log日志文件,记录导出信息,如有疑问可用来分析。
四、 还原数据
l 先将备份数据拷贝至目标数据库对应路径下
l 指定用户导入。如果有多个用户,按每个用户分别执行导入。
——如果目标库为新建的空库,还没有数据表的时候,可采用下面语句直接导入 (注意红字部分的格式,只有一个实例时,不要写成sbnetdba/passwd@netdb):
impdp sbnetdba/passwd DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=sbnetdba
——如果目标数据库中已有表存在,我们只想覆盖原有数据,则需加入table_exists_action= REPLACE参数,否则数据不会被覆盖。具体命令如下:
impdp sbnetdba/passwd directory=dpdata1 dumpfile=EXPDP.DMP table_exists_action= REPLACE schemas=sbnetdba
——导出完成后,会生产import.log日志文件,记录导出信息,如有疑问可用来分析。
——使用remap_schema=mamdba:sbnetdba参数,前面是源SCHEMA 后面是导入目标schema,即把数据以mamdba schema导出,