Transactions REORG表似乎隐式提交了事务

Transactions REORG表似乎隐式提交了事务,transactions,db2,db2-luw,Transactions,Db2,Db2 Luw,我正在测试一个数据库迁移,它移动了大量数据,还修改了模式(对表的更改) 在DB2中,无论何时更改表,都需要调用 CALL SYSPROC.ADMIN_CMD('REORG TABLE tablename'); 否则,您将无法对之后的表执行任何操作 对于测试,我在一个SQL事务中运行迁移,以便在最后执行回滚 但REORG TABLE命令似乎隐式提交了该特定表的事务。回滚之后,我称之为REORG TABLE的表的模式被持久化 是我遗漏了什么,还是在DB2上无法在SQL事务中测试迁移?DB2 reo

我正在测试一个数据库迁移,它移动了大量数据,还修改了模式(对表的更改)

在DB2中,无论何时更改表,都需要调用

CALL SYSPROC.ADMIN_CMD('REORG TABLE tablename');
否则,您将无法对之后的表执行任何操作

对于测试,我在一个SQL事务中运行迁移,以便在最后执行回滚

但REORG TABLE命令似乎隐式提交了该特定表的事务。回滚之后,我称之为REORG TABLE的表的模式被持久化

是我遗漏了什么,还是在DB2上无法在SQL事务中测试迁移?

DB2 reorg是一个命令(不管触发它的方法如何),它在内部有自己的事务控制。因此,不能使用回滚来撤消reorg的活动。只有SQL语句和DDL受事务控制。
如果您打算退出reorg的活动或整个迁移,则可以使用时间点还原,或对还原到非棒环境的生产数据库的一次性副本执行测试。

您不需要在每个ALTER TABLE之后运行reorg。您不需要调用ADMIN_CMD来调用REORG。你想做什么?您想更改/迁移什么?在这个()之后,我需要调用reorg,因为我要将列(在新表/现有表上)添加为可空列,将数据移动到这些列,而不是使它们不可空,然后删除旧列(在旧表中)。在没有ADMIN_CMD的情况下调用reorg之前似乎不起作用,但没有再次尝试。您应该添加单独的语句以及事务所在的位置。因此,DML语句不是SQL?DDL语句呢?它们也受事务控制吗?更正:在DB2MidRange中,只有SQL和DDL受事务控制。