日期:2014-05-17  浏览次数:20939 次

如果事务未结束,与数据库的连接被切断,Oracle会怎么处理这个事务?谢谢
如果事务未结束,与数据库的连接被防火墙切断,
Oracle会怎么处理这个事务?
谢谢

------解决方案--------------------
会话结束,如果事务没有提交就只有回滚了。
连接断了会话就结束了,即使新建一个会话也和上次的会话无关,所以无法接着上次的事务。
应该没有对你这种需求做设置的参数。



------解决方案--------------------
参考一下: http://blog.csdn.net/christophe/archive/2007/09/06/1775346.aspx

What did oracle do when transaction happens? (from Oracle reference book,翻译+个人理解)

1. Transaction 发生在第一个可执行的SQL (DML or DDL).
2. Transaction 开始后, Oracle会:分配可用的undo tablespace或 rollback segment来记录回滚的入口 (新的transaction发生).
3. Transaction何时结束?
a) Commit or rollback 语句 (注意: 单字的rollback only).
b) DDL语句结束 (如create, alter, drop etc).
c) 用户断开连接. Oracle会自动提交( 设置auto commit参数)
d) 用户进程异常中止. (强制)
4. Commit transaction,
a) 在修改的数据commit之前, oracle会
i. 在SGA的存储rollback segment数据缓冲区中 (block buffer cache)生成了rollback segment块.rollback信息包含了transaction的SQL所改变的旧数据 (快照).
ii. 在SGA的redo log buffer中生成了redo log entries. Redo log的记录包含了数据块和回滚块的变化.
iii. 这些变化会被存储到SGA的数据缓冲区 (data buffer), 在提交之前可能会写入磁盘 (由DBWn 进程和Buffer cache设置以及LRU算法决定何时去写).
b) 在数据commit后, Oracle会
i. 相关联的rollback segment会记录提交事件, oracle分配SCN并记录.
ii. LGWR进程会将redo log的entries (SGA redo log buffer)写入online redo log file, 同时将SCN写入.
iii. Oracle释放行级或者表级锁.
iv. Oracle标记该transaction结束.