XLogMiner SQL 语法解析工具开源项目

我要开发同款
匿名用户2017年06月27日
139阅读
开发技术C/C++
所属分类开发工具、语法解析工具
授权协议MIT

作品详情

XLogMiner是从PostgreSQL的WAL(writeaheadlogs)日志中解析出执行的SQL语句的工具,并能生成出对应的undoSQL语句。

配置要求

需要将数据库日志级别配置为logical模式,并将表设置为full模式。例如,下面的语句将表t1设置为full模式:

alter table t1 replica identity FULL;

PG版本支持

目前主要是在PostgreSQL9.5.x上开发测试的,在9.6版本中仅做过简单验证。

编译安装

1.将xlogminer目录放置到编译通过的PG工程的"../contrib/"目录下

2.进入xlogminer目录

3.执行命令

make && make install

使用方法从WAL日志产生的数据库中直接执行解析

1.创建xlogminer的extension

create extension xlogminer;

2.Addxlog日志文件

-- 增加wal文件:select xlogminer_xlogfile_add('/opt/test/wal');-- 注:参数可以为目录或者文件

3.Removexlog日志文件

-- 移除wal文件:select xlogminer_xlogfile_remove('/opt/test/wal');-- 注:参数可以为目录或者文件

4.Listxlog日志文件

-- 列出wal文件:select xlogminer_xlogfile_list();

5.执行解析

select xlogminer_start(’START_TIMSTAMP’,’STOP_TIMESTAMP’,’START_XID’,’STOP_XID’)---如果分析全部日志:select xlogminer_start('null','null',0,0);

START_TIMESTAMP:指定输出结果中最早的记录条目,即从该时间开始输出分析数据;若该参数值为空,则以分析日志列表中最早数据开始输出;若该参数值指定时间没有包含在所分析xlog列表中,即通过分析发现全部早于该参数指定时间,则返回空值。

STOP_TIMESTAMP:指定数据结果中最晚的记录条目,即输出结果如果大于该时间,则停止分析,不需要继续输出;如果该参数值为空,则从START_TIMESTAMP开始的所有日志都进行分析和输出。

START_XID:作用与START_TIMESTAMP相同,指定开始的XID值;

STOP_XID:作用与STOP_TIMESTAMP相同,指定结束的XID值

 两组参数只能有一组为有效输入,否则报错。

 6.解析结果查看

select * from xlogminer_contents;

7.结束xlogminer操作

该函数作用为释放内存,结束日志分析,该函数没有参数。

select xlogminer_stop();使用限制

本版本只解析DML语句,不处理DDL语句

执行了删除表、truncate表、更改表的表空间、更改表字段的类型,这样的DDL语句后,发生DDL语句之前的此表相关的DML语句不会再被解析。

解析结果依赖于最新的数据字典。(举例:创建表t1,所有者为user1,但是中间将所有者改为user2。那解析结果中,所有t1相关操作所有者都将标示为user2)

wal日志如果发生缺失,在缺失的wal日志中发生提交的数据,都不会在解析结果中出现

解析结果中undo字段的ctid属性是发生变更“当时”的值,如果因为vacuum等操作导致ctid发生变更,这个值将不准确。对于有可能存在重复行的数据,我们需要通过这个值确定undo对应的tuple条数,不代表可以直接执行该undo语句。

若没有将表设置为full模式,那么update、delete语句将无法被解析。(当然这很影响使用,下一版本就会对这个问题作出改进)

若没有将数据库日志级别设置为logical,解析结果会有无法预料的语句丢失

执行了表字段drop的DDL语句后,发生DDL语句之前的这个字段相关的值都会被解析为encode('AD976BC56F',hex)的形式,另外自定义类型也会解析为这种形式

只能解析与数据字典时间线一致的xlog文件

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论