暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在 Oracle 中,关于自治事务中数据可见性的说法正确的是:

原创 小伙 2025-06-07
70

在 Oracle 中,关于自治事务中数据可见性的说法正确的是:

A

自治事务对主事务的可见性完全取决于自治事务的隔离级别。

B

自治事务对主事务的可见性完全取决于主事务的隔离级别。

C

自治事务可以看到主事务已提交的数据。

D

自治事务可以看到主事务未提交的数据。

在 Oracle 中,关于自治事务(Autonomous Transactions)的数据可见性规则如下:

⚖️ 正确答案分析

C. 自治事务可以看到主事务已提交的数据。
B. 自治事务对主事务的可见性完全取决于主事务的隔离级别。(需结合主事务隔离级别理解)

🔍 详细解析 自治事务的核心特性

自治事务通过 PRAGMA AUTONOMOUS_TRANSACTION 声明,与主事务完全独立:
主事务未提交的数据对自治事务不可见

自治事务启动时,只能看到主事务已提交的数据修改,无法感知主事务未提交的变更。
示例:若主事务插入数据但未提交,自治事务查询该表时结果为空。

自治事务的提交/回滚不影响主事务

自治事务内部操作(如插入日志)可独立提交,即使主事务回滚,自治事务的数据仍保留。
主事务隔离级别决定其对自治事务数据的可见性

自治事务提交的数据对主事务是否可见,取决于主事务的隔离级别:
READ COMMITTED(Oracle 默认):

主事务可立即看到自治事务提交的数据。
SERIALIZABLE:

主事务在提交前看不到自治事务提交的数据,仅能看到事务开始前的数据快照。
错误选项排除

A. 自治事务对主事务的可见性取决于自治事务的隔离级别

❌ 错误。自治事务的可见性规则固定(仅可见主事务已提交数据),不受自身隔离级别影响。
D. 自治事务可以看到主事务未提交的数据

❌ 错误。自治事务无法访问主事务未提交的任何修改。

💎 总结 选项 正确性 说明 A ❌ 自治事务的可见性规则固定,不依赖其隔离级别 B ✅ 主事务是否看到自治事务的数据,由主事务隔离级别决定 C ✅ 自治事务始终只能看到主事务已提交的数据 D ❌ 自治事务无法看到主事务未提交的数据

关键结论:
自治事务是一个独立的事务单元,它与主事务的交互遵循 “单向可见” 规则:

  • 自治事务 → 主事务:取决于主事务的隔离级别(READ COMMITTED 可见,SERIALIZABLE 不可见);

  • 主事务 → 自治事务:仅主事务已提交的数据可见。

若需验证,可通过以下示例测试:
-- 主事务 INSERT INTO main_table VALUES (1); -- 未提交 CALL autonomous_proc(); -- 自治事务中查询 main_table,结果为空 COMMIT; -- 主事务提交后,自治事务新增数据对主事务可见(READ COMMITTED)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论