我在尝试dbexport / dbimport Informix数据库时遇到了一个奇怪的情况。 导入数据库时我们得到错误: 1213 - 字符到数字转换错误 我检查了导入停止的位置。
我编辑了相应的文件(sed -n'1745813,1745815p'table.unl)并看到了看起来已损坏的数据。
3.0]26.0]018102]0.0]20111001.0]0.0]77.38]20111012.0]978]04]0.0072]6.59]6.59]29.93]29.93]77.38]
3.0]26.0]018102]0.0]20111001.0]0.0]143.69]20111012.0]978]04]0.0144]6.59]6.59]48.79]48.79]143.69]
]0.000/]]-0.000000000000000000000000000000000000000000000000000044]8\00\00\07Ú\00\00Õ²\00\00\07P27\00\00\07Ú\00\00i]-0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000999995+']-49999992%(000000000000000000.0]-989074999997704800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0]-999992%(0000000000000000000000.0]]]Ú\00\00]*00000015056480000000000000000000000000000000000000000000000000000000000.0]-92%'9999)).'000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0]-;24944999992%(000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0]-81%-999994;2475200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0]]-97704751999992%(00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0]
前两行都行。其余的似乎是腐败的数据。 我不知道数据是如何出现的,因为它没有出现在select语句中。
我只导出了受影响的表,并发现存在相同的数据。 我找了一个匹配所有行的过滤器,我在另一个导出中使用它。这次腐败数据不存在。
有关这背后可能是什么原因的任何想法?
最诚挚的问候 亚瑟
答案 0 :(得分:0)
尝试回答这个问题,为什么数据库会生成损坏的数据 你需要调查。 常见原因是:
如果你对之前描述的任何事件一无所知,你需要调查我们的Informix数据库的online.log,寻找引擎的任何启动,而不是之前的常规关闭。查看您的操作系统日志也有助于发现任何非自愿重启操作系统(缺乏能量或崩溃)。
关于解决方案。
像评论中的描述一样导出你的表格 但这不会恢复损坏的数据,他们只会“保存”“好”数据并丢弃“坏”数据。
- 创建了第一个的新表副本。
- 在表2中插入select * from table1 where(我的过滤器匹配所有行)
- 重新创建表索引
- 重命名表格
醇>
根据损坏的数据有多糟糕,有时您无法在一次选择中导出所有“好”数据,您需要解决“坏”数据,请查看此IBM文章: Unloading around table corruption
防止此类问题或轻松恢复的方法
首先,当然,没有办法防止任何崩溃......
你可以做的是尽量减少任何碰撞后的伤害。