数据库之导入导出

1、Oracle 导入导出

Oracle 的备份是 Oracle 操作中常见的工作,常见的备份方案有:逻辑备份(IMP&EXP
命令进行备份)、物理文件备份(脱机及联机备份)、利用 RMAN(Recovery Manager)的增量
物理文件系统备份。ORACLE 数据库的逻辑备份分为四种模式:表空间备份(tablespace)、表
备份(table)、用户备份(user)和完全备份(full)。Oracle 的逻辑备份是使用 IMP&EXP 命令进行
数据导入导出的操作。使用 EXP 命令导出或者使用 IMP 命令导入时,需要 Create Session 系
统权限,但是如果要导出其他的表,必须拥有权限:EXP_FULL_DATABASE。
调用导入导出命令时,首先要估计所需的空间。EXP 命令导出的文件是二进制文件
(*.dmp)只能由对应的 IMP 命令进行读取恢复。导入导出的用途是:
 备份与恢复
 Oracle 平台更换:可以在相同版本之间进行备份与恢复,Oracle 较低版本的 export
数据文件可以 import 到高版本的 Oracle 数据库中,但是 Oracle 的版本只能是相邻
的,不能垮版本。

2. EXP 导出数据

EXP 命令可以在交互环境下导出数据库中的数据,也可以在非交互环境下执行命令。交
互环境下的命令执行,是一步一步执行的过程。
代码演示:exp 的交互环境
D:>exp scott/tiger@my_orcl ①
Export: Release 10.2.0.3.0 - Production on 星期一 10月 19 17:04:14 2009
Copyright © 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
输入数组提取缓冲区大小: 4096 > ②
导出文件: EXPDAT.DMP > scott.dmp ③
(2)U(用户), 或 (3)T(表): (2)U > 2 ④
导出权限 (yes/no): yes > yes ⑤
导出表数据 (yes/no): yes > yes ⑥
压缩区 (yes/no): yes > no ⑦
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 SCOTT 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 SCOTT 的对象类型定义
即将导出 SCOTT 的对象…
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 SCOTT 的表通过常规路径…
. . 正在导出表 BONUS导出了 0 行
. . 正在导出表 DEPT导出了 10 行
. . 正在导出表 EMP导出了 14 行
. . 正在导出表 SALGRADE导出了 5 行
. . 正在导出表 TBLSTUDENT导出了 3 行
. 正在导出同义词
. 正在导出视图
. 正在导出存储过程
. 正在导出运算符
. 正在导出引用完整性约束条件
. 正在导出触发器
. 正在导出索引类型
. 正在导出位图, 功能性索引和可扩展索引
. 正在导出后期表活动
. 正在导出实体化视图
. 正在导出快照日志
. 正在导出作业队列
. 正在导出刷新组和子组
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
成功终止导出, 没有出现警告。
D:>
代码解析:
① Exp 是导出命令,该命令后面紧跟“用户名/密码@服务器网络连接”。
② Exp 程序导出时使用的缓冲区大小,缓冲区越大,导出速度越快。直接回车代表使
用默认值 4096B。 ③ Exp 命令会把所有要到处的数据导出到一个 Dmp 文件中,该步骤是 Exp 询问导出的
数据文件名称。
④ Exp 程序询问导出整个用户还是导出某个表。默认导出整个用户。
⑤ Exp 程序询问是否导出每张表的访问权限。默认导出访问权限。
⑥ Exp 程序询问是否导出表中的数据。默认导出数据库表中的数据。
⑦ Oracle 表中的数据可能来自不同的分区中的数据块,默认导出时会把所有的数据压
缩在一个数据块上,IMP 导入时,如果不存在连续一个大数据块,则会导入失败。
也可以使用 Exp 命令时,设置各种参数,使准备就绪的 Exp 命令不需要与用户交互,按
照参数的要求,Exp 命令会一次性执行导出工作。要指定参数,您可以使用关键字:
EXP KEYWORD=value 或 KEYWORD=(value1,value2,…,valueN)
例如: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
参数名 说明
USERID 表示“用户名/密码”。
BUFFER 数据缓冲区大小。以字节为单位,一般在 64000 以上。
FILE 指定输出文件的路径和文件名。一般以.dmp 为后缀名,注意该文件包
括完整路径,但是路径必须存在,导出命令不能自动创建路径。
COMPRESS 是否压缩导出,默认 yes。
GRANTS 是否导出权限,默认 yes
INDEXES 是否导出索引,默认 yes
DIRECT 是否直接导出,默认情况,数据先经过 Oracle 的数据缓冲区,然后再
导出数据。
LOG 指定导出命令的日志所在的日志文件的位置。
ROWS 是否导出数据行,默认导出所有数据。
CONSTRAINTS 是否导出表的约束条件,默认 yes
PARFILE 可以把各种参数配置为一个文本键值形式的文件,该参数可以指定参
数文件的位置。
TRIGGERS 是否导出触发器,默认值是 yes。
TABLES 表的名称列表,导出多个表可以使用逗号隔开。
TABLESPACES 导出某一个表空间的数据。
Owner 导出某一用户的数据。
Full 导出数据库的所有数据。默认值是 no。
QUERY 把查询的结果导出。
表 1 EXP 参数说明
代码演示:exp 的非交互环境
D:>exp scott/tiger file=employee.dmp tables=(emp,dept)
Export: Release 10.2.0.3.0 - Production on 星期一 10月 19 17:38:25 2009
Copyright © 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径…
. . 正在导出表 EMP导出了 14 行
. . 正在导出表 DEPT导出了 10 行
成功终止导出, 没有出现警告。
D:>
3. IMP 导入
IMP 程序导入就是把 Exp 导出的文件重新导入到数据库的过程。导入时也有一些重要的
参数:
 Fromuser:指出导出时 dmp 文件中记载的用户信息。  Touser:dmp 文件要导入到什么目标用户中。
 Commit:默认是 N,在缓冲区满时是否需要 commit,如果设为 N,需要较大的回滚段。  Igore: Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在,就要根据ignore
