免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5611 | 回复: 0

求教:DB2报sqlcode964错误,但是为什么一直没有回滚??? [复制链接]

论坛徽章:
0
发表于 2012-03-01 11:51 |显示全部楼层
数据库报了这个错3个多小时
2012-03-01-05.09.32.679655+480 E54054E598          LEVEL: Error
PID     : 6012                 TID  : 47665446381888PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000          DB   : LMSTMP
APPHDL  : 0-37812              APPID: 192.168.100.100.4531.1202291728
AUTHID  : DB2ADMIN
EDUID   : 2961                 EDUNAME: db2agent (LMSTMP) 0
FUNCTION: DB2 UDB, data protection services, sqlpgResSpace, probe:2860
MESSAGE : ADM1823E  The active log is full and is held by application handle
          "21756..".  Terminate this application by COMMIT, ROLLBACK or FORCE
          APPLICATION.
2012-03-01-05.09.32.691668+480 I54653E558          LEVEL: Error
PID     : 6012                 TID  : 47665446381888PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000          DB   : LMSTMP
APPHDL  : 0-37812              APPID: 192.168.100.100.4531.1202291728
AUTHID  : DB2ADMIN
EDUID   : 2961                 EDUNAME: db2agent (LMSTMP) 0
FUNCTION: DB2 UDB, data protection services, sqlpWriteLR, probe:6680
MESSAGE : ZRC=0x85100009=-2062548983=SQLP_NOSPACE
          "Log File has reached its saturation point"
          DIA8309C Log file was full.

个人觉得意思是21756这个应用提交的东西太多了,但是没有commit造成这种情况。而且报了sqlcode964这个错也3个多小时,但是数据库自己没有回滚,为什么呢?
2012-03-01-06.23.52.652018+480 I62343E834          LEVEL: Severe
PID     : 6012                 TID  : 47665358301504PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000          DB   : LMSTMP
APPHDL  : 0-38469              APPID: 192.168.100.100.4762.1202292220
AUTHID  : DB2ADMIN
EDUID   : 2412                 EDUNAME: db2agent (LMSTMP) 0
FUNCTION: DB2 UDB, relation data serv, sqlrr_array_input, probe:210
DATA #1 : SQLCA, PD_DB2_TYPE_SQLCA, 136 bytes
sqlcaid : SQLCA     sqlcabc: 136   sqlcode: -964   sqlerrml: 0
sqlerrmc:
sqlerrp : SQLRI03B
sqlerrd : (1) 0x85100009      (2) 0x00000009      (3) 0x00000000
           (4) 0x00000000      (5) 0xFFFFF88E      (6) 0x00000000
sqlwarn : (1)      (2)      (3)      (4)        (5)       (6)   
           (7)      (      (9)      (10)        (11)     
sqlstate:      
查了一下:
C:\Documents and Settings\Administrator>db2 ? sql964

SQL0964C  数据库的事务日志已满。
说明:
已使用事务日志中的所有空间。
如果使用具有辅助日志文件的循环日志,那么尝试分配和使用这些日志。当文件
系统没有更多空间时,不能使用辅助日志。
如果使用归档日志,那么文件系统不提供空间来包含新日志文件。
当数据库几乎已用完所有可能的日志序号时,也会返回此消息。数据库管理器使
用称为日志序号(LSN)的唯一标识来标识数据库日志记录。日志序号是范围介于
0x0000 0000 0000 到 0xFFFF FFFF FFFF 之间的 6 字节十六进制数。当事务导
致写入数据库日志时,数据库将使用新的 LSN 值。
应用程序无法执行任何导致数据库写入日志记录的事务。
无法处理该语句。
用户响应:
在接收到此消息(SQLCODE)时,执行 COMMIT 或 ROLLBACK,或再次尝试执行该
操作。
如果并发应用程序正在更新数据库,那么再次尝试执行该操作。当另一个应用程
序完成事务时,可能释放日志空间。
发出更频繁的落实操作。如果事务还未落实,那么当落实事务时,可能会释放日
志空间。设计应用程序时,应考虑何时落实更新事务,以防止发生日志已满的情
况。
如果发生死锁,那么更频繁地对它们进行检查。这可以通过减小数据库配置参数
DLCHKTIME 来实现。这将检测到死锁,并且很快解决(通过 ROLLBACK),这将释
放日志空间。
如果经常发生这种情况,那么增大数据库配置参数以允许更大的日志文件。更大
的日志文件需要更多空间,但是减少了应用程序再次尝试执行该操作的需要。可
能需要调整的事务配置参数是 LOGFILSIZ、LOGPRIMARY 和 LOGSECOND。有关事务
日志的更多信息,请使用诸如"事务日志"之类的短语在 DB2 信息中心中进行搜索

如果正在安装样本数据库,那么删除它并再次安装样本数据库。
如果由于数据库几乎用完所有可能的 LSN 值而返回此消息,那么您可以通过执行
以下操作将 LSN 值复位为零:
1. 卸载数据库中的所有数据
2. 删除并重新创建数据库
3. 装入所有数据
sqlcode:-964
  sqlstate:57011

一直困惑的就是,这个错应该是事物日志已满,但是事物日志满了后数据库不应该是自动回滚吗?为什么没有回滚呢?后来还是手动把21756这个应用给杀了的。另外数据库采用的是归档日志模式,查了下归档日志的确数量很大,但是离磁盘写满还是差太远了,这根数据库没有自动回滚有关系吗?
求教ing。。。。。有哪位知道的给个解答,越详细愈好,谢谢哇@!!!

附:
db2 get db cfg for lmstmp |grep -i log
Log file size (4KB)                         (LOGFILSIZ) = 10240
Number of primary log files                (LOGPRIMARY) = 20
Number of secondary log files               (LOGSECOND) = 4


帖子别的论坛也发过,希望尽快得到解答!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP