您的位置:首页 > 数据库 > Oracle

oracle 数据备份之exp优化

2015-08-25 22:05 856 查看
在工作中经常需要对oracle数据库进行备份、异地恢复的情况。

Oracle的常规备份无非是exp/imp,expdp/impdp,rman三种方式。

exp/imp简单方便,适用于跨db版本、跨os平台、异地备份等情况,是大家最常用的一种备份方式。

expdp/impdp是10g以后推出的备份方式,其特点就是效率的大幅改善,据eygle报告,impdp相比与传统imp有20倍速度提升,其最大的缺点是不能跨数据库版本,连小版本号也不行(例如11.1到11.2)。

rman相比前两种备份方式,相对配置复杂,一般是DBA作为前两种方案的备份。

先看看exp/imp的用法:

1.基本的exp写法

exp userid/passwd@infodb81 file=user_$DATE.dmp
log=user_$DATE.log

user: oracle用户名

passwd:数据库用户密码

infodb81: 数据库的连接字符串

file:备份后的文件名

log: 备份日志文件

2.exp的参数

参数一:buffer



exp userid/passwd@infodb81 file=user_$DATE.dmp
log=user_$DATE.log
buffer=4096000000

注意:buffer的单位是bytes,例如要设置1M,则是1024000,上面的例子设置的是400M。

根据我们测试的结果,加入buffer参数后,约有40%的性能提升。

经过反复验证:合理的buffer值是10240000-1024000之间,再大了反而效率更低。

环境:aix 6.1 16c 32G,sga信息如下

SQL> show sga

Total System Global Area 2.0043E+10 bytes

Fixed Size 2153336 bytes

Variable Size 1.3690E+10 bytes

Database Buffers 6174015488 bytes

Redo Buffers 176394240 bytes

性能对比:

加入buffer参数前(数据约9G,共31分钟)

==========
备份用户sinosybak 11-02-21 02:08:16
====================

==========
备份用户shyang 11-02-21 02:35:49
====================

加入Buffer参数后(约18分钟)

==========
备份用户sinosybak 11-02-28 02:25:04
====================

==========
备份用户shyang 11-02-28 02:43:52
====================

参数二:direct

exp userid/passwd@infodb81 file=user_$DATE.dmp
log=user_$DATE.log
direct=y recordlength=65536

direct : 直接导出,数据从磁盘读入到高速缓存,直接写入到最终文件,所以没有数据行检查与匹配的过程。据不权威的评测结果,性能有50%到70%的提升。

同样的环境,实测结果,有70%的性能提升

约70G数据,普通exp模式,未加buffer,约2小时40分

========== 备份用户sinosy 11-02-22 22:30:00 ====================

========== 开始传输sinosy 11-02-23 01:10:39 ====================

exp buffer=102400000,约2小时

========== 备份用户sinosy 11-02-28 22:30:01 ====================

========== 开始传输sinosy 11-03-01 00:39:58 ====================

exp direct模式,约1个小时
========== 备份用户sinosy 11-03-01 22:30:00 ====================

========== 开始传输sinosy 11-03-01 23:05:43 ====================

注意:

1.recordlength参数(IO缓冲大小),与direct参数配对使用,默认该参数为1024bytes,上面的例子为64K(最大值也为64K)。

2.使用direct后,buffer参数失效;

3.使用direct,不支持query子句(没有行匹配的过程),不支持带Blob类型字段的表,但是系统会自动判断、自动切换,也就是说不会因为一张表的问题,导致整个schema不能使用direct备份;

4.direct不支持表空间导出。

参数三:consistent

exp userid/passwd@infodb81 file=user_$DATE.dmp
log=user_$DATE.log
consistent=y

consistent : 交叉一致性,用在序列值小于表中最大值的情况。

例如:exp默认情况下,先导出序列,后导出表,如果序列导出之后,表又使用序列插入了新的数据,就会导致数据不一致。

其他参数:



USERID 用户名/口令

FULL 导出整个文件 (N) BUFFER 数据缓冲区的大小

OWNER 所有者用户名列表

FILE 输出文件 (EXPDAT.DMP)

TABLES 表名列表

COMPRESS 导入一个范围 (Y)

RECORDLENGTH IO 记录的长度

GRANTS 导出权限 (Y)

INCTYPE 增量导出类型

INDEXES 导出索引 (Y)

RECORD 跟踪增量导出 (Y)

ROWS 导出数据行 (Y)

PARFILE 参数文件名

CONSTRAINTS 导出限制 (Y)

CONSISTENT 交叉表一致性

LOG 屏幕输出的日志文件

STATISTICS 分析对象 (ESTIMATE)

DIRECT 直接路径 (N)

TRIGGERS 导出触发器 (Y)

FEEDBACK 显示每 x 行
(0) 的进度

FILESIZE 各转储文件的最大尺寸

QUERY 选定导出表子集的子句

下列关键字仅用于可传输的表空间

TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)

TABLESPACES 将传输的表空间列表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: