这几天又回去做db2的日志分析,由于db2自带了日志分析的api接口,所以先打算跑一跑看什么情况,不过这个api接口是用c写的,赤裸裸的硬伤,但也只能硬上了。
先到例子目录,执行一下例子
输出如下
结果还挺让人满意的,有我想要的操作类型,rowid,commit时间,但还少了操作对应的tablespace id,table id,事务id,只好把例子改一改了。
关于日志的标识位,除了db2 9.7版本不同之外,9.7以后的标识位都一样,可以从官网找到,如下
按照文档,在utilrecov.c文件把tablespace id和table id的标识位也读出来
然后是事务id的位置,如图
按照文档,这里用一个BASE_LOG_RECORD_HEADER的struct用来做转换
这里把6个字节长度的事务id转成12位16进制的数字字符串
最后将读到的数据再整理一下,修改输入参数保存到文件
可以看到tablespace id,table id,事务id都有了
然后保存到文件
最后还要搞清楚这个api依赖哪些so文件和环境变量,因为要在没安装db2的情况下也能运行
主要依赖以下so文件,都在db2的安装目录下的lib64文件里面,还要设置环境变量DB2INSTANCE和建立一个和DB2INSTANCE值一样的用户
但是这个例子只是分析了dml的操作,ddl的标识位并没有分析,这还要研究下ddl到底什么个情况,这时我发现真要借本c的书看一看了。