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

解决方案 »

  1.   

    Oracle是不是会先将事务挂起?然后到了某个事件或时长再做处理?
    哪里有这方面的详细资料?
    谢谢
      

  2.   

    详细资料你可以查查有关ORACLE的进程,会话和事务方面的资料。如《Oracle9i&10g编程艺术》里面的相关内容。
      

  3.   

    参考一下: http://blog.csdn.net/christophe/archive/2007/09/06/1775346.aspxWhat 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结束.