Oracle中exp,imp(导入导出)数据迁移注意事项
2016-02-22 10:39
561 查看
这几天做开发库schema备份,出现些问题,记录一下.
一,exp时,os语言环境和数据库不同时会自动发生转换.
如果操作系统的字符集小于数据库字符集,就可能出现乱码现象.imp时,同理,也是有可能出现乱码的.如果源库和目标库字符集是
相同的话,防止exp,imp过程出现字符转换,我们可以在exp,imp动作前,手动设置语音环境和数据库语言环境一样.如数据库语言环境
为AMERICAN_AMERICA.AL32UTF8,os是windows,使用命令set NLS_LANG=AMERICAN_AMERICA.AL32UTF8;os是linux or unix,使用命令
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8.
二,在迁移schema时,即使不迁移数据,也易发生ORA-1659错误.
在上述错误发生后,select view,发现表的大小和源库表大小是一样的.而实际,我们只是迁移表结构,并没有迁移数据(rows=n).
查询表发现也是没有迁移数据的,但它的存储空间和源表是一样的.也就是说它迁移了存储空间.分析发现,是由于exp时,没有设置参
数compress=n所致,由于此参数默认值为y,那么它会在exp时,将源表所有数据压缩到一个extent,也就是initial extent,而imp时,会
预分配initial extent大小的.因此此种情况下,极易发生ORA-1659错误.
注:另在作有数据导出时,如果表大小较大的话,使用此参数的默认值也极易发生ORA-1659错误.因为假设你的源表大小为100m,在
imp时,需分配initial extent大小为100m,如果此时,用户所在表空间没有连续100m空间,那么就会报此错误了.
三,如果导出统计信息,在只导出部分数据,或不导出数据时,导出统计信息会报错.另如果未导出统计信息,但导入时,需导入统计信息
,那此时,导入后,统计信息会被锁住,而无法更新统计信息.
此时,我们可使用包dbms_stats.unlock_schema_stats来解锁.最好的办法是,在exp,imp时,加入参数statistics=none,不exp,imp
统计信息,在导入完成后,在重新收集统计信息.
四,在使用ftp跨系统cp dmp文件时,一定要注意使用bin模式,来防止imp时,不能open文件,而导入失败.
五,在作imp数据操作时,特别是imp大表时,为了防止发生ORA-1555错误,应设置参数commit=y,buffer=10000000(根据实际情况设置),此时,当buffer空间满时,会自动提交.默认是imp一个表提交一次.
详例
迁移用户,但无需迁移数据,且源库,目标库语言环境都为AMERICAN_AMERICA.AL32UTF8,可如下操作:
导出:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
exp user/pwd file=export.dmp log=export.log buffer=10000000 grants=n rows=n statistics=none compress=n
导入:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
imp user/pwd fromuser=user1 touser=user2 rows=n statistics=none file=export.dmp log=export.log
出处:http://blog.163.com/card_2005/blog/static/117810368200991562719396/
一,exp时,os语言环境和数据库不同时会自动发生转换.
如果操作系统的字符集小于数据库字符集,就可能出现乱码现象.imp时,同理,也是有可能出现乱码的.如果源库和目标库字符集是
相同的话,防止exp,imp过程出现字符转换,我们可以在exp,imp动作前,手动设置语音环境和数据库语言环境一样.如数据库语言环境
为AMERICAN_AMERICA.AL32UTF8,os是windows,使用命令set NLS_LANG=AMERICAN_AMERICA.AL32UTF8;os是linux or unix,使用命令
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8.
二,在迁移schema时,即使不迁移数据,也易发生ORA-1659错误.
在上述错误发生后,select view,发现表的大小和源库表大小是一样的.而实际,我们只是迁移表结构,并没有迁移数据(rows=n).
查询表发现也是没有迁移数据的,但它的存储空间和源表是一样的.也就是说它迁移了存储空间.分析发现,是由于exp时,没有设置参
数compress=n所致,由于此参数默认值为y,那么它会在exp时,将源表所有数据压缩到一个extent,也就是initial extent,而imp时,会
预分配initial extent大小的.因此此种情况下,极易发生ORA-1659错误.
注:另在作有数据导出时,如果表大小较大的话,使用此参数的默认值也极易发生ORA-1659错误.因为假设你的源表大小为100m,在
imp时,需分配initial extent大小为100m,如果此时,用户所在表空间没有连续100m空间,那么就会报此错误了.
三,如果导出统计信息,在只导出部分数据,或不导出数据时,导出统计信息会报错.另如果未导出统计信息,但导入时,需导入统计信息
,那此时,导入后,统计信息会被锁住,而无法更新统计信息.
此时,我们可使用包dbms_stats.unlock_schema_stats来解锁.最好的办法是,在exp,imp时,加入参数statistics=none,不exp,imp
统计信息,在导入完成后,在重新收集统计信息.
四,在使用ftp跨系统cp dmp文件时,一定要注意使用bin模式,来防止imp时,不能open文件,而导入失败.
五,在作imp数据操作时,特别是imp大表时,为了防止发生ORA-1555错误,应设置参数commit=y,buffer=10000000(根据实际情况设置),此时,当buffer空间满时,会自动提交.默认是imp一个表提交一次.
详例
迁移用户,但无需迁移数据,且源库,目标库语言环境都为AMERICAN_AMERICA.AL32UTF8,可如下操作:
导出:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
exp user/pwd file=export.dmp log=export.log buffer=10000000 grants=n rows=n statistics=none compress=n
导入:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
imp user/pwd fromuser=user1 touser=user2 rows=n statistics=none file=export.dmp log=export.log
出处:http://blog.163.com/card_2005/blog/static/117810368200991562719396/
相关文章推荐
- Oracle服务无法启动,报:Windows无法启动OracleOraDb10g_home1TNSListener服务,错误 1067:进程意外终止。
- 如何查看oracle的版本信息(两种方法)
- Windows 8 在 Oracle VM VirtualBox(77440) 的安装
- oracle 一次删除,增加,修改多个字段
- Oracle 11 密码永不过期
- java后台框架 springmvc mybatis(sqlsever oracle 和 mysql数据库)
- oracle修改密码,以及密码过期
- oracle数据库导入导出命令!
- Oracle 中左右填充问题
- Oracle Spatial 空间分析操作函数——SDO_GEOM.RELATE
- ORACLE多表关联UPDATE 语句
- Oracle NULLIF函数
- Oracle、MySql、SqlServer比对
- oracle数据链接无效以及chrome浏览器input最大长度的问题
- 【转】Oracle两种临时表的创建与使用详解
- oracle rac理解和用途扩展(转)
- oracle之约束解析
- Oracle中merge into的使用 (转)
- oracle之表对象操作
- Oracle数据库面试练习题