《oracle分布事务挂死处理步骤》由会员分享,可在线阅读,更多相关《oracle分布事务挂死处理步骤(2页珍藏版)》请在金锄头文库上搜索。
1、 大营销分布事务挂死处理步骤大营销分布事务挂死处理步骤简单描述:简单描述:在营销业务有少量事务是分布式事务,需要与 ods 数据库中心(1.13,14)数据库交互。由 于网络或者其他异常情况造成此分布事务相互失去联系。使得事务在大营销数据库处于一 种挂死状态。强制回滚及提交都会被 hang 住。根据 oracle 官方提供文档)需要做清除处 理。LOCAL_TRAN_ID IN_ DATABASE DBUSER_OWN I DBID315.47.17386 in SGPMS N67.4.66807 in SGPMS N108.39.23097 in SGPMS N156.23.65856 in
2、 SGPMS N315.47.17386 out SGDC_MARKET_ODS SGPMS N 3de0e87867.4.66807 out SGDC_MARKET_ODS SGPMS N 3de0e878108.39.23097 out SGDC_MARKET_ODS SGPMS N 3de0e878156.23.65856 out SGDC_MARKET_ODS SGPMS C 3de0e878处理步骤如下:(以下步骤来自官方文档(处理步骤如下:(以下步骤来自官方文档(ID 401302.1)现象描述:现象描述:Executing COMMIT or ROLLBACK FORCE han
3、gs Sqlrollback force 156.23.65856;The wait event is “free global transaction table entry“ Purging the transaction should fail with below error: EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY(156.23.65856); BEGIN DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY(156.23.65856); END; ERROR at line 1: ORA-06510: PL/SQ
4、L: unhandled user-defined exception ORA-06512: at “SYS.DBMS_TRANSACTION“, line 94 ORA-06512: at line 1 解决办法:解决办法: 步骤一步骤一:手工删除数据词典记录手工删除数据词典记录delete from sys.pending_trans$ where local_tran_id = 156.23.65856; delete from sys.pending_sessions$ where local_tran_id = 156.23.65856; delete from sys.pendin
5、g_sub_sessions$ where local_tran_id =156.23.65856; commit; 步骤二步骤二. 按照以下方法手工插入记录按照以下方法手工插入记录 insert into pending_trans$ (LOCAL_TRAN_ID,GLOBAL_TRAN_FMT,GLOBAL_ORACLE_ID,STATE,STATUS,SESSION_VECTOR,RECO_VECTOR,TYPE#,FAIL_TIME,RECO_TIME)values( 156.23.65856, /* = Replace this with your local tran id */3
6、06206, /* */XXXXXXX.12345.1.2.3, /* These values can be used without any */prepared,P, /* modification. Most of the values are */hextoraw( 00000001 ), /* constant. */hextoraw( 00000000 ), /* */0, sysdate, sysdate );insert into pending_sessions$ values( 156.23.65856,/* =Replace only this with your local tran id */1, hextoraw(05004F003A1500000104), C, 0, 30258592, , 146);commit;步骤三:提交步骤三:提交 pendingpending 事务事务Commit force 156.23.65856 步骤四:清除事务步骤四:清除事务4. Purge the transaction: exec dbms_transaction.purge_lost_db_entry(156.23.65856);