简答题 6.  什么是分布式事务处理?
【正确答案】分布式事务是指一个事务在本地和远程执行,本地需要等待确认远程的事务结束后,进行下一步本地的操作。如通过DBLINK更新远程数据库的一行记录,如果在执行过程中网络异常或者其他事件导致本地数据库无法得知远程数据库的执行情况,那么此时就会发生IN-DOUBT的报错。此时需要DBA介入,且需要分多种情况进行处理。
   Oracle会自动处理分布式事务,保证分布式事务的一致性,所有站点全部提交或全部回滚。一般情况下,处理过程在很短的时间内完成,根本无法察觉到。但是,如果在COMMIT或ROLLBACK的时候,出现了连接中断或某个数据库站点Crash的情况,那么提交操作可能会无法继续,此时DBA_2PC_PENDING和DBA_2PC_NEIGHBORS中会包含尚未解决的分布事务。对于绝大多数情况,当恢复连接或Crash的数据库重新启动后,会自动解决分布式事务,不需要人工干预。只有分布事务锁住的对象急需被访问,锁住的回滚段阻止了其他事务的使用,网络故障或Crash的数据库的恢复需要很长的时间等情况出现时,才使用人工操作的方式来维护分布式事务。手工强制提交或回滚将失去二层提交的特性,Oracle无法继续保证事务的一致性,事务的一致性应由手工操作者保证。
   使用“ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY;”可以使Oracle不再自动解决分布事务,即使网络恢复连接或者CRASH的数据库重新启动。使用“ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY;”恢复自动解决分布事务。
   有关分布式事务有两个重要的视图,分别是DBA_2PC_PENDING和DBA_2PC_NEIGHBORS。DBA_2PC_PENDING视图列出所有的悬而未决的事务,此视图在未填入悬而未决的事务之前是空的,解决之后也被清空。另一个视图是DBA_2PC_NEIGHBORS,该视图列出所有获得的(从远程客户)和送出的(给远程服务器)悬而未决的事务,也表示该本地节点是不是事务的提交点站点。
【答案解析】