我使用的是sqldeveloper(但这个问题在TOAD上也是重复的,所以我认为它与sqldeveloper没有特别的关系)。基本问题是在我运行通过sqldeleloper使用数据库链接的复杂SELECT
查询之后,它将通知我在关闭会话时需要回滚或提交的更改。奇怪的是,我只运行SELECT
查询,COMMIT
没有变化。有人可以向我解释这种行为吗?
答案 0 :(得分:3)
通过dblink选择时会发生隐式事务。
当Oracle执行分布式SQL语句时,Oracle会预留一个 用于两阶段提交的回滚段区域中的条目 处理。此条目将保留,直到提交SQL语句 即使SQL语句是查询
有关此here的更多信息。如果可以的话,我会尝试挖掘Oracle链接。
更多来自马口:)
两阶段提交机制
数据库必须保证事务中的所有语句, 分布式或非分布式,作为一个单元提交或回滚。 正在进行的交易的影响对其他所有人都是不可见的 所有节点的交易;这种透明度应该是真实的 包含任何类型操作的交易,包括查询, 更新或远程过程调用。
更多来自Oracle的Distributed Database Concepts指南