【发布时间】:2013-12-09 21:39:05
【问题描述】:
我有一种情况,我必须:
- 对某些表禁用 FK 约束,
- 更改由外键引用的主键的字段值(也更新以匹配),
- 从第 1 步重新启用 FK 约束。
问题在于,如果从步骤 2 对主键字段所做的更改与外键引用的字段不一致,则在步骤 3 中重新启用约束可能会失败。我想抓住这种情况并回滚在步骤 2 中所做的更改。据我所知,运行像启用约束这样的 DDL 语句将首先发出提交,之后我无法回滚在步骤 2 中所做的更改。
有没有办法在一个独立的脚本中实现这一点?该过程应该完全通过或回滚,就好像什么都没发生一样。或者是否有替代事务可以恢复到以前的状态,而不需要对整个数据库进行备份/恢复?
【问题讨论】:
-
这是一个单用户进程吗?如果是这样,您也许可以使用闪回表将相关表恢复到以前的版本。
标签: sql oracle transactions oracle11g ddl