参数的设置来决定如何操作。若 ignore=y,Oracle 不执行 CREATE TABLE 语句,直接
将数据插入到表中,如果插入的记录违背了约束条件,比如主键约束,则出错的记
录不会插入,但合法的记录会添加到表中。若 ignore=n,Oracle 不执行 CREATE TABLE
语句,同时也不会将数据插入到表中,而是忽略该表的错误,继续恢复下一个表。
代码演示:Imp 导入
D:>imp system/manager file=employee.dmp fromuser=scott touser=employee
commit=y
Import: Release 10.2.0.3.0 - Production on 星期一 10月 19 17:54:51 2009
Copyright © 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 SCOTT 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SCOTT 的对象导入到 EMPLOYEE
. . 正在导入表 "EMP"导入了 14 行
. . 正在导入表 "DEPT"导入了 10 行
即将启用约束条件…
成功终止导入, 没有出现警告。
D:>
4. 常见问题
 数据库对象已经存在
一般情况, 导入数据前应该彻底删除目标数据下的表,序列,函数/过程,触发器等。
数据库对象已经存在, 按缺省的 imp 参数,则会导入失败。
如果用了参数 ignore=y,会把 exp 文件内的数据内容导入。
如果表有唯一关键字的约束条件,不合条件将不被导入。
如果表没有唯一关键字的约束条件,将引起记录重复。  数据库对象有主外键约束
不符合主外键约束时,数据会导入失败。
解决办法: 先导入主表,再导入依存表。
disable 目标导入对象的主外键约束,导入数据后,再 enable 它们。  权限不够
如果要把 A 用户的数据导入 B 用户下, A 用户需要有 imp_full_database 权限。  导入大表( 大于 80M ) 时,存储分配失败
默认的 EXP 时,compress = Y,也就是把所有的数据压缩在一个数据块上。
导入时,如果不存在连续一个大数据块,则会导入失败。
导出 80M 以上的大表时,记得 compress= N,则不会引起这种错误。  Imp 和 Exp 使用的字符集不同
如果字符集不同,导入会失败,可以改变 unix 环境变量或者 NT 注册表里 NLS_LANG 相
关信息。 Imp 和 Exp 版本不能往上兼容
Imp 可以成功导入低版本 Exp 生成的文件, 不能导入高版本 Exp 生成的文件根据情况我
们可以用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值