【openGauss】账本机制与闪回特性使用

账本机制

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

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类型的表才支持闪回
在这里插入图片描述

前提条件:

  • 指定用户创建表时默认使用USTORE存储引擎(全局配置,enable_default_ustore_table=on),也可以在创建表时指定(作用于当前表,在建表语句后,with(storage_type=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;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhouwhui

这是一个你请我恰饭的机会呀!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值