金仓数据库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接口都是一个强大的工具。
参考资料
提供该题目相关内容在产品手册中可以系统学习的位置,例如: