修复账本数据库

前提条件

  • 系统中需要有审计管理员或者具有审计管理员权限的角色。
  • 数据库正常运行,并且对防篡改数据库执行了一系列增、删、改等操作,保证在查询时段内有账本操作记录结果产生。

背景信息

  • 当在异常情况或表被损坏时需要使用ledger_gchain_repair(tex…或ledger_hist_repair(text,…接口对全局区块表或用户历史表进行修复,修复后调用全局区块表或用户历史表校验接口结果为true。
  • 修复用户历史表的接口为pg_catalog.ledger_hist_repair,操作为:

1. SELECT pg_catalog.ledger_hist_repair(schema_name text,table_name text);

如果修复成功,函数返回修复过程中用户历史表hash的增量。 - 修复全局区块表的接口为pg_catalog.ledger_gchain_repair,操作为:

1. SELECT pg_catalog.ledger_gchain_repair(schema_name text,table_name text);

如果修复成功,函数返回修复过程中全局区块表hash的增量。

操作步骤

  1. 执行历史表修复操作。

1. openGauss=# SELECT pg_catalog.ledger_hist_repair('ledgernsp', 'usertable');

查询结果如下:

1. ledger_hist_repair 2. -------------------- 3. 84e8bfc3b974e9cf 4. (1 row)

该结果表明当前节点用户历史表修复成功,修复造成的用户历史表hash增量为84e8bfc3b974e9cf。 2. 执行全局区块表修复操作。

1. openGauss=# SELECT pg_catalog.ledger_gchain_repair('ledgernsp', 'usertable');

查询结果如下:

1. ledger_gchain_repair 2. ---------------------- 3. a41714001181a294 4. (1 row)

该结果表明,全局区块表修复成功,且插入一条修复数据,其hash值为a41714001181a294。