【问题标题】:Oracle - automatically create a rollback scriptOracle - 自动创建回滚脚本
【发布时间】: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; 我怀疑是否存在这样的工具来自动制作此类案例。您应该尝试备份/快照/或将所有内容包装在事务中,如果出现故障则回滚。

标签: sql oracle plsql


【解决方案1】:

TOAD 具有此内置功能,您可以在其中生成 INSERT 脚本。

  1. 在 TOAD 中编写 SELECT 查询并执行它

    SELECT * from table_A where name = 'John Doe'

  2. 在数据网格窗口中显示的数据中,右键单击并选择导出数据集选项。

  3. 在“导出数据集”窗口中,从“导出格式”下拉列表中选择“插入语句”选项。

  4. 在文件字段中指定文件名以获取文件中的输出,或者您也可以选择输出到剪贴板。

  5. 点击确定按钮生成插入语句脚本。

    HTH!

【讨论】:

    猜你喜欢
    • 2012-02-17
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多