用程序修改informix的chunk路径

来源:互联网 发布:软件维保条款 编辑:程序博客网 时间:2024/06/16 06:27

由于informix官方并没有提供在物理恢复之后修改数据文件chunk路径的方法,所以这里简单介绍下修改chunk路径的方法。虽然我们可以用ln -s软链接的方式重定向路径,但这样还满足不了需求,我希望可以从基本上改变chunk的路径。其实只要我们找到保存chunk路径字符串的地方,并将其修改就可以了,而chunk的相关信息都保存在rootchk文件上。这里要感谢一位兄弟,之前我没时间研究这个,他用c帮忙写了个替换rootchk路径的方法,不过是全文检索的,不然我后面流程还跑不下去,现在有空了还是要解决这个问题,提高性能。

rootchk文件的前12个page都是保留页,而第7个page就是保存chunk信息的,第8个page是第7个page的备份,所以2个page都要替换路径。我们用od打开rootchk文件跳到第7个page可以看到如下信息。

图1

第0030000行是第7个page开始的地方,前24个字节是page的头部,第0030000的前4个字节,0006 0000转大小端转过来0000 0006就page的序号(从0开始),第0030000的0738表示整个page内容的字节总数,包括头部24个字节,第0030020行的 06a7 0000大小端转过来就是0000 06a7就是下一个page的序号,因为当chunk的数量过多,chunk的信息在一个page保存不完就要分开放到另外的page,所以这里表示还有其他chunk信息放到序号为06a7的page。

用红色标记的ffee ffff是每一个chunk信息开头的标识位。第0030100行的前2个字节,0017转10进制是23,表示这个chunk路径的长度为23,往后的红色标记的一串东西就是这个chunk的路径字符串转成asii码后再转16进制的内容,所以我们只要替换这个字符串和前面字符串的长度就可以了。

下面是实验的过程,替换路径前的chunk路径是这样的

图2

现在我用程序修改其中几个chunk路径,分别"/informix/chk/phydbschk"改成"/informix/chk/phydbschk_new", "/informix/chk/logdbschk"改成"/informix/chk/logdbschk_new", "/informix/chk/testchk1"改成"/informix/chk/testchk1_new", "/informix/chk/testchk2"改成"/informix/chk/testchk2_new",然后关闭数据库,把chunk文件重名后重启数据库。


图3

可以看到路径已经修改成功。



0 0