【原创】DB2 表坏故障处理小记

摘要:
注:本文为原创,转载请注明出处,谢谢。环境:DB2 v9.7,AIX 6.1处理过程描述:1.机房断电后,服务器文件系统损坏;2.修复文件系统后,数据库无法正常启动;3.完全备份恢复后,可以正常打开,数据库可以正常读写;但一旦业务访问数据库,DB2实例就会崩溃;4.通过创建新实例并恢复同名数据库,故障仍然存在----磁盘问题被排除。5.检查后发现,两个主业务表报告错误---

注:此文章属原创,转载请注明出处,谢谢。 

环境:DB2 v9.7 , AIX 6.1

处理过程描述:

1. 机房停电后,服务器文件系统损坏;

2. 修复文件系统后,数据库不能正常启动;

3. 通过全备恢复(restore)后,能正常打开,数据库读写正常;但是业务一访问数据库,DB2实例就CRASH;

4. 通过创建一个新的实例,再恢复一个同名的数据库,故障依旧; ---- 排除了磁盘问题

5. 检查发现有两个主要业务表有报错; ---- 实际处理过程中共有4张表有问题

6. 通过全备重新恢复后,把故障表中的可用数据读出来进行备份(丢失少量数据,80条左右,记录丢失的记录的表中的ID信息)(此时故障表中的大部分数据可读取,只有几十条有问题的表中的记录的部分字段不可以读取,表中的有问题的记录的ID字段可读取);

7. 再重建故障表,然后从之前逻辑备份的数据中,根据丢失数据的ID记录来抽取数据恢复到业务表中

8. 数据恢复完成,业务恢复正常;

9. 运行观察后,发现还有一张包含大字段的表有报错;

10. 导出大字段的表数据,再重建该表,然后导入数据,修复完成;

11. 另外有一张短信表,完全不能读取数据,一读就报错,软件开发确认后,直接重建该表,故障解决。

部分日志:

1)、主要业务表报错:表空间5,表对象579

EDUID : 8858 EDUNAME: db2agent (DTGLDB) 0
FUNCTION: DB2 UDB, data management, sqldReadRow, probe:3046
MESSAGE : ADM6007C DB2 detected an error while processing page "508" from
table space "5" for object "579" of object type "0".

通过上述信息,可以查询表名称、schema信息和表类型:

SELECT TABSCHEMA,tabname,owner,type FROM SYSCAT.TABLES WHERE TBSPACEID = 5 AND TABLEID = 579 

  

2)、大字段表报错:

FUNCTION: DB2 UDB, data management, sqldRowInsert, probe:871
RETCODE : ZRC=0x87480001=-2025324543=SQLDXE_BADPAGE "Bad LOB Page"
DIA8500C A data file error has occurred, record id is "".

3)、短信表报错:

FUNCTION: DB2 UDB, buffer pool services, sqlbCleanupBeforeTerm, probe:837
MESSAGE : ZRC=0x8602001A=-2046689254=SQLB_BADD "Bad Database, Can't flush"
DIA8427C The database has been marked as being damaged.
DATA #1 : String, 48 bytes
A portion of SQLB termination processing failed.


FUNCTION: DB2 UDB, buffer pool services, sqlbErrorHandler, probe:0
DATA #1 : String, 107 bytes
Obj={pool:5;obj:14;type:0} State=x27 Parent={5;14}, EM=435552, PP0=0
Prefetcher Error, in sqlbProcessRange

其中pool为表空间,obj为表,type为对象类型,0为数据表

查询表信息:

SELECT TABSCHEMA,tabname,owner,type FROM SYSCAT.TABLES WHERE TBSPACEID = 5 AND TABLEID = 14 

其它命令:

1)、查看表DDL信息

db2look -d DBNAME -t "TABLE1" -a -e -l -x -c ; ---- 不包含更新统计信息语句


2)、导出大字段表到服务器中

db2 connect to dbname user user1 using password
export to "USER1.TABLE1.exp.del" of del lobs to "/db2data/export/20171218.bak/" lobfile lob_doc1 modified by lobsinfile messages USER1.TABLE1.exp.del.msg select * from TABLE1


3)、导入命令

db2 connect to dbname user user1 using password
db2 import from "USER1.TABLE1.exp.del" of del lobs from "/db2data/export/20171218.bak/" modified by lobsinfile replace into TABLE1

4)、修改表序列

ALTER TABLE "USER1"."TABLE1" ALTER COLUMN "FILEID" RESTART WITH 90000

5)、授予DBA角色
# su - db2inst1
CONNECT TO DBNAME;
GRANT DBADM,SECADM ON DATABASE TO USER DB2INST2; ---- 授予 dba 和安全管理员角色
CONNECT RESET;

免责声明:文章转载自《【原创】DB2 表坏故障处理小记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WMI_COM_APIPython 快速排序(QuickSort)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

db2 reorg详解

reorgchk,检查table index 是否需要重组。reorg 重组,重新放置数据位置。runstats 统计信息,可以优化查询器 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常、安全、高效运行,防止一些错误重复发生。 由于DB2使用CBO作为数据库的优化器,数据库对象的状态信息对数据库使用...

(转)DB2 HADR 监控详解

原文:https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1010baosf/ HADR 简介 HADR( 高可用性灾难恢复 ) 是 DB2 数据库的一个组件,是 DB2 提供给用户的一种高可用性和灾难恢复的解决方案。组成 HADR 需要一对机器,一个主机和一个备机。它的基本...

DB2 日期时间函数

db2日期时间函数 (DATE(TRIM(CHAR(DT#11Y))||'-'||TRIM(CHAR(DT#11M))||'-'||TRIM(CHAR(DT#11D))) BETWEEN DATE('" & strDate1 & "') AND DATE('" & strDate2 & "')) (Y > y) OR...

DB2维护手册

一、 DB2日常维护日操作 31、 检查管理服务器是否启动 32、 检查DB2实例是否已经启动 33、 查看表空间状态是否正常 34、 查看表的状态 45、 查看磁盘空间 46、 检查存储管理软件是否正常 47、 检查数据库备份是否正常 58、 检查归档日志是否正确归档了 59、 查看缓冲池的命中率 510、 查看当前运行最频繁的SQL,其命中率是否正常...

db2 常用命令

1、将常用命令,设置为别名,方便记忆 alias listapp='db2 list applications' alias listappx='db2 list applications show detail' alias listtran='db2 list INDOUBT TRANSACTIONS' alias listtranx='db2 lis...

DB2存储过程——参数详解

语法说明1、procedure-name: 存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。2、(IN | OUT | INOUT parameter-name data-type,...) :传入参数     IN:输入参数OUT:输出参数INOUT:作为输入输出参数parameter...