一、背景

数据迁移,并且只需要迁移几张无比巨大的表。

本来是打算直接导出导入sql文件的,但是导入sql时报错:

ORA-01704 字符串文字太长

这是因为导出的sql中,clob字段的值被转换成了varchar,插入的字符串超过4000,太长了。

于是不得不用使用.dmp文件,从原始服务器中导出.dmp文件,导入进新服务器数据库里。

二、操作步骤

(1) 从原始服务器中导出数据表格

可以使用navicat导出数据泵,这里直接在cmd中导出。

!重要:navicat的导入导出需要sysdba角色

如果是navicat,新建连接-高级-角色-SYSDBA

RecordSet 保存clob clob字段导出sql_服务器

顺便说一下,如果是命令,登录的时候用户名写为: username as sysdba 就可以了。

如果登录出错,可能是该用户没有sysdba权限。

步骤

1.打开cmd,输入exp,登录(这里暂时不需要在登录名后面加as sysdba)

RecordSet 保存clob clob字段导出sql_服务器_02

2.填写配置

RecordSet 保存clob clob字段导出sql_服务器_03

3.现在就可以看到导出的.dmp文件啦。

RecordSet 保存clob clob字段导出sql_RecordSet 保存clob_04

(1) 向新服务器导入.dmp文件

1.打开新服务器cmd,输入imp,登录

RecordSet 保存clob clob字段导出sql_服务器_05

2.填写配置

RecordSet 保存clob clob字段导出sql_数据库_06

这样就导入成功了,navicat可能需要刷新或者重连才能看到数据。

提示:如果导出的时候用的是expdp命令,那么导入也需要使用impdp

踩坑(1):数据库版本不一致

报错:

RecordSet 保存clob clob字段导出sql_RecordSet 保存clob_07

IMP-00010: 不是有效的导出文件, 标头验证失败
IMP-00000: 未成功终止导入

这是由于数据库版本不一致,可以修改.dmp文件的数据库版本。

1.首先从新服务器里随便导出一张表,生成.dmp文件

2.打开两个.dmp文件,对比版本号

推荐使用软件UltraEdit对.dmp进行编辑。

RecordSet 保存clob clob字段导出sql_数据库_08

将这一处版本号相关的内容统一就好了,原始服务器.dmp文件的版本号改成新服务器的,16进制。

(这一段16进制眼睛都要改瞎了)

踩坑(2):导入.dmp文件成功后找不到数据

这里其实是以为我登录的时候,使用了as sysdba,作为sysdba角色登录。

于是用户就变成了sys,导入也导入进sys库里面了。