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)。
 
对比项目
常规导出
直接导出
导出速度
对应的可用参数
bufferquery
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是什么意思?
loboracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。