【发布时间】:2020-01-13 11:02:23
【问题描述】:
有什么方法可以自动为 SQL 生成回滚脚本?
例如:
SQL script : Delete from table_A where name = 'John Doe'
rollback script : Insert into table_A values (..... )
【问题讨论】:
-
这似乎在程序上是错误的。
-
@alexherm - 如果您了解生产部署,“回滚脚本”或“回滚计划”几乎是强制性的。它们用于反转更改。不确定您的意思是“程序错误”
-
出于什么目的?您可以在事务提交后使用闪回撤消事务(尽管它可能取决于您的 UNDO 的配置方式),并且作为其中的一部分,您可以获得回退脚本(尽管您通常会运行
dbms_flashback.backout_transaction命令而不是运行回退脚本)。 oracle-base.com/articles/11g/… 如果必须还原,另一种方法是创建还原点并执行数据库闪回。 -
因此询问业务问题是什么——尝试作为生产部署的一部分进行回退不同于想要撤销作为运行测试套件的一部分所做的任何更改,所以数据库恢复到已知的良好状态。进行事务闪回对于生产部署来说是一个可行的解决方案,尽管它可能需要一些工作来与您的部署过程集成(即,如果必须在部署之前上传脚本以更改控制
-
@oradbanj 你将如何在不将值存储在某处的情况下反转更新脚本?
UPDATE t SET col = 1 WHERE id BETWEEN 1 AND 1000000;我怀疑是否存在这样的工具来自动制作此类案例。您应该尝试备份/快照/或将所有内容包装在事务中,如果出现故障则回滚。