提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
因oracle11g数据库官方平台不再负责维护升级,公司总部要求对11g数据迁移至19c数据库中。
一、使用步骤
导出数据
exp userid=账号/密码@源数据库IP:端口/服务名 file=D:/testDB.dmp log=D:/exp.log direct=y recordlength=65535 buffer=65535 owner=用户
导入数据
imp userid=账号/密码@目标数据库IP:端口/服务名 file=D:/testDB.dmp log=D:/imp.log fromuser=源用户 touser=目标用户 buffer=1024000
导出导入过程中碰到的问题:
1、EXP-00091: Exporting questionable statistics
本地环境与数据库环境字符集不一致,这个应该是属于警告,而非错误。
可能会导致的问题,重新导入新的数据库后,表和字段备注(comment)中文乱码,显示为???,暂未发现数据乱码。
解决方式:在当前导出的命令窗口执行:set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK ,具体字符集网上查询oracle数据库字符集命令。
2、导出包含大数据类型(blob、clob)字段的表无故中断退出
首次为了方便,我使用了免安装版的19c客户端(地址:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html)对11g数据进行导出,不包含blob、clob类型的表均可导出导入,唯有到了这两种类型的表时,日志停止不动,按下回车键才发现已经中断跳出命令了,无任何报错信息。
网上所说的exp工具的版本必须与源库或者目标库中版本较低的相同其实不太准确,普通数据类型还是可以通过高版本客户端共计导出低版本的数据库数据的,导入到高版本中的数据也没有问题,唯有涉及了一些复杂类型(如:blob、clob),还是通过相同版本客户端导出吧,或者使用借助其它工具单独导出。
解决方式:使用与目标数据库相同版本客户端工具导出。
3、导入包含大数据类型(blob、clob)字段的表空间不一致
导出这两种数据类型是包含表空间前缀的,普通数据类型不涉及。
解决方式:通过nodepad++打开导出文件,批量替换表空间为目标数据库表空间,虽然感觉通过文本方式打开数据库文件有点怪,但改完之后再导入未发现问题。
4、导入过程中某些记录数据超过字段长度
这是因为源数据库与目标数据库字符集不一致导致的,如源数据库是ZHS16GBK ,一个中文占据两个长度,但目标数据库是utf8,一个中文占据三个长度,查询语句如下:select lengthb('中') from dual;
解决方式:
(1)修改目标数据库字符集,使之与源数据库相同,建议此方式。
(2)查询导入日志,记录报错的表及字段长度,修改源数据库超长数据或者加大字段长度,重新导出导入,当涉及数据不多或者表字段列较少可以使用这种方式。
(3)将varchar类型改为blob或clob,不推荐。
5、导出过程中经常无故停止不动
知识有限,未发现这种情况的原因是什么问题导致的。
按回车键,如果并非表比较大,导出时间较长,那么日志会显示导出行数,同时进行下一个表导出
6、导出效率优化
导出命令使用 direct=y recordlength=65535 与 buffer=65535 具体说明和其它优化方式网上搜索。