故事剧情:
公司某产品收下位系统商抛出来的SOAP消息,做完业务逻辑处理将完整的XML消息报文写入数据库存储备查。之前一直正常,最近突然发现系统频频报错,大致提示内容Oracle写入数据库错误,字段长度7000+,超过4000
问题
这个问题其实蛮常见,描述也异常的清晰,直接查看了一下数据库设置,相应的字段设置为VARCHAR,Oracle最大长度定义为4000,显然是经验欠缺,对字段长度预估不到位造成。下位系统此前一直按照标准方式一次性发一台设备的信息,现在出于减少消息并发次数考虑,将能合并的消息组合到一条SOAP里面一次性丢,原则上正确,但我方这边写数据库已报错了。
排错过程
- 因为这张表的目的就是为了记录消息履历备查,把XML消息分段拆开存表有点本末倒置了,放弃
- 只剩一条路了吧,改表的字段类型吧,最合适就是将VARCHAR改去CLOB了
踩坑过程
- 以下我会详细描述一下排错过程,由于是数据库小白,可能犯了很多二逼的错误,麻烦各位不吝赐教,最终解决方式和事故总结可以直接跳到文末查看。
- 求助度娘,很容易找到如下的解,因为已被人转帖太多次,找不到原作者了,无法致谢,再次鞠个躬。
--首先给原来varchar2类型的字段MESSAGEBODY改名为Temp
alter table 表名 rename column MESS