oracle imp 包,ORACLE之exp,imp数据备份

一. 分三种模式:

1.表模式,导出一张或多张table

exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,table2

导出某张表的部分数据

exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1 query=\”where col1=\’…\’

备注:query参数配置经常遇到这样问题:LRM-00112: multiple values not allowed for parameter 'query'

原因:where条件中一般都会有空格, 而命令行下就会被释成几个命令行参数, 需要用单引号或双引号将整个where条件括起来,  另在linux下对于转义字符用\进行处理,在Windows下, 指定query参数:

exp system/123123@TEST FILE=(E:\1.DMP,E:\2.DMP) FILESIZE=10M TABLES=SYS.TEST query='where ID">"2000'

在linux下, 指定query参数:

exp ..... query=\"where col1 \< 1000\"

最好是写在一个参数文件里, 不拘于各种平台的区别

2.用户模式

exp system/123123@TEST FILE=(E:\1.DMP,E:\2.DMP) FILESIZE=10M WNER=(USER1,USER2) ROW=N

N表示不导数据,只导表结构,Y表示数据和结构全导3.全库模式

exp system/123123@TEST FILE=(E:\1.DMP,E:\2.DMP) FILESIZE=10M FULL=YES ROW=N

imp exp system/123123@TEST FILE=(E:\1.DMP,E:\2.DMP) FILESIZE=10M fromuser=dbUSER1 touser=dbUSER2

二.重点:用exp,imp进行表空间传输

1.限制:

源和目标数据库必须使用相同的字符集和国家字符集;

目标数据库不能已经包含同名的表空间;

传输表空间不支持:物化视图或复制、基于函数的索引、Scoped REFs和兼容性设置为8.0时,带有多个收件人的高级队列。

2.步骤:

2.1 检测表空间是否符合传输标准的方法:

SQL > exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);

SQL > select * from sys.transport_set_violations;

如果没有行选择,表示该表空间只包含表数据,并且是自包含的。对于有些非自包含的表空间,如数

据表空间和索引表空间,可以一起传输。

2.2 设置表空间为只读(假定表空间名字为APP_Data 和APP_Index)

SQL > alter tablespace app_data read only;

SQL > alter tablespace app_index read only;

2.3 发出EXP 命令

SQL> host exp 'system/password as sysdba' transport_tablespace=y tablespaces=(app_data, app_index)

注意'system/password as sysdba'出的格式容易出问题,不同平台设置不一样       2.4 拷贝.dbf数据文件(以及.dmp 文件)到另一个地点,即目标数据库可以是cp(unix)或copy(windows)

或通过ftp 传输文件(一定要在bin方式)

2.5 在目标数据库附加该数据文件 (直接指定数据文件名)

(表空间不能存在,必须建立相应用户名或者用fromuser/touser)

imp file=expdat.dmp 'system/password as sysdba' transport_tablespace=y datafiles=

(c:\app_data.dbf,c:\app_index.dbf) tablespaces=app_data,app_index tts_owners=hr,oe

注:TABLESPACES:指定导入的表空间集合名称。这个参数可以不指定,如果指定则必须和导入的表空间名称一致。

TTS_OWNERS:指定导入的表空间集合中包含对象的用户名。这个参数可以不指定,如果指定则必须保证正确性。

FROMUSER和TOUSER:如果不指定这两个参数,则导入的时候会根据表空间集合中对象的原始用户名导入,如果

用户名在目标数据库不存在,则会报错。可以通过指定FROMUSER和TOUSER来改变对象的属主

2.6 设置目标数据库表空间为读写

alter tablespace app_data read write;

alter tablespace app_index read write;

三.exp,imp优化

1. 加快exp速度

加大large_pool_size,可以提高exp 的速度

采用直接路径的方式(direct=y),数据不需要经过内存进行整合和检查.

设置较大的buffer,如果导出大对象,小buffer 会失败。

export文件不在ORACLE 使用的驱动器上

不要export到NFS 文件系统

UNIX环境:用管道模式直接导入导出来提高imp/exp 的性能

2. 加快imp速度

建立一个indexfile,在数据import完成后在建立索引

将import 文件放在不同的驱动器上

增加DB_BLOCK_BUFFERS

增加LOG_BUFFER

用非归档方式运行ORACLE:ALTER DATABASE NOARCHIVELOG;

建立大的表空间和回滚段,OFFLINE 其他回滚段,回滚段的大小为最大表的1/2

使用COMMIT=N

使用ANALYZE=N

单用户模式导入

UNIX环境:用管道模式直接导入导出来提高imp/exp 的性能

四.常见问题

1,字符集问题

分客户端的字符集与数据库端字符集,客户端字符集主要就是环境变量或注册表项NLS_LANG,注

意NLS_LANG的优先级别为:参数文件如果客户端字符集和服

务器端字符集不一样,而且字符集的转换也不兼容,那么客户端的数据显示与导出/导入的与字符

集有关的数据将都是乱码。

使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里

需要一个2 进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp 文件,获

取2、3 字节的内容,如00 01,先把它转换为10 进制数,为1,使用函数

NLS_CHARSET_NAME 即可获得该字符集:

SQL> select nls_charset_name(1) from dual;

NLS_CHARSET_NAME(1)

-------------------

US7ASCII

可以知道该dmp 文件的字符集为US7ASCII,如果需要把该dmp 文件的字符集换

成ZHS16GBK,则需要用NLS_CHARSET_ID 获取该字符集的编号:

SQL> select nls_charset_id('zhs16gbk') from dual;

NLS_CHARSET_ID('ZHS16GBK')

--------------------------

852

把852 换成16 进制数,为354,把2、3 字节的00 01 换成03 54,即完成了把该

dmp 文件字符集从us7ascii 到zhs16gbk的转化,这样,再把该dmp 文件导入到zhs16gbk

字符集的数据库就可以了。

2.版本问题

总是使用IMP 的版本匹配数据库的版本,如果要导入到816,则使用816 的导入工具

exp高版本不能导出低版本数据库       总是使用EXP的版本匹配两个数据库中低的那个版本,如在815 与816之间互导,则使用815的EXP工具

imp 和exp 版本不能往上兼容: imp 可以导入低版本exp 生成的文件, 不能导入高版本exp 生成的文件

注:上述内容多参照网上多个作者内容,结合个人使用过程遇到的问题进行备注说明。各示例无前后一致关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值