Exp备份学习
Exp简要介绍: 3
命令基本格式为(命令行格式) 3
一、数据库导出验证 3
Userid 3
二、数据库导出方式 4
Direct 4
Query 4
Buffer 4
Recordlength 4
三、数据库导出范围 6
Full 6
Tablespace 6
Tables 6
Owner 6
四、导出分类 6
Rows 6
Indexex 6
Grants 6
Transport_tablespace 6
Constraints 6
Triggers 6
五、导出时间及同步设定 7
Flashback_scn 7
Flashback_time 7
Consistent 7
Object_consistent 7
六、文件路径大小设定 7
File 7
Filesize 7
Compress 7
Resumable 8
Resumable_name 8
Resumable_time 8
七、生成的辅助信息 8
Log 8
Statistics 8
八、帮助和显示信息 8
Feedback 8
Help 8
九、完整性和部分相关性检查 8
TTS_FULL_CHECK 8
十、命令存储参数文件设定 8
Parfile 8
备注 9
备注 compress网上资料 9
备注 RESUMABLE 网页资料 12
备注 consistent与object_consistent资料搜集 12
Exp简要介绍:
exp是早期oracle数据库常用的备份工具,可以运行在客户端,也可以运行在服务器端,随着oracle数据库一同安装进客户的系统内。
exp/imp是oracle提供的一个对数据库进行逻辑备份的客户端工具。利用这个工具可以将数据库按表空间、用户或某些表保存到操作系统下的一个二进制格式的文件里。这个二进制文件是平台无关的,也就是说可以将windows下的exp文件imp到linux/unix系统中,利用这个特性可以完成某些数据迁移工作。Exp/imp在操作上可以看成是一个select--create--inser
t的过程。exp时select出要导出的数据和保存相关的ddl,imp时执行这个“脚本”(strings dmp文件可以看出其内部包含的就是一些ddl和insert语句)。
要使用Exp/Imp必须运行一次$oracle_home/rdbms/admin 下的catexp.sql 或 catalog.sql script脚本。
在oracle 10g中新提供了一种更加强大的替代工具data pump,但是在实际使用中oracle 9i及以前版本的数据库还是随处可见,所以掌握其用法还是很有必要的。
Exp、imp只是一种逻辑备份的工具,而不能作为日常的备份工具(RMAN、操作系统备份才是),它只不过提供一个时间点(consistent=Y)的逻辑备份,备份时间点之后的所有操作将无效,归档的日志也不能应用,而且exp、imp是个很缓慢的过程,所有这些都阻碍其成为一种日常备份工具。但是基于其他几个作用,exp、imp应该作为一种辅助备份手段存在,尤其是在那些处于非归档的数据库中。
命令基本格式为(命令行格式)
exp +userid+@数据库名+keyword1=value+keyword2=value+...file=path+文件名
大概将exp命令的参数分了几类,若按此分类来说,exp命令格式可以为:
exp+验证+@数据库名称+导出方式+导出范围+导出分类+导出时间、同步设定+文件路径大小等设定+辅助信息设定+帮助和显示信息设定+完整性和部分相关性检查设定+参数文件设定
可以将exp备份的参数分为以下几类:
一、数据库导出验证
Userid
即:用户名/密码 如scott/tiger 在后面加上数据库名字即:@数据库 如:@orcl 。
二、数据库导出方式
Direct
设定数据导出方式,默认为N,即常规导出,常规导出不能使用recordlength参数。当为Y时会采用直接导出方式,直接导出不能使用query子查询和buffer参数。
Query
设定子查询语句,在参数文件内可以这样写query=”where=1234”。
Buffer
buffer用于指定提取行数据时的缓冲区尺寸。通过设置该参数,可以确定导出数组的提取尺寸。可以按照公式rows_in_array*maximun_row_size确定buffer的设置,即表中行的最大值乘以总的行数。Buffer默认为4k,并非buffer的值越大越好,BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Export进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。
Recordlength
定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数,默认为buffer选项值。建议设置RECORDLENGTH参数为最大I/O缓冲,即65535(64kb)。
对比项目 | 常规导出 | 直接导出 |
导出速度 | 慢 | 快 |
对应的可用参数 | buffer,query | recordlength |
适用条件 | 当表中包含lob的时候 | 数据量大,而且数据库变动不频繁parameter数据类型 |
注意:
1、buffer,query参数只能在direct=N时使用。Recordlength只能在direct=Y时使用。
2、既然直接导出快,为什么默认direct=N?
直接导出的速度优于常规导出,但要求客户端和服务器端的字符集必须完全一致。
可参见网页:space.itpub/35489/viewspace-613531
在oracle版本为9204时,数据通过exp导出,以前使用direct=n的方式导出,考虑到效率问题,使用了direct=y参数,虽说效率得到大幅提高,但是再恢复数据库是会提示imp-00051,imp-00008等的相关错误;经metalink查询发现这是9204的bug,就是再exp时如果指定了direct=y可能导致exp的输出文件存在中断的情况。解决办法是,升级到9207或者使用direct=n. 这个问题提示我们不管用什么方式进行备份,一定要定时将备份文件进行恢复测试,及时发现问题,以防真正出现问题时候,备份无法使用的情况。
直接导出8i及以下版本不支持导出客户端和数据库的字符集转换,因此在导出前必须保证nls_lang设置正确;8.15及其以下版本不支持导出含lobs对象的表;不能使用query参数等。
3、为什么直接导出会比常规导出快?
两者都先用sql select语句查询,从表中抽取数据,随后将读出的数据存储到高速缓冲区。此后常规导出会将数据转移到一个工作区,在该工作区,行被提取出来,检查和查询中的where字句(即query参数的内容)是否匹配,最后将数据传给exp程序导出到目标文件;直接导出会直接将数据传给exp程序导出到目标文件,而没有转移到一个工作区和检查行是否匹配的过程,因此提高了导出效率。在数据量大的情况下,直接导出的效率优势更为明显,可比常规方法速率提高三倍多。
4、lob是什么意思?
lob为oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论