一、背景
数据迁移,并且只需要迁移几张无比巨大的表。
本来是打算直接导出导入sql文件的,但是导入sql时报错:
ORA-01704 字符串文字太长
这是因为导出的sql中,clob字段的值被转换成了varchar,插入的字符串超过4000,太长了。
于是不得不用使用.dmp文件,从原始服务器中导出.dmp文件,导入进新服务器数据库里。
二、操作步骤
(1) 从原始服务器中导出数据表格
可以使用navicat导出数据泵,这里直接在cmd中导出。
!重要:navicat的导入导出需要sysdba角色
如果是navicat,新建连接-高级-角色-SYSDBA
顺便说一下,如果是命令,登录的时候用户名写为: username as sysdba 就可以了。
如果登录出错,可能是该用户没有sysdba权限。
步骤
1.打开cmd,输入exp,登录(这里暂时不需要在登录名后面加as sysdba)
2.填写配置
3.现在就可以看到导出的.dmp文件啦。
(1) 向新服务器导入.dmp文件
1.打开新服务器cmd,输入imp,登录
2.填写配置
这样就导入成功了,navicat可能需要刷新或者重连才能看到数据。
提示:如果导出的时候用的是expdp命令,那么导入也需要使用impdp
踩坑(1):数据库版本不一致
报错:
IMP-00010: 不是有效的导出文件, 标头验证失败
IMP-00000: 未成功终止导入
这是由于数据库版本不一致,可以修改.dmp文件的数据库版本。
1.首先从新服务器里随便导出一张表,生成.dmp文件
2.打开两个.dmp文件,对比版本号
推荐使用软件UltraEdit对.dmp进行编辑。
将这一处版本号相关的内容统一就好了,原始服务器.dmp文件的版本号改成新服务器的,16进制。
(这一段16进制眼睛都要改瞎了)
踩坑(2):导入.dmp文件成功后找不到数据
这里其实是以为我登录的时候,使用了as sysdba,作为sysdba角色登录。
于是用户就变成了sys,导入也导入进sys库里面了。