DB2 SQL脚本:如何启动事务并在发生错误时回滚
我正在为DB2数据库(V9.5)实现一个SQL脚本,以便添加列和重新组织数据。我想从linux命令行执行脚本:
$ db2 -vstf migration.sql
所有的语句migration.sql
都应该包含在事务中。如果一条语句失败,则必须回滚所有以前的更改。我怎样才能做到这一点?我尝试使用,START
TRANSACTION但是在这种情况下DB2返回语法错误。
migration.sql
connect to ... -- not accepted by DB2
START TRANSACTION;
update ... set ...
alter table ...
COMMIT;
connect reset;
terminate;
另外,我尝试按照此处所述关闭自动提交:
db2 +c -vstf migration.sql
(在脚本中打开连接时不起作用)- 添加
update command options using c off
到migration.sql(错误时不回滚任何内容)
因此,是否有人有想法按预期使事务和回滚在db2命令行上工作?如果没有,它是否适用于Java / JDBC?
回答:
从脚本中删除连接并提交,然后在外壳中执行此操作。然后使用+ c并测试退出状态(假设bash,应易于移植到其他shell):
db2 connect to <db>db2 +c -vstf migration.sql
if [ $? -ge 4 ]; then
db2 rollback
else
db2 commit
fi
db2返回:
* 8 on system error* 4 db2 error (constraint violation, object not found etc)
* 2 db2 warning
* 1 no rows found
-s将停止退出代码> = 4的执行,测试将检查是否发生了这种情况并回滚事务。另外,您可能要添加一个日志文件:
db2 -l migration.log +c -vstf migration.sqlif [ $? -ge 4 ]; then
db2 rollback
tail -10 migration.log
else
db2 commit
fi
如果发生错误,您可以拖尾日志文件以快速找出错误原因。如果使用日志文件,则可能要删除-v,因为它有点吵:
db2 -l migration.log +c -stf migration.sqlif [ $? -ge 4 ]; then
db2 rollback
tail -10 migration.log
else
db2 commit
fi
以上是 DB2 SQL脚本:如何启动事务并在发生错误时回滚 的全部内容, 来源链接: utcz.com/qa/403128.html