使用SqlPlus执行Oracle脚本;如有任何异常,请在脚本处理之前进入状态

我有很多脚本,其中包含各种事务,包括复杂的DML和DDL。

我需要找到一种方法来完全运行它们或根本不运行它们。我希望看到以下行为:如果在脚本处理过程中发生任何错误=>返回到脚本处理之前的状态。

我想我只是将整个脚本放入一个大事务中,在开始处放置一个 savepoint ,并在发生任何异常的情况下回滚到保存点,但是AFAIK是不可能的,就像Oracle那样不支持嵌套交易。

您介意分享有关此案的想法吗?

yinziforever 回答:使用SqlPlus执行Oracle脚本;如有任何异常,请在脚本处理之前进入状态

我认为没有简单的解决方案,因为脚本中包含DDL。 DDL在处理之前先执行commit,所以rollback将无济于事。

作为替代,您可以使用Oracle的闪回选项。但这会影响整个数据库。您创建一个flashback restore point,运行脚本,如果发生任何错误,则回闪数据库以还原点。这将还原数据库所有模式中的所有更改。当您具有用于运行/测试脚本的单独数据库时,这很好。它相当快。数据库应处于存档模式。

另一个选择是使用导出/导入实用程序(expdp / impdp)。这也很难在一个脚本中实现自动化,因此您需要手动进行恢复。如果发生任何错误,请执行导出转储,运行脚本-恢复运行impdp的数据库模式的转储。

,

也许您需要的是“只要sqlerror exit”子句。 签出here

本文链接:https://www.f2er.com/2792924.html

大家都在问