[ DB2 ] SQL0911N indoubt transaction(未确认的事务)的恢复方法

当DB2数据库遇到日志满或死锁/超时问题时,可能会出现未确认的事务。这些事务可以通过运行`LIST INDOUBT TRANSACTIONS`命令来检测,并使用交互式模式提交、回滚或销毁。在确认操作前,系统会提示事务详细信息。确保在处理事务时连接到正确的数据库分区,并根据事务状态选择合适的操作。
摘要由CSDN通过智能技术生成

Question & Answer

Question
发生了一个事务日志满,但在db2diag.log中应用程序句柄未知。 我应该怎么做?

MESSAGE : ADM1823E The active log is full and is held by application handle “”.        
Terminate this application by COMMIT, ROLLBACK or FORCE APPLICATION.

Cause
未确认的事务的存在可能会因为当前不存在的应用程序而导致锁超时或日志满。

SQL0911N デッドロックまたはタイムアウトのため、現在のトランザクションがロールバックされました。理由コード"68"。SQLSTATE=40001

SQL0964C データベースのトランザクション・ログがいっぱいです。 SQLSTATE=57011

未确认的事务是指一直处于未确认状态的全局事务。当两阶段提交协议的第一阶段(即prepare阶段)成功完成后,事务管理器(TM)或至少一个资源管理器(RM)变得不可用时,就会发生这种情况。

在RM日志再次可用之前,RM将无法识别是否提交或回滚一个事务分支,TM可以整合日志从RM中获取未确认的状态信息。

Answer
通过对当前连接的数据库运行LIST INDOUBT TRANSACTIONS命令,可以找到有关待处理事务的信息。

$ db2 list indoubt transactions

  1. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930013422
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 10:34:57 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000AF0D
  2. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930021847
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 11:18:46 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000B05A
  3. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930014048
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 10:41:36 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000AFA1
  4. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930014752
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 10:48:30 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000B03E
  5. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930080254
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 17:02:54 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000C60B0B

要处理未确认的事务,请执行带有 WITH PROMPTING 选项的 LIST INDOUBT TRANSACTIONS 命令。
这将启动一个交互式对话模式,允许你提交、回滚或销毁待处理的事务。

$ db2 list indoubt transactions with prompting

  1. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930013422
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 10:34:57 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000AF0D
  2. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930021847
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 11:18:46 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000B05A
  3. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930014048
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 10:41:36 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000AFA1
  4. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930014752
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 10:48:30 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000B03E
  5. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930080254
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 17:02:54 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000C60B

c/r/f/l/q:

在交互式对话模式下,您可以进行以下操作

  • 显示所有待处理的事务列表(输入l)。
  • 列出待处理的事务号x(在有效事务号后输入l)。
  • 终止(输入q)
  • 提交事务号x(在有效事务号后输入c)
  • 回滚事务号x(在有效的事务号后输入r)。
  • 销毁事务号x(在字母f后面输入有效的事务号)

命令字符和参数必须用空格隔开。
在这种情况下,它是 “c/r/f/l/q:”,但它可能是 “c/r/l/q:”,这取决于待处理事务的状态。

要处理未确认的事务,要分两步确认。
1)最终完成事务(根据事务的状态,可以是r/c),释放资源。
回滚未确认的事务------R号
回滚未确认的事务------C号

在上面的例子输出中,状态:i(未设置),所以你可以提交或回滚。
'c 1’以启发式方式提交事务1。

c/r/f/l/q: c 1

  1. originator: DB2 Enterprise Server Edition
    appl_id: *N0.e97q3ac.110930013422
    sequence_no: 0001 status: i
    timestamp: 2011-09-30 10:34:57 auth_id: E97Q3AC
    log_full: n type: RM
    xid: 00001D3400000008 0000000000000000 0000AF0D

この未確定トランザクションをヒューリスティックに COMMIT しますか? (y/n) y

在提交、回滚或销毁事务之前,当显示事务数据并提示你确认操作时,输入y。
这就是你如何提交或回滚一个事务。

2) 在以下情况下,你应该放弃(f)而不是提交或回滚。
从待处理的事务列表中丢弃(FORGET)已提交或回滚的事务------f号

  • 如果由于使用启发式方法提交或回滚的事务而出现日志满的情况(如LIST INDOUBT TRANSACTIONS命令的输出所示)。
  • 如果执行脱机备份

运用方面的考虑

  • 对于分区数据库,你必须连接到每个分区,然后执行list indoubt事务命令。

    export DB2NODE=3
    db2 terminate
    db2 connect to
    db2 list indoubt transactions

  • 如果在崩溃恢复过程中检测到未确认事务的存在,db2diag.log中会记录一个类似于以下的条目。
    2011-11-30-16.25.25.062152+540 I857382A463 LEVEL: Warning
    PID : 835832 TID : 3086 PROC : db2sysc 2
    INSTANCE: e97q3ac NODE : 002 DB : TEST
    APPHDL : 1-51 APPID: *N1.e97q3ac.111130072521
    AUTHID : E97Q3AC
    EDUID : 3086 EDUNAME: db2agntp (TEST) 2
    FUNCTION: DB2 UDB, recovery manager, sqlpresr, probe:3280
    MESSAGE : In-doubt transaction(s) exists at the end of crash recovery.

  • 在提交、回滚或销毁事务之前,将显示事务数据,并提示您确认该操作。

  • 您只能提交状态为未定义(i)、缺少提交确认(m)或缺少联合提交确认(d)的事务。

  • 只有状态未定义(i)、缺少联合回滚确认(b)或终止(e)的事务才能回滚。

  • 只有状态为提交( c )、回滚( r )、缺少联合提交确认(d)或缺少联合回滚确认(b)的事务才能被中止。

  • 一个挂起的事务失败,并出现 “SQL0998N トランザクションまたはヒューリスティック処理中に、エラーが発生しました。 理由コード =36。”,执行RESTART DATABASE命令,然后再次执行LIST INDOUBT TRANSACTIONS命令,确认没有待处理的事务。
    $ db2 list indoubt transactions with prompting
    SQL1251W No data returned for heuristic query. SQLSTATE=00000
    db2diag.log中会记录以下信息。
    2011-11-30-16.58.09.561284+540 E860889A491 LEVEL: Warning
    PID : 835832 TID : 3086 PROC : db2sysc 2
    INSTANCE: e97q3ac NODE : 002 DB : TEST
    APPHDL : 2-89 APPID: *N2.e97q3ac.111130075809
    AUTHID : E97Q3AC
    EDUID : 3086 EDUNAME: db2agent (TEST) 2
    FUNCTION: DB2 UDB, recovery manager, sqlpssdw, probe:5000
    MESSAGE : Indoubt transaction processing completed.
    DATA #1 : ZRC, PD_TYPE_ZRC, 4 bytes
    0x00000000

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值