【发布时间】:2015-08-10 07:48:11
【问题描述】:
目标
了解针对表处理 DML 时的机制/实现。数据库(我在 Oracle 11G R2 上工作)是否拍摄表的快照(针对每个 DML)以应用 DML?
背景
我运行 SQL 以使用源表中的新值更新包含旧值的目标表的 AID 字段。
UPDATE CASES1 t
SET t.AID=(
SELECT DISTINCT NID
FROM REF1
WHERE
oid=t.aid
)
WHERE EXISTS (
SELECT 1
FROM REF1
WHERE oid=t.aid
);
我认为“OLD01”可以更新两次(OLD01 -> NEW01 -> SCREWED)。
然而,这并没有发生。
问题
对于每个 DML,数据库是否为 DML(第一次)拍摄表 X(称为 X+1)的快照,然后继续为结果 (X+1) 拍摄快照(称为 X+2)表上的下一个 DML(第 2 个),对于每个成功执行的 DML,依此类推?这是否也用作实现回滚/提交的机制?
这是在某处指定为标准的预期行为吗?如果是这样,请建议相关参考。我在 Google 上搜索过,但不确定要获得正确结果的关键词应该是什么。
提前感谢您的帮助。
更新
开始阅读 Jonathan Lewis 的 Oracle Core (ISBN 9781430239543) 并看到了图表。所以目前的理解是每次更新都会在 UNDO 表空间中创建 UNDO 记录,并从那里重建原始数据,我最初认为这是快照。
【问题讨论】:
标签: database oracle consistency dml