oracle字段超了倒不进去,Sql语句中一个字段太长导入不进oracle的问题解决记录

Sql语句中一个字段太长导入不进oracle的问题解决记录

Sql语句中一个字段太长,导入不进oracle的问题解决记录

问题:从oracle备份的sql文件中有一个字段的值很大,在oracle中该字段的类型是CLOB,通过navicat还原,以及命令还原这些sql文件到oracle的时候,凡是这个字段的值的长度大的都还原不了,导致还原后的数据是少的。

原因:通过百度查询等发现是oracle在导入CLOB类型的数据的时候,会将字段先转化为VARCHAR2类型,VARCHAR2类型的最大长度是4000,当我们想把这个字段对应长度调整为比4000大的时候,oracle是不允许的。

最终的解决办法:将我备份的5G左右大小的sql文件用EmEditor软件打开,然后将5G左右的文件以表为单位分成好几份。然后对分成的这几部分数据分别进行处理。把有数据的表的sql剪切出来形成一个个的表sql文件,然后将这些sql文件转化成mysql的sql语句文件,导入到mysql中。目前发现有10几个元数据表存在字段值太大的问题,接下来在本地写java程序,把mysql中的数据读出,然后写入oracle对应的表即可。等有问题的10几张表的数据都通过程序导入oracle之后,检车oracle表中的数据是否和mysql中的一致以及和那个5G大小的sql文件中的各个表的数据条数是否一致,一致后,将本地oracle中的数据备份成DMP格式,然后通过命令将dmp覆盖式导入业务库中,导入完成后,打开jcms后台,检查各个功能是否合适,这时会发现有些元数据栏目不能在后台新增数据,经过检查发现是对应元数据表没有创建触发器导致的,创建后,新增数据正常。

EmEditor软件在此次解决该问题中帮助很大,首先它可以打开很大的文件,打开后,可以进行快速查找和到对应位置。便于我将大文件分成几个相对小的文件。

由于oracle不支持直接将拥有很大值的sql导入数据库,但是mysql支持,所以采用了先导入mysql然后通过程序将mysql的数据写入oracle的方式。

EmEditor软件就长这样

将导出的DMP导入业务库的时候,需要覆盖式的方式,需要在导入命令上加如下一段命令:

table_exists_action=replace 标识不删除原表直接覆盖。

完整的导入命令如下,对应的路径是默认路径,也就是把dmp文件放在默认路径下,然后执行如下命令即可。

impdp jcms2711/jcms2020 dumpfile=PCYWK202007072.DMP table_exists_action=replace

当然这里涉及程序,把数据从mysql导入oracle,所以需要开发的配合。

注意做完之后,要检查系统的功能是否合适。

我也是无意间发现通过程序可以将很大的值写入oracle,但是至于原理我是不知道的。

Sql语句中一个字段太长导入不进oracle的问题解决记录相关教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值