修复账本数据库
前提条件
系统中需要有审计管理员或者具有审计管理员权限的角色。
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
214
数据库正常运行,并且对防篡改数据库执行了一系列增、删、改等操作,保证在查询时
段内有账本操作记录结果产生。
背景信息
当前的账本数据库机制为:全局区块表存储在CN 端,各个CN 数据独立。用户历史表
存储在DN 端,
历史表记录的数据为所在DN 防篡改表的数据变化。
当在异常情况或表
被损坏时,需要使用ledger_hist_repair(text, text)或ledger_gchain_repair(text, text)接口对
全局区块表或用户历史表进行修复,
修复后调用全局区块表或用户历史表校验接口结果
为true。
在触发数据重分布时,可能导致防篡改表和用户历史表数据不一致,此时需要使用
ledger_hist_repair(text, text)接口对指定DN 节点的用户历史表进行修复。
SELECT pg_catalog.ledger_hist_repair(schema_name text,table_name text);
修复后当前DN 节点调用历史表校验接口结果为true。
在CN 剔除、修复的场景下,可能导致全局区块表数据丢失或者与用户历史表不一致,
此时需要使用ledger_gchain_repair(text, text)接口,
对整个集群范围内的全局区块表进行
修复。
SELECT pg_catalog.ledger_gchain_repair(schema_name text,table_name text);
修复后调用全局区块表校验接口结果为true。
操作步骤
步骤1 使用EXECUTE DIRECT 对某个DN 节点,执行历史表修复操作。
postgres=# SELECT pg_catalog.ledger_hist_repair('ledgernsp', 'usertable');
查询结果如下:
ledger_hist_repair
--------------------
84e8bfc3b974e9cf
(1 row)
该结果表明当前节点用户历史表修复成功,修复造成的用户历史表hash 增量为
84e8bfc3b974e9cf。
步骤2 连接CN 登录数据库,执行全局区块表修复操作。
postgres=# SELECT pg_catalog.ledger_gchain_repair('ledgernsp', 'usertable');
查询结果如下:
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
215
ledger_gchain_repair
----------------------
a41714001181a294
(1 row)
该结果表明,全局区块表修复成功,且插入一条修复数据,其hash 值为
a41714001181a294。
----结束
8
接口参考