暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓数据库KingbaseES walminer数据字典介绍

原创 数据猿 2023-12-25
400


关键字:、人大金仓、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);

参考资料

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论