我正在为DB2数据库(V9.5)实现一个SQL脚本,以便添加列和重新组织数据。我想从linux命令行执行脚本:
$ db2 -vstf migration.sqlmigration.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?
发布于 2014-08-25 21:32:09
从脚本中移除连接和提交,并在shell中这样做。然后使用+c并测试退出状态(假设bash很容易移植到其他shell):
db2 connect to <db>
db2 +c -vstf migration.sql
if [ $? -ge 4 ]; then
db2 rollback
else
db2 commit
fidb2返回:
* 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.sql
if [ $? -ge 4 ]; then
db2 rollback
tail -10 migration.log
else
db2 commit
fi如果出现错误,您可以跟踪日志文件,以快速找到错误所在。如果您使用日志文件,您可能希望删除-v,因为它有点嘈杂:
db2 -l migration.log +c -stf migration.sql
if [ $? -ge 4 ]; then
db2 rollback
tail -10 migration.log
else
db2 commit
fi发布于 2014-08-25 21:35:42
若要禁用命令行的自动提交,请执行以下操作:
db2 => UPDATE COMMAND OPTIONS USING c OFF要查看当前设置,请执行以下操作:
db2 => LIST COMMAND OPTIONS https://stackoverflow.com/questions/25494089
复制相似问题