金仓数据库KingbaseES中WalMiner接口使用介绍
关键字:KingbaseES、WalMiner;人大金仓;KingbaseES
添加日志
添加日志时,可以添加文件夹或文件,可以多次添加多个不同的目录,WalMiner会自动根据日志文件名称进行排序和去重。比如可以同时添加在线日志目录和归档日志目录。添加文件时,会对文件进行判断,如果不是WAL日志,则会报错。
test=# select walminer_wal_add('sys_wal');
警告: WAL file '/opt/zhangnan/kes/kingbase_develop/Main_Dev_V9R1C1B3/bin/data/sys_wal/000000010000000000000002' seg size is invalid. may be not in use
walminer_wal_add
--------------------
1 file add success
(1 行记录)
test=# select walminer_wal_add('sys_wal/000000010000000000000001');
walminer_wal_add
--------------------
0 file add success
(1 行记录)
test=#
展示日志列表和删除日志
会展示已经添加的日志列表
test=# select walminer_wal_list();
walminer_wal_list
--------------------------------------------------------------------------------------------------
(/opt/zhangnan/kes/kingbase_develop/Main_Dev_V9R1C1B3/bin/data/sys_wal/000000010000000000000001)
(1 行记录)
删除已经添加的日志,可以删除单个文件,也可以删除文件夹,可以多次执行
test=# select walminer_wal_remove('sys_wal/000000010000000000000001');
walminer_wal_remove
-----------------------
1 file remove success
(1 行记录)
test=# select walminer_wal_remove('sys_wal');
walminer_wal_remove
-----------------------
0 file remove success
(1 行记录)
数据解析
- 普通解析
walminer_al会解析已加入的所有WAL日志,如果没有添加WAL日志,则解析data/sys_wal目录下所有WAL日志,解析过程中遇到WAL日志错误、或WAL日志不连续,会在错误或不连续的地方停止解析。
test=# select walminer_all();
NOTICE: Add wal from current sys_wal directory, do not suggest use this way in produce
警告: WAL file '/opt/zhangnan/kes/kingbase_develop/Main_Dev_V9R1C1B3/bin/data/sys_wal/000000010000000000000002' seg size is invalid. may be not in use
walminer_all
-------------------
sys_miner success
(1 行记录)
也可以根据时间范围解析,在add的WAL日志中查找对应时间范围的WAL记录,也可以根据LSN范围解析,在add的WAL日志中查找对应LSN范围的WAL记录
test=# select walminer_by_time('2023-10-27 11:27:00', '2023-10-27 16:37:00');
walminer_by_time
-------------------
sys_miner success
(1 行记录)
test=# select walminer_by_lsn('0/010000A0', '0/016E6578');
walminer_by_lsn
-------------------
sys_miner success
(1 行记录)
解析完成后会自动删除生成的中间文件、已添加的WAL日志、已导入的数据字典等。
在时间范围解析中,如果开始时间设置为空,则从已加入的WAL日志列表中第一个日志的第一个LSN开始解析。
在时间范围解析中,如果结束时间设置为空,则在已加入的WAL日志列表中最后一个日志的最后一个LSN结束解析。
查看解析结果
test=# select * from walminer_contents;
sqlno | xid | topxid | sqlkind | minerd | timestamp | op_text | undo_text | complete | schema | relation | start_lsn | commit_lsn
-------+-----+--------+---------+--------+-----------+---------+-----------+----------+--------+----------+-----------+------------
(0 行记录)
walminer_contents表字段描述信息:
字段名称
字段类型
字段描述
sqlno
integer
SQL语句在事务里的编号
xid
bigint
当前事务的xid
topxid
bigint
父事务的xid
sqlkind
integer
SQL语句类型(INSERT/DELETE/UPDATE)
minerd
boolean
是否能解析
timestamp
timestamp with time zone
事务提交时间
op_text
text
redo语句
undo_text
text
undo语句
complete
boolean
事务是否已完成
schema
text
模式名
relation
text
表名
start_lsn
sys_lsn
事务开始的LSN号
commit_lsn
sys_lsn
事务提交时的LSN号
最终,结束解析,结束解析时,会清空解析过程中生成的中间文件
test=# select walminer_stop();
walminer_stop
------------------
walminer stoped!
(1 行记录)
总结
Walminer是一个功能强大的工具,用于解析和分析数据库的wal日志文件,以提取有用的事务信息和数据操作,无论是故障恢复、数据版本控制还是数据分析,Walminer接口都是一个强大的工具。
参考资料
提供该题目相关内容在产品手册中可以系统学习的位置,例如: