关键字:、人大金仓、KingbaseES、walminer
一、walminer数据字典概述
Walminer是从PostgreSQL的WAL(write ahead logs)日志的解析工具,它可以从wal日志中解析出用户执行的DML语句,以及用户执行DDL语句对系统表产生的DML语句。它的前身是xlogminer,但是xlogminer有较大的限制,比如wal日志级别需要是logical、需要将表改为FULL模式。Walminer则不需要这些限制,它可以解析普通的archive或replica级别以上的wal日志。
walminer数据字典是walminer实现对wal日志解析的关键,它存储了有关数据库对象信息,包含了数据库中各表的元数据,列信息,索引,约束等详细信息。
二、数据字典操作
解析 WAL 日志时,可以使用已存在的数据字典文件,如果不使用数据字典文件,则默认使用本库的元数据信息
导出数据字典
-- 可传入目录或文件全路径 -- 如果传入目录,数据字典默认名称为 dictionary.d select walminer_build_dictionary('$KBDATA/sys_walminer/wm_datadict'); select walminer_build_dictionary('$KBDATA/sys_walminer/wm_datadict/dictionary.d'); |
导入数据字典
-- 可传入目录或文件全路径 -- 如果传入目录,会在目录下找 dictionary.d 文件,如果文件不存在,则报错 select walminer_load_dictionary('$KBDATA/sys_walminer/wm_datadict'); select walminer_load_dictionary('$KBDATA/sys_walminer/wm_datadict/dictionary.d'); |
三、build_dictionary函数介绍
build_dictionary函数的逻辑是用于构建事务日志(WAL)中的数据字典
build_dictionary函数的执行逻辑如下:
1、判断是否是绝对路径
if(!is_absolute_path(target_path))
2、判断路径所在路径目录的读写权限
path_kind = path_judge(target_path);
3、创建字典文件
create_dictionary_file(final_path);
4、往数据字典文件中写入数据字典头的相关信息数据(ddh)
built_ddh(final_path);
5、往数据字典文件中写入oid与relfilenode的对应映射关系表,512KB为一个单位的从”pg_filenode.map“文件中读取数据并写入RelMapFile结构体中,这里会创建2个映射文件,一个是本地local,一个是用来共享的share
built_relmap(final_path);
6、写入系统表,包括pg_class,pg_attribute,pg_database,pg_namespace, pg_tablespace, pg_authid, pg_type, pg_auth_members, 我们会用一个while循环来执行写入操作,首先是对获取系统表数据,先进行扫描systable_beginscan(),再根据扫描结果,将数据添加到SingleCatalogCache结构体中,将表信息添加完后,最后写入数据字典文件
built_catalog_table(final_path);
7、写入生产数据字典的相关信息,如生成数据字典时,已经申请的数量,正在使用的位置,最终有表的个数
built_constraint(final_path);