使用exp&imp工具进行数据库备份及恢复
1、exp/imp使用方法介绍
exp/imp为一种数据库备份恢复工具,也可以作为不同数据库之间传递数据的工具,两个数据库所在的操作系统可以不同。exp可以将数据库数据导出为二进制文件,imp可以将导出的数据文件再导入到相同的数据库或不同的数据库。
数据库导出有四种模式:full(全库导出)、owner(用户导出)、table(表导出)、tablespace(表空间导出)。
full(全库导出):导出除ORDSYS、MDSYS、CTXSYS、ORDPLUGINS、LBACSYS这些系统用户之外的所有用户的数据。
owner(用户导出):导出某个或某些用户的所有权限和数据。
tables(表导出):导出某些表(可以是不同用户的)的结构和数据。
tablespace(表空间导出):表空间导出数据。
执行exp有三种方法,交互式、命令行和参数文件,
交互式:直接输入exp命令,用户可以按照exp提示的信息一步一步操作,比较简单。
命令行:输入命令行exp username/password parameter=value。
参数文件:输入命令行exp username/password parfile=filename,exp所需的参数从参数文件引入。
参数是可以重复的,优先级为命令行优于参数文件,后面的参数值覆盖于前面的参数值。
下面介绍一些常用的参数,没有标明的,表示exp/imp都适用,imp的参数不再单独介绍。
参数介绍
buffer:缓冲区大小,如果此值设为0,则一次只导入一条记录。对数据量大的导出可以设置较大,一般缺省值即可。
file:导出的文件列表,可以指定一个或多个文件名,缺省扩展名为.dmp,缺省导出文件名为expdat.dmp。
filesize(exp):导出文件的最大字节数,超出时,从文件列表中获取下一个文件名,没有,则提示输入新的文件名。
help:显示export参数帮助信息。
inctype:增量备份的类型,complete(完全)、cumulative(累积)和incremental(增量)。只可以在全库导出模式下才可以做完全、累积或增量导出。累积导出只导出自上次累积导出或完全导出以来已经修改的表;增量导出只导出自上次增量、累积或完全导出以来已经修改的表;完全导出将数据库中全部对象都导出,不管是否以及何时被修改。
log:日志文件,一般如果以命令行导入时,将log设置上比较好,可以看到所有的导入信息,哪儿出错,导入了那些数据库对象。
show(imp):只是用来显示备份数据文件的内容,
full:为Y时表示在全库方式下导出,缺省为N。
tables:导出的表列表,可以指定一个或多个表名。
fromuser(imp):可以将导出文件中的一个用户模式的数据对象导入为另一个用户模式的对象, 此参数表示导出文件中的用户模式。
touser(imp):此参数表示导入到数据库中时使用的用户模式对象。譬如,使用全库或者用户模式导出cams用户的所有对象到一个文件中,导入时,需要将用户模式名称改为cams1,此时,fromuser为cams,touser为cams1。
2、 exp常见用法及使用案例
2.1 交互式-用户导出
交互式导出比较简单,这里只举用户导出一种用法进行说明,全库导出和表导出比较简单,不再列出。
1、使用简单命令exp命令导出数据 C:\Users\Administrator>exp Export: Release 11.2.0.1.0 - Production on 星期六 10月 4 15:17:38 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 用户名: scott 口令: 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 输入数组提取缓冲区大小: 4096 > //交互式导出时大多数参数都有缺省值,如果选用缺省值,直接回车即可 导出文件: EXPDAT.DMP > scott20141004.dmp //可使用默认名字EXPDAT.DMP (2)U(用户), 或 (3)T(表): (2)U > 导出权限 (yes/no): yes > 导出表数据 (yes/no): yes > 压缩区 (yes/no): yes > 已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 . 正在导出 pre-schema 过程对象和操作 . 正在导出用户 SCOTT 的外部函数库名 . 导出 PUBLIC 类型同义词 . 正在导出专用类型同义词 . 正在导出用户 SCOTT 的对象类型定义 即将导出 SCOTT 的对象... . 正在导出数据库链接 . 正在导出序号 . 正在导出簇定义 . 即将导出 SCOTT 的表通过常规路径... . . 正在导出表 DEPT导出了 4 行 . . 正在导出表 EMP导出了 14 行 . . 正在导出表 EMP2导出了 14 行 . . 正在导出表 EMP_TEST导出了 14 行 . . 正在导出表 SALGRADE导出了 5 行 . 正在导出同义词 . 正在导出视图 . 正在导出存储过程 . 正在导出运算符 . 正在导出引用完整性约束条件 . 正在导出触发器 . 正在导出索引类型 . 正在导出位图, 功能性索引和可扩展索引 . 正在导出后期表活动 . 正在导出实体化视图 . 正在导出快照日志 . 正在导出作业队列 . 正在导出刷新组和子组 . 正在导出维 . 正在导出 post-schema 过程对象和操作 . 正在导出统计信息 成功终止导出, 没有出现警告。 ====================================== 说明:(1) 在交互式导出或导入时,如果输错值,不再想进行下面的步骤,但不知如何退出,此时请用“.”,回车即退出。
2.2 命令行-全库导出
exp userid=scott/[email protected] full=y file=(d:\backup\2014100401.dmp, d:\backup\2014100402.dmp) filesize=2GB log=d:\backup\20141004.log
该命令导出全库数据,导出到多个文件中,每个文件最大2GB,exp只生成最少的导出文件,譬如导出的数据不足2GB,exp只生成d:\backup\2014100401.dmp,如果file列表中的文件太少,不能存放所有的导出数据,exp会提示用户输入文件名,导出过程记录日志。
C:\Users\Administrator>exp userid=scott/tiger@orcl full=y file=(d:\backup\2014100401.dmp, d:\backup\2014100402.dmp) filesize=2GB log=d:\backup\20141004.log Export: Release 11.2.0.1.0 - Production on 星期六 10月 4 15:41:21 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 即将导出整个数据库... . 正在导出表空间定义 . 正在导出概要文件 . 正在导出用户定义 . 正在导出角色 . 正在导出资源成本 . 正在导出回退段定义 . 正在导出数据库链接 . 正在导出序号 . 正在导出目录别名 . 正在导出上下文名称空间 . 正在导出外部函数库名 . 导出 PUBLIC 类型同义词 . 正在导出专用类型同义词 . 正在导出对象类型定义 . 正在导出系统过程对象和操作 . 正在导出 pre-schema 过程对象和操作 . 正在导出簇定义 . 即将导出 SYSTEM 的表通过常规路径... . . 正在导出表 DEF$_AQCALL EXP-00008: 遇到 ORACLE 错误 6550 ORA-06550: 第 1 行, 第 19 列: PLS-00201: 必须声明标识符 ‘SYS.DBMS_DEFER_IMPORT_INTERNAL‘ ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored ORA-06512: 在 "SYS.DBMS_SQL", line 1575 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 97 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 126 ORA-06512: 在 line 1 . . 正在导出表 DEF$_AQERROR EXP-00008: 遇到 ORACLE 错误 6510 ORA-06510: PL/SQL: 用户定义的异常错误未得到处理 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 50 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 126 ORA-06512: 在 line 1 . . 正在导出表 DEF$_CALLDEST EXP-00008: 遇到 ORACLE 错误 6550 ORA-06550: 第 1 行, 第 19 列: PLS-00201: 必须声明标识符 ‘SYS.DBMS_DEFER_IMPORT_INTERNAL‘ ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored ORA-06512: 在 "SYS.DBMS_SQL", line 1575 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 97 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 126 ORA-06512: 在 line 1 . . 正在导出表 DEF$_DEFAULTDEST EXP-00008: 遇到 ORACLE 错误 6510 ORA-06510: PL/SQL: 用户定义的异常错误未得到处理 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 50 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 126 ORA-06512: 在 line 1 . . 正在导出表 DEF$_DESTINATION EXP-00008: 遇到 ORACLE 错误 6550 ORA-06550: 第 1 行, 第 19 列: PLS-00201: 必须声明标识符 ‘SYS.DBMS_DEFER_IMPORT_INTERNAL‘ ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored ORA-06512: 在 "SYS.DBMS_SQL", line 1575 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 97 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 126 ORA-06512: 在 line 1 . . 正在导出表 DEF$_ERROR EXP-00008: 遇到 ORACLE 错误 6510 ORA-06510: PL/SQL: 用户定义的异常错误未得到处理 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 50 ORA-06512: 在 "SYS.DBMS_EXPORT_EXTENSION", line 126 ORA-06512: 在 line 1 . . 正在导出表 DEF$_LOB导出了 0 行 . . 正在导出表 DEF$_ORIGIN导出了 0 行 . . 正在导出表 DEF$_PROPAGATOR导出了 0 行 . . 正在导出表 DEF$_PUSHED_TRANSACTIONS导出了 0 行 ...... . 即将导出 BI 的表通过常规路径... . 正在导出同义词 . 正在导出视图 . 正在导出引用完整性约束条件 . 正在导出存储过程 . 正在导出运算符 . 正在导出索引类型 . 正在导出位图, 功能性索引和可扩展索引 . 正在导出后期表活动 . 正在导出触发器 . 正在导出实体化视图 . 正在导出快照日志 . 正在导出作业队列 . 正在导出刷新组和子组 . 正在导出维 . 正在导出 post-schema 过程对象和操作 . 正在导出用户历史记录表 . 正在导出默认值和系统审计选项 . 正在导出统计信息 导出成功终止, 但出现警告。 C:\Users\Administrator>
2.3、命令行-用户导出
C:\Users\Administrator>exp userid=scott/tiger@orcl owner=scott file=(D:\backup\backup_user\2014100401.dmp, D:\backup\backup_user\2014100402.dmp) filesize =50MB log=D:\backup\backup_user\log.20141004.log Export: Release 11.2.0.1.0 - Production on 星期六 10月 4 16:03:48 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 即将导出指定的用户... . 正在导出 pre-schema 过程对象和操作 . 正在导出用户 SCOTT 的外部函数库名 . 导出 PUBLIC 类型同义词 . 正在导出专用类型同义词 . 正在导出用户 SCOTT 的对象类型定义 即将导出 SCOTT 的对象... . 正在导出数据库链接 . 正在导出序号 . 正在导出簇定义 . 即将导出 SCOTT 的表通过常规路径... . . 正在导出表 DEPT导出了 4 行 . . 正在导出表 EMP导出了 14 行 . . 正在导出表 EMP2导出了 14 行 . . 正在导出表 EMP_TEST导出了 14 行 . . 正在导出表 SALGRADE导出了 5 行 . 正在导出同义词 . 正在导出视图 . 正在导出存储过程 . 正在导出运算符 . 正在导出引用完整性约束条件 . 正在导出触发器 . 正在导出索引类型 . 正在导出位图, 功能性索引和可扩展索引 . 正在导出后期表活动 . 正在导出实体化视图 . 正在导出快照日志 . 正在导出作业队列 . 正在导出刷新组和子组 . 正在导出维 . 正在导出 post-schema 过程对象和操作 . 正在导出统计信息 成功终止导出, 没有出现警告。
2.4 命令行-表导出
C:\Users\Administrator>exp userid=scott/tiger@orcl tables=(emp,dept,salgrade) file=D:\backup\exp_table.dmp filesize=50MB log=D:\backup\exp_table \log.20141004.log Export: Release 11.2.0.1.0 - Production on 星期六 10月 4 16:17:47 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 即将导出指定的表通过常规路径... . . 正在导出表 EMP导出了 14 行 . . 正在导出表 DEPT导出了 4 行 . . 正在导出表 SALGRADE导出了 5 行 成功终止导出, 没有出现警告。
2.5、命令行-完全导出
exp userid=scott/[email protected] full=y inctype=complete file=(D:\backup\exp_complete.dmp D:\backup\exp_complete2.dmp) filesize=100MB log=D:\backup\exp_complete.log
全库导出时,增量导出类型缺省为complete(完全),所以例5和例2导出的结果是完全一样的。并且会提示EXP-00041: INCTYPE 参数已废弃,只能使用rman备份????
2.6、命令行-累积导出
exp scott/[email protected] full=y inctype=cumulative file=D:\backup\exp_cumulative\exp_cumulative.dmp filesize=200MB log=D:\backup\exp_cumulative\exp_cumulative.log
2.7 命令行-增量导出
exp userid=scott/[email protected] full=y inctype=incremental file=D:\backup\exp_incremental\exp_incremental.dmp filesize=10MB log=D:\back
up\exp_incremental\exp_incremental.log
累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息,而增量导出是导出上一次导出之后改变过的数据。
2.8 参数文件-用户导出
C:\Users\Administrator>exp parfile=D:\backup\exp_parfile\scott_exp.par
scott_exp.par文件内容如下:
userid=scott/[email protected] tables=(emp,dept,salgrade) file=D:\backup\exp_parfile\exp_parfile.dmp filesize=50MB log=D:\backup\exp_parfile\log.20141004.log
为了不暴露scott用户的密码,可以将上面的userid的值写为[email protected],此时exp会提示用户输入密码,输入的密码不会显示出来。
3、imp常用方法及使用案例
导入模式可以分为full(全文件导入)、owner(用户导入)、table(表导入)
full(全文件导入):指导入文件中的所有数据,并不是指全库导入,如果文件中只存在一个表的数据,全文件导入就只能导入一个表的数据。
fromuser,touser(用户导入):指导入文件中该用户的所有数据,如果文件中只存在一个表的数据,用户导入就只能导入一个表的数据。
tables(表导入):指导入文件中该表的数据。
能够导入何数据很大程度上依赖于导出文件。譬如需要导入某用户的所有数据,导出文件中必须存在该用户的所有数据,即导出时必须为全库导出或用户导出。
3.1 交互式-用户导出与导入
C:\Users\Administrator>exp Export: Release 11.2.0.1.0 - Production on 星期日 10月 5 00:11:02 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 用户名: rusky 口令: 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 输入数组提取缓冲区大小: 4096 > 导出文件: EXPDAT.DMP > (1)E(完整的数据库), (2)U(用户) 或 (3)T(表): (2)U > 导出权限 (yes/no): yes > 导出表数据 (yes/no): yes > 压缩区 (yes/no): yes > 已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 即将导出指定的用户... 要导出的用户: (按 RETURN 退出) > 成功终止导出, 没有出现警告。 C:\Users\Administrator>imp //导入之前导出的用户数据 Import: Release 11.2.0.1.0 - Production on 星期日 10月 5 00:11:44 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 用户名: rusky 口令: 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 仅导入数据 (yes/no): no > 导入文件: EXPDAT.DMP> 输入插入缓冲区大小 (最小为 8192) 30720> 经由常规路径由 EXPORT:V11.02.00 创建的导出文件 已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入 只列出导入文件的内容 (yes/no): no > 由于对象已存在, 忽略创建错误 (yes/no): no > 导入权限 (yes/no): yes > 导入表数据 (yes/no): yes > 导入整个导出文件 (yes/no): no > 用户名: rusky 输入表 (T) 或分区 (T: P) 名称。空列表表示用户的所有表 输入表 (T) 或分区 (T: P) 的名称或 。如果完成: . 正在将 RUSKY 的对象导入到 RUSKY 成功终止导入, 没有出现警告。
3.2 交互式-表导入
C:\Users\Administrator> exp userid=scott/[email protected]cl tables=(emp,dept,salgrade) file=D:\scott_tables_exp.dmp filesize 10m log=D:\scott_exp_tables.log//导出scott用户的三张表 C:\Users\Administrator>imp userid=rusky/[email protected] tables=(emp,dept,salgrade) file=D:\scott_tables_exp.dmp log=imp_scottToRusky.log//导入scott用户的三张表到rusky用户下 Import: Release 11.2.0.1.0 - Production on 星期六 10月 4 23:48:04 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 经由常规路径由 EXPORT:V11.02.00 创建的导出文件 警告: 这些对象由 SCOTT 导出, 而不是当前用户 已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入 . 正在将 SCOTT 的对象导入到 RUSKY . 正在将 SCOTT 的对象导入到 RUSKY . . 正在导入表 "EMP"导入了 14 行 . . 正在导入表 "DEPT"导入了 4 行 . . 正在导入表 "SALGRADE"导入了 5 行 即将启用约束条件... 成功终止导入, 没有出现警告。
3.3 命令行-查看文件内容
imp userid=cams/[email protected] full=y show=y file=(D:\backup\exp_complete\exp_complete1.dmp, D:\backup\exp_complete\exp_complete2.dmp) log= D:\backup\exp_complete\imp2.log
该命令查看了文件中都有哪些数据,如果有多个文件,imp会提示用户输入文件名,导入过程记录日志。
3.4 命令行-全文件导入
imp userid=cams/[email protected] full=y show=y file=(D:\backup\exp_complete\exp_complete1.dmp, D:\backup\exp_complete\exp_complete2.dmp) log= D:\backup\exp_complete\imp2.log
3.6 命令行-用户导入
C:\Users\Administrator>imp userid=scott/tiger@orcl fromuser=scott touser=scott file=d:\exp_scott.dmp log=exp_scott.log ignore=y Import: Release 11.2.0.1.0 - Production on 星期日 10月 5 01:00:07 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 经由常规路径由 EXPORT:V11.02.00 创建的导出文件 已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入 成功终止导入, 没有出现警告。
3.7 命令行-用户导入-从增量导出文件中导入及参数文件导入同上。
imp userid=(指的是具有导入权限的用户) fromuser=取出导出文件中该用户的数据 touser=要导入数据的用户