DB2完整性检查和例外表

我正在计划将DB2 8.1数据库从可怕的IBM编码迁移到UTF-8以支持更多的语言等。我遇到了一个困难的问题。

有关此迁移的一些注意事项:

  1. 我们使用db2move来导出和加载数据,db2look来获取数据库的详细信息(表空间,表,键等)。
  2. 我们发现加载过程与db2move导入很好地结合在一起,然而,加载数据需要7个小时,而当我们实际完成主数据库上的转换时,这是不可接受的停机时间。
  3. 我们现在使用的是db2move加载,因为它似乎只是在没有完整性检查的情况下抛出数据。 这导致我目前的问题。

在完成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之后,数据库中存在违反特定表约束的字符。 约束几乎总是一个字符限制。 一旦这个数据被修复,我们就不会遇到转换数据的问题。 然而,这是一个漫长而可怕的过程。