zoukankan      html  css  js  c++  java
  • 【原创】DB2 表坏故障处理小记

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

    环境: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;

  • 相关阅读:
    Angular路由参数传递
    关于wx.redirectTo、wx.navigateTo失效问题
    深入浅出UE4网络
    UE4中Bebavior Tree中Delay及其后面代码失效的原因
    UE4中Component和Subobject的区别
    寻路优化(二)——二维地图上theta*算法的设计探索
    寻路优化(一)——二维地图上A*启发函数的设计探索
    UE4的AI学习(2)——官方案例实例分析
    UE4的AI学习(1)——基本概念
    不同机器下,游戏编程如何保证物体移动具有相同的速度
  • 原文地址:https://www.cnblogs.com/fengaix6/p/8183765.html
Copyright © 2011-2022 走看看