在DB2中使用alter table test activate not logged initially后报如下错误:
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL1476N The current transaction was rolled back because of error “-433”.
SQLSTATE=40506
原因:这个我这边是某个字段表数据不符合要求,进不去;rollback后表就坏了
这是重新梳理表结构,发现有个字段长度不够
重建后实现插入
test.sql 代码示例:
alter table oa.test activate not logged initially
INSERT INTO oa.test(id, name, sex) SELECT id, name, sex FROM OD.S_PERSON;
COMMIT;
脚本调用示例:
db2 +c -tvf test.sql
强调:
强调:db2 +c 该命令后面必须 添加 “+c”【使test.sql中的多个sql命令成为一个事务】 ,不然抽取数据时会认为是多个命令(每个SQL命令执行后都会自动COMMIT)导致“not logged”失效,Insert占用日志(数据量大时导致数据库日志爆满),有报错会默认回滚数据,影响甚大。
注: activate not logged initially 为不写日志,当COMMIT时结束;优点数度快;缺点报错后表需要重建。对于大表迁移较方便,但是注意备份。
本文解决DB2中使用activatenotloggedinitially命令后出现的SQL1476N错误,分析原因并提供了解决方案,强调了在进行大表迁移时正确使用该命令的重要性。
13万+

被折叠的 条评论
为什么被折叠?



