【openGauss】账本机制与闪回特性使用
创始人
2025-06-01 18:00:50

账本机制

对防篡改账本表进行数据增、删、改操作,系统会在历史表和全局表中记录行级数据变化追溯信息,操作的追溯信息,并通过密码学算法生成校验信息。通过对校验信息的保护、比对、验证,起到对重要数据的完整性保护,识别、阻止未授权更改。

1. 核心价值:

  • 易用:使用SCHEMA级别隔离,创建SCHEMA时指定账本属性,在该SCHEMA中创建的用户表自动成为账本;
  • 无感:账本表支持增、删、改、查,与普通表语法一致;
  • 可追溯:对账本表的数据修改,均会以hash变迁的形式在历史表中记录数据的变迁记录,以SQL的形式在全局表中记录数据操作;
  • 融合:账本表可以和其他表关联进行事务或查询;
  • 高并发:账本表中数据行与行之间无关联,可以支持并发更改。

账本表使用与普通表一样,支持全量的增、删、改、查操作,在用户看来,仅仅是普通表多增加了一列hash列。用户可以显式的查询每行数据的hash。

校验信息的记录(历史表和全局表):

  • 账本表的数据增删改操作均会被记录到历史表和全局表。
  • 记录到历史表的形式为只记录hash摘要,不记录数据;
  • 记录到全局表的形式为记录操作的SQL语句和操作造成的摘要更改。

2. 账本表使用:

账本表的底层存储类型需要是ASTORE,系统默认存储类型就是ASTORE,如果为了实现闪回将存储类型更改为了USTORE,然后要完成账本的话需要将USTORE改回ASTORE

# 退出数据库连接,在linux shell中执行以下命令进行更改
gs_guc set -N all -I all -c "enable_default_ustore_table=off";
# 更改完之后需要重启数据库才生效
gs_om -t restart
(1)创建防篡改特性的Schema

创建于该schema中的表数据账本表,系统会自动根据表名创建历史表,以及指定全局表,每个账本表都会有一个hash字段,记录系统生成的hash摘要,所以创建账本表时不能有名称hash的列(账本表的hash字段生成以及hash摘要生成、hash摘要存储都是系统自动操作不需要人为参与)

create schema chain_demo with blockchain;

可以使用 \dn+ 查看schema信息,其中withblockchain属性为t,表示这个schema是账本模式
在这里插入图片描述

(2)创建账本表
create table chain_demo.t1(c1 int);
(3)往账本表中插入数据
insert into chain_demo.t1 values(1),(2);

将2改成3

update chain_demo.t1 set c1=3 where c1=2;
(4)查看账本表数据
select *,hash from chain_demo.t1;

在这里插入图片描述

(5)查看历史表与全局表
  • 历史表
select * from blockchain.chain_demo_t1_hist;

在这里插入图片描述
系统会为每个账本表生成一个历史表,记录该账本表的hash变更记录,历史表都是存放在blockchain模式中,历史表的命名方式:schema名称_表名_hist
update将插入的第二条记录,也就是c1=2的数据更改成了c1=3,所以在历史表中可以看到第三步操作将第二部操作的hash删除同时新增了一个新的hash。

  • 全局表
select * from gs_global_chain;

在这里插入图片描述
在全局表中可以看到操作记录,已经该操作记录的操作者,时间,操作对象等信息,因为openGauss服务只有一个全局表,所有的账本表的操作信息都存储在一个表中,可以记录操作者、操作对象进行区分。

闪回特性

闪回概念是Oracle最先提出来的,其本质是为了回退错误操作产生的,避免人为的“灾难”,并且要能够快速回退。

1. 闪回查询

基于MVCC多版本的数据恢复:适用于误删除、误更新、误插入数据的查询和恢复,用户通过配置旧版本保留时间,并执行相应的查询或恢复命令,查询或恢复到指定的时间点或CSN点。

只有存储类型为ustore类型的表才支持闪回
在这里插入图片描述

前提条件:

  • enable_default_ustore_table=on --指定用户创建表时使用USTORE存储引擎。
  • undo_retention_time=600 --用于设置undo旧版本的保留时间,单位是s。
# 退出数据库连接,在linux shell中执行以下命令进行更改
gs_guc set -N all -I all -c "enable_default_ustore_table=on";
# 设置旧版本保留时间
gs_guc set -N all -I all -c "undo_retention_time=600";
# # 不能用reload刷新,使用set更改完之后重启数据库生效
gs_om -t restart

查询旧版本数据有两种方式,可以基于timestamp或者csn查看,timestamp值和csn值可以通过gs_txn_snapshot系统表获取

select * from gs_txn_snapshot;

在这里插入图片描述

  • 使用timestamp查看
select * from classes timecapsule timestamp '2023-03-22 16:29:59';

在这里插入图片描述

  • 使用csn查看
select * from classes timecapsule csn 9114;

在这里插入图片描述

2. 闪回恢复

基于类似windows系统回收站的恢复:适用于误DROP、误TRUNCATE的表的恢复。用户通过配置回收站开关,并执行相应的恢复命令,可以将误DROP、误TRUNCATE的表找回。

前提条件:

  • enable_default_ustore_table=on --指定用户创建表时使用USTORE存储引擎。
  • enable_recyclebin=on --用于启动回收站。
# 已经更改过的配置就不需要重复更改了
gs_guc set -N all -I all -c "enable_default_ustore_table=on";
# 启动回收站
gs_guc set -N all -I all -c "enable_recyclebin=on";
# # 不能用reload刷新,使用set更改完之后重启数据库生效
gs_om -t restart

(1)闪回drop

timecapsule table classes to before drop;

在这里插入图片描述

(2)闪回truncte

timecapsule table classes to before truncate;

在这里插入图片描述

相关内容

热门资讯

海鲜品质如何保障?广州黄沙水产... 帝王蟹、象拔蚌、鲍鱼、各种鱼类……新春将至,餐桌上的热门海鲜成为市场宠儿,这些海鲜售价、品质如何? ...
从粤北粮仓到世界餐桌,韶关丝苗... 春节的团圆桌上,丰盛菜肴之间,一碗莹润白饭,是中国人不能缺位的家常滋味。岭南米之魅力,是连煲仔饭的锅...
广南县公园哪个最好人气高 广南县拥有众多各具特色的公园,在忙碌的生活中为人们提供了亲近自然、放松身心的好去处。哪个公园人气最高...
海口:骑楼老街人气旺 2月15日,游客在海口骑楼老街游玩。 春节假期首日,许多游客来到海口骑楼老街游玩,乐享假期。 新华社...
武陟县公园哪个最好人气高 武陟县的公园宛如城市中的颗颗明珠,为居民和游客提供了休闲放松、亲近自然的好去处。那么在众多公园中,哪...