db2数据坏页恢复解决方案

2014-07-29-10.32.54.584000+480 I9805968F550       LEVEL: Severe
PID     : 7456                 TID  : 14436       PROC : db2syscs.exe
INSTANCE: DB2                  NODE : 000         DB   : ARCHIVE
APPHDL  : 0-45                 APPID: *LOCAL.DB2.140729023303
AUTHID  : ADMINISTRATOR
EDUID   : 14436                EDUNAME: db2redow (ARCHIVE)
FUNCTION: DB2 UDB, data management, sqldRedoDelete, probe:4267
RETCODE : ZRC=0x87040001=-2029780991=SQLD_BADPAGE "Bad Data Page"
          DIA8500C A data file error has occurred, record id is "".

2014-07-29-10.32.54.584000+480 I9806520F572       LEVEL: Severe
PID     : 7456                 TID  : 14436       PROC : db2syscs.exe
INSTANCE: DB2                  NODE : 000         DB   : ARCHIVE
APPHDL  : 0-45                 APPID: *LOCAL.DB2.140729023303
AUTHID  : ADMINISTRATOR
EDUID   : 14436                EDUNAME: db2redow (ARCHIVE)
FUNCTION: DB2 UDB, trace services, sqlt_logerr_string (secondary logging fu, probe:0
MESSAGE : TABLESPACE ATTRIBUTES:
DATA #1 : String, 74 bytes
Tablespace Seed = 2, Bufferpool ID = 1, Extent Size = 32, Page Size = 32k

2014-07-29-10.32.54.584000+480 I9807094F552       LEVEL: Severe
PID     : 7456                 TID  : 14436       PROC : db2syscs.exe
INSTANCE: DB2                  NODE : 000         DB   : ARCHIVE
APPHDL  : 0-45                 APPID: *LOCAL.DB2.140729023303
AUTHID  : ADMINISTRATOR
EDUID   : 14436                EDUNAME: db2redow (ARCHIVE)
FUNCTION: DB2 UDB, trace services, sqlt_logerr_string (secondary logging fu, probe:0
MESSAGE : PAGE OBJECT IDENTIFIERS:
DATA #1 : String, 52 bytes
Tablespace ID = 2, Object ID = 300, Object Type = 0
 
------------------------------------------------------------------------------------------------------------------
 文中已显示
"Bad Data Page"。 损坏问题可以大体分为五个类别:数据页面损坏(或表损坏)、索引损坏、CBIT 损坏、日志损坏和压缩描述符损坏。 我们可以通过Object Type 类型查看。
0   表坏页
1  索引坏页
3  LOB坏页
此类问题最好做个硬件诊断,
AIX® 上的  errpt –a snap  和  fileplace  输出
使用  db2dart  和  INSPECT  识别损坏问题,其中db2dart 需要在db2stop下进行,还可以标记表或索引失效,而inspect只能做诊断。
查看坏表: 

select  tabname  from  syscat.tables  where  tbspaceid=2 and  tableid=300  
标记表失效
db2dart web /MT /tsi 1 /oi 300
 
Please enter Table ID or name, tablespace ID, and password:
注:此处可能需要IBM800技术支持,索引失效标记是免费的。
 表情况:
 drop掉,重建表结构,导入备份数据
 索引情况:
 索引标记失效后,可以自动重建,无需drop 
 Index re-creation time and redo index build  (INDEXREC) = SYSTEM (RESTART)
 若无备份数据,也可以通过先查询:
select rtrim(tabschema)||'.'||tabname,TABLEID||','||TBSPACEID||','||1||','||fpages from syscat.tables where tabschema='EBIZ1' and tabname='TEST'
 
后用db2dart导出离线数据
db2dart web /DDEL /OI 134 /TSI 6 /PS 1 /NP 100 /V Y /RPT /db2_backup/db2rilo/WEB/db2dart /RPTN WEB_QUOTE  
----------------------------------------------------------------------------------------------------------------------------------------------------------------
从坏数据中恢复方法
db2dart  /ts 可以指定表空间id
表空间id的获得命令:
DB2 LIST TABLESPACES
db2dart  会创建一个名为 databaseName.RPT 的报告文件  
单分区在当前目录,多分区在
DART分区名中。
表恢复如下:
  1. 如果有数据库备份,还原数据库并前滚到日志的末尾。如果数据库很小时首选该方法。
  2. 还原表空间并前滚到日志的末尾。如果损坏是小范围的,这可能是最好的方法。
  3. 如果您有为损坏的表重新创建数据的其他方式或者有表数据的副本,删除并重新创建表。您会需要表的 DDL,而且如果您有表数据,您应当能够删除表,使用 DDL 重新创建表,通过可用的任何方法重新创建数据。
  4. 如果您没有有效的备份映像以及重新创建表的任何方式,您可以使用 db2dart 以及 /ddel 来从受损的表上挽救数据。在此之前,您需要使用 db2look 查找表的 DDL。您可以使用以下代码获取一个受损表的 DDL:
    db2look -d <dbname> -e -z <schema_name> -t <table_name> -o <output_file_name>

    下面是使用 db2dart 以及 /ddel 从受损的表上挽救数据的一个示例:db2dart <dbname> /ddel。该命令需要四个输入值:表对象 ID 或表名称,表空间 ID,起始的页码,以及页数。页数可以是一个具体的值或一个足够大的值(例如 999999999),才能提取表中的所有页面。另外,如果表中的某个页面受到太大损坏,可能需要在页面范围内执行多次 db2dart /DDEL 并忽略受损的页面。

    转储的分隔 ASCII 文件在数据代码页进行编码。db2dart 命令不执行代码页面转换。一旦从受损的表上挽救了所有数据之后,您可以检查输出文件 *.DEL,确保所有数据都存在。完成这个之后,您可以删除受损的表,稍后通过使用 db2dart 提取的数据重新创建表。注意,db2dart /DDEL 不妨碍 LOB 数据。

  5. 如果您有重新创建受损的表空间的方法,您可以使用 restart database 将受损的表空间标记为处于删除暂挂状态。稍后您可以重新创建受损的表空间。
  6. 如果以上选项都不可行或在提取数据的过程中报出某个错误,在重新创建表的同时删除表等,向 IBM 支持团队寻求帮助。IBM 支持团队可以帮助您删除受损的表,将受损页面初始化为 NULL,等等,视具体情况而定。

猜你喜欢

转载自blog.csdn.net/wzh474420999/article/details/79620819