我正在计划将DB2 8.1数据库从可怕的IBM编码迁移到UTF-8以支持更多的语言等。我遇到了一个困难的问题。
有关此迁移的一些注意事项:
在完成db2move加载过程之后,几个表处于检查暂挂状态并需要完整性检查。 完整性检查通过以下方式完成:
设置完整性。 立即检查
这适用于大多数表格,但是,有些表格会给出错误:
DB21034E该命令是作为SQL语句处理的,因为它不是有效的命令行处理器命令。 在SQL处理期间,它返回:
SQL3603N通过SET INTEGRITY语句检查数据处理已发现涉及名为“blah.SQL120124110232400”的约束的完整性违例。 SQLSTATE = 23514
互联网告诉我,这个问题的解决scheme是根据实际的表创build一个exception表,并告诉SET INTEGRITY命令发送任何exception到该表(如下):
db2 create table blah_EXCEPTION like blah db2 SET INTEGRITY FOR blah IMMEDIATE CHECKED FOR EXCEPTION IN blah USE blah_EXCEPTION
现在,这是我所拥有的具体问题! 上面强制所有的行发布到指定的exception表。 那么这只是超级,buuuuuut我不能失去这个转换的数据,它简直不能接受。 互联网和IBM对将exception发送到exception表格然后“处理exception表格中的数据”有一个模糊的描述。 不幸的是,我不清楚这是什么意思,我希望一些明智的个人知道,可以帮助我,让我知道如何从这些表中检索这些数据,并将数据放在原来的/正确的表,而不是这些例外表。
如果您有任何问题,请告诉我。 谢谢!
这个问题的解决scheme的长短不一,就是在从IBM-1252编码转换为UTF-8之后,数据库中存在违反特定表约束的字符。 约束几乎总是一个字符限制。 一旦这个数据被修复,我们就不会遇到转换数据的问题。 然而,这是一个漫长而可怕的过程。