【发布时间】:2010-08-07 21:21:16
【问题描述】:
我已经尝试解决这个问题一段时间了,我认为是时候寻求帮助了。我正在构建一个模式配置脚本,我想添加一些脚本输出和错误处理。这个想法是脚本输出窗口只会向我显示关键消息而没有所有噪音。
Create Temporary Error Table
Begin Transaction
-- begin work block
Print "Doing some types of work"
-- do work here
If Error and Active Transactions > 0 Then Rollback
If Active Transactions = 0 Then Insert Error In Temp Error Table and Start Another Transaction
-- end work block
-- once all all work complete
If Active Transactions > 0 Then Commit Transactions
在 SQL Server 世界中,我通常只使用 Red Gate's SQL Packager 来完成此操作,这已经弄清楚了(提示,提示 Red Gate - 我们需要一个 Oracle 版本:))。有什么想法可以从 Oracle 开始获得类似的东西吗?
【问题讨论】:
-
我正在构建模式配置脚本 如果您的意思是创建/更改表等;回滚无济于事。在 Oracle 中,DDL 命令提交当前事务,如果一个未完成,则在事务中运行自身,并在成功时提交,在失败时回滚。因此在运行 DDL 命令后不会有未完成的事务。唯一的例外是如果存在解析错误,那么数据库不知道它应该运行 DDL 命令,并且不会执行第一次隐式提交,也不会为 DDL 启动事务。这与 SQL Server 非常不同。
-
我的评论没有提供答案,它只是为了指出一个你可能知道也可能不知道的陷阱。
-
@Shannon - 谢谢,你不能进行包含 DDL 的范围更广的事务真的很糟糕。如果出现问题,它会使数据库处于半生不熟的状态,从而使配置过程中的错误处理变得更加困难。
-
:) 为了回答您的提示,我们还没有适用于 Oracle 的 Packager 产品,但您可以尝试适用于 Oracle 的 Schema Compare 和适用于 Oracle 的数据比较:red-gate.com/products/schema_compare_for_oracle/index.htm