blogger

    blogger
  • hot log

  • comment

    twitter

    • 空间续费,加上ssl连接。。

      2018-11-22 01:04

    • 12.10.xC6出来时候碰到"Could not determine encryption mode from page zero",竟果然是BUG!http://www-01.ibm.com/support/docview.wss?rs=630&uid=swg21973408

      2015-12-21 20:15

    • 空间已经转移到新加坡,希望会好一些。

      2015-11-16 14:34

    • 增加新域名liaosnet.cc,与liaosnet.com同指向。

      2015-10-09 15:25

    • 空间迁移到香港。或许速度会快一点。。

      2014-02-13 20:10

    • More»

    blog sort

    links

    record

    banner

    使用dd修改保留页恢复OFFLINE的dbspace和chunk

    暗夜星空's Memory from Jan 29 , 2011 at 18:54 PM , under Category:IFX/GBase

    注意:使用此方法一定要确定对应的chunk文件在系统层已经恢复为正常状态!此方法也仅供参考。


    目的:了解informix数据库保留页。
    测试平台:ids v9.40uc4w4 for linux

    初始数据库空间状况
    点击查看原图

    停掉数据库,然后把dbspace 名为 userdbs_p 下的两个chunk对应的系统文件改名
    informix% cd /opt/info9/dbs && mv userdbs_p userdbs_pbak && mv userdbs userdbsbak

    然后再启动数据库,这时数据库将报错
    点击查看原图

    然后的数据库dbspace和chunk的状态,userdbs_p及其chunk都是down掉的
    点击查看原图

    再次停掉数据库(不管系统输出的af,因为我们知道原因就是chunk没了),将原来的userdbs_p,userdbs文件恢复
    informix% cd /opt/info9/dbs && mv userdbs_p userdbs_p && mv userdbsbak userdbs

    再次启动数据库(此次,chunk文件对应的系统文件已经恢复正常),但userdbs_p仍然会是down的,仍如上面图所示

    尝试使用onspaces -s 命令转换chunk状态也将失败
    点击查看原图

    由于userdbs_p这个dbspace的状态是 ND ,故无法通过onspaces命令改变chunk状态。由于chunk文件在系统层面上已经恢复,我们考虑通过更改rootdbs上的系统保留页上的dbspace及chunk信息来恢复状态。

    首先:
    1)保留当前系统的保留页信息 oncheck -pr > oncheck_pr.txt 备用
    2)输出保留页中的信息备用 oncheck -pP 1 0 > oncheck_pP.txt,oncheck -pP 11 >> oncheck_pP.txt ...,将0-11页的信息都保存下来(实际上,此次测试时仅用到了第4-5页dbspace页和第6-7页chunk页,以下我们也仅介绍第4-7页)
    注:第4页和第5页互为备份,第6页和第7页互为备份,数据库启动时轮流读取。以下我们仅修改5-6页,但请记住也要修改第4页和第7页。

    完成后,再次停掉数据库(以下使用dd操作时,均是在数据库offline时操作的)
    使用dd读出rootdbs保留页中的5-6页(注意的是,保留页从0开始算),同时需要参考chunk的路径,示例中的是:
     address  chunk/dbs  offset     size       free       bpages     flags pathname
    44c8a928 1     1    0          50000      40254                 PO-B  /opt/info9/dbs/rootdbs
    相应的操作命令是
    informix% dd if=/opt/info9/dbs/rootdbs bs=2k count=2 skip=5 of=ROOTRSV5_6
    命令解释:源文件if,目标文件of,块大小是2k(这里为方便使用页大小),需要的块数是bs,跳过前5页skip(即0-4)

    从oncheck -pP 1 5的输出中,可以看到 userdbs_p位于slot2中,记录在301字节处开始,同时可以看到其flags是 5 0 6 0 对应是 0x60005,而正常的flags应是0x60001(rootdbs的flags),这个flags可以oncheck -pr中也可以看到
    点击查看原图

    在oncheck -pP 1 6的输出中,对应的两个chunk记录信息开始分别是321和1505,它们的flags标识均是20 0 1 0 即0x10020,正常的应该是0x10040,这个也可以在oncheck -pr的输出中看到
        Chunk number                   2
        Flags                          0x10020    Chunk is offline
        Chunk path                     /opt/info9/dbs/userdbs_p
        Chunk offset                   0 (p)
        Chunk size                     10000 (p)
        Number of free pages           7550
        DBspace number                 2
        Next chunk in DBspace          6
    点击查看原图


    我们这里使用UltraEdit打开ROOTRSV5_6,找到dbspace和其对应chunk的flags,改掉即可(要更改的信息在上面已经分析出来)
    1)修改dbspace userdbs_p的状态标识
    点击查看原图

    2)修改chunk userdbs_p,userdbs的状态标识
    点击查看原图
    点击查看原图

    至此,需要修改的保留页信息均已经修改完毕,保存(打开ROOTRSV5_6时不要转换成dos格式,若ftp传输,需使用bin方式)回数据库服务器上。

    最后将ROOTRSV5_6的信息写回rootdbs上
    informix% dd if=ROOTRSV5_6 bs=2k count=2 seek=5 conv=notrunc of=/opt/info9/dbs/rootdbs
    命令解释:新参数seek是写入时使用的,与读入的skip对应,conv的参数notrunc是让只写需要的部分,其它原文件的内容不改变。

    OK!最后一步,使用oncheck -pr检查下改动后的系统保留页,确认都改成功了,启动数据库!查看状态!

    informix@suse10:/opt/info9/tmp> oninit -vy
    Checking group membership to determine server run modesucceeded
    Reading configuration file '/opt/info9/etc/onconfig'...succeeded
    Creating /INFORMIXTMP/.infxdirs ... succeeded
    Creating infos file "/opt/info9/etc/.infos.ids9_online_net" ... "/opt/info9/etc/.conf.ids9_online_net" ... succeeded
    Writing to infos file ... succeeded
    Checking config parameters...succeeded
    Allocating and attaching to shared memory...succeeded
    Creating resident pool 1388 kbytes...succeeded
    Creating buffer pool 10002 kbytes...succeeded
    Initializing rhead structure...succeeded
    Initializing ASF ...succeeded
    Initializing Dictionary Cache and SPL Routine Cache...succeeded
    Bringing up ADM VP...succeeded
    Creating VP classes...succeeded
    Onlining 0 additional cpu vps...succeeded
    Onlining 2 IO vps...succeeded
    Initialization of Encryption...succeeded
    Forking main_loop thread...succeeded
    Initializing DR structures...succeeded
    Forking 1 'soctcp' listener threads...succeeded
    Starting tracing...succeeded
    Initializing 1 flushers...succeeded
    Initializing log/checkpoint information...succeeded
    Opening primary chunks...succeeded
    Opening mirror chunks...succeeded
    Initializing dbspaces...succeeded
    Validating chunks...succeeded
    Initialize Async Log Flusher...succeeded
    Forking btree cleaner...succeeded
    Initializing DBSPACETEMP list
    Checking database partition index...succeeded
    Checking location of physical log...succeeded
    Initializing dataskip structure...succeeded
    Checking for temporary tables to drop
    Forking onmode_mon thread...succeeded
    Verbose output complete: mode = 5
    informix@suse10:/opt/info9/tmp> onstat -d

    IBM Informix Dynamic Server Version 9.40.UC4W4   -- On-Line -- Up 00:00:14 -- 27928 Kbytes

    Dbspaces
    address  number   flags      fchunk   nchunks  flags    owner    name
    44c8a7d8 1        0x60001    1        1        N  B     informix rootdbs
    4543c018 2        0x60001    2        2        N  B     informix userdbs_p
    4543c168 3        0x60001    3        2        N  B     informix erdbs
    4543c2b8 4        0x48001    4        1        N SB     informix ersbs
     4 active, 2047 maximum

    Chunks
    address  chunk/dbs  offset     size       free       bpages     flags pathname
    44c8a928 1     1    0          50000      40254                 PO-B  /opt/info9/dbs/rootdbs
    44d88c78 2     2    0          10000      7550                  PO-B  /opt/info9/dbs/userdbs_p
    44d88e00 3     3    0          10000      9897                  PO-B  /opt/info9/dbs/erdbs
    44c8aaf8 4     4    0          5000       4587       4587       POSB  /opt/info9/dbs/ersbs
                     Metadata 360      268      360     
    44c8ac80 5     3    0          5000       4997                  PO-B  /opt/info9/dbs/erdbs2
    44c8ae08 6     2    0          5000       4997                  PO-B  /opt/info9/dbs/userdbs
     6 active, 32766 maximum

    Expanded chunk capacity mode: always