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

亚信安慧AntDB数据库DDL数据闪回的实现(2)

北陌 2023-12-05
149

3. DDL数据闪回的实现

3.1存储数据的元数据表

为了存储被删除的表的相关信息,便于后续对表以及数据的闪回,AntDB的DDL数据闪回部分设计了6个主要的元数据表,这6个元数据表都存储在回收站(名为adb_trashcan的schema)中,如下表所示:

表1:6个主要的元数据表

表名

作用

flashback_ddl_meta_user_sql

存储用户执行的sql语句

flashback_ddl_meta_contents

存储回收站中表的信息

flashback_ddl_meta_internal_sql

存储数据库内部执行sql语句,例如内部执行的rename操作

flashback_ddl_history_user_sql

在表闪回之后或者执行清理函数后,会将用户执行的sql语句的元数据转移到该表中

flashback_ddl_history_meta_contents

在表闪回之后或者执行清理函数后,会将回收站中表的信息的元数据转移到该表中

flashback_ddl_history_internal_sql

在表闪回之后或者执行清理函数后,会将数据库内部执行sql语句的元数据转移到该表中

 

3.2 实现流程

AntDB数据库DDL数据闪回不仅能够实现普通表进入回收站,而且还支持分区表、继承表、关联触发器的表、关联序列的表。下面以分区表为例,介绍一下表从删除到闪回的具体实现。

1、drop分区表进入回收站的实现

a.当被drop的表是分区表时,首先判断该分区表是否有子表,再判断是否有父表,如果有子表,将走到drop分区子表的子处理;如果有分区父表,将走到分区父表的子处理。

b.当该表有分区子表时,首先通过函数获取分区表的分区类型、分区字段和子表的oid,其次再把它的每一个子表进行rename和移动到回收站的操作,记录元数据,如果他的子表还有子表,则把它子表的子表们进行rename和移动到回收站的操作,以此递归。

c.当该表有分区父表时,首先通过函数获取分区表达式和父表的名称,其次通过函数detach_child_partition()脱离与父表的分区关系,最后rename_table()重命名表,把表移动到回收站,在此过程中会把相应的数据存储到对应的元数据表中。流程图如下:


图3 :drop table下分区表进入回收站

 

2、truncate分区表进入回收站的实现

a.当被truncate的表是分区表时,把该表进行重命名,在原schema中创建同结构、同名的空表,判断该表是否有子表以及父表。

b.当该表有子表时,进入truncate子表的子处理:通过函数获取分区表的分区类型和分区字段以及分区子表的oid和relname,分区子表通过函数rename_table()重命名表,函数set_table_schema_to_trashcan()将表移动到回收站,在原来的schema创建一个具有同结构和同名的空表,然后附加与父表的关系,用同样的truncate操作删除剩余的子表。

c.如果该子表还有子表,通过上述的步骤b对子表的子表执行truncate操作,在此过程中,把相应的元数据存储到对应的元数据表中。

d.当该表有父表时,先通过函数获取分区的分区表达式以及父表的relname,然后通过函数detach_child_partition()使其与父表脱离关系,最后通过函数attach_child_partition()在新表上附加与父表的关系,在此过程中,把相应的元数据存储到对应的元数据表中。流程图如下:


图4: truncate table下分区表进入回收站流程


关于亚信安慧AntDB数据库

AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

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

评论