
# 归档账本数据库
#### 前提条件
- 系统中需要有审计管理员或者具有审计管理员权限的角色。
- 数据库正常运行，并且对防篡改数据库执行了一系列增、删、改等操作，保证在查询时段内有账本操作记录结果产生。
- 数据库已经正确配置审计文件的存储路径audit_directory。
 
#### 背景信息
- 账本数据库归档功能目前提供两种归档接口，分别为：ledger_hist_archive(text, text)和ledger_gchain_archive(text, text)。账本数据库接口仅审计管理员可以调用。
- 归档用户历史表的接口为pg_catalog.ledger_hist_archive，表示归档当前DN的用户历史表数据。执行操作为：
  ```
  SELECT pg_catalog.ledger_hist_archive(schema_name text,table_name text);
  ```
  如果归档成功，接口返回t，反之则提示失败原因并返回f。
  
- 归档全局区块表的接口为pg_catalog.ledger_gchain_archive，表示归档当前CN的全局区块表数据。执行操作为：
  ```
  SELECT pg_catalog.ledger_gchain_archive();
  ```
  如果归档成功，接口返回t，反之则提示失败原因并返回f。
  
 
#### 操作步骤
1. 使用EXECUTE DIRECT对某个DN节点进行归档操作。 
   ```
   gaussdb=# EXECUTE DIRECT ON (datanode1) 'select pg_catalog.ledger_hist_archive(''ledgernsp'', ''usertable'');';
   ```
   查询结果如下：
   ```
   ledger_hist_archive
   ---------------------
    t
   (1 row)
   ```
   用户历史表将归档为一条数据：
   ```
   gaussdb=# EXECUTE DIRECT ON (datanode1) 'SELECT * FROM blockchain.ledgernsp_usertable_hist;';
    rec_num |     hash_ins     |     hash_del     |             pre_hash
   ---------+------------------+------------------+----------------------------------
          3 | e78e75b00d396899 | 8fcd74a8a6a4b484 | fd61cb772033da297d10c4e658e898d7
   (1 row)
   ```
   该结果表明datanode1节点用户历史表归档成功。
   
   
2. 连接CN执行全局区块表归档操作。 
   ```
   gaussdb=# SELECT pg_catalog.ledger_gchain_archive();
   ```
   查询结果如下：
   ```
   ledger_gchain_archive
   -----------------------
    t
   (1 row)
   ```
   全局区块表将以用户表为单位归档为N（用户表数量）条数据：
   ```
   gaussdb=# SELECT * FROM gs_global_chain;
    blocknum |  dbname  | username |           starttime           | relid |  relnsp   |  relname  |     relhash      |            globalhash            | txcommand
   ----------+----------+----------+-------------------------------+-------+-----------+-----------+------------------+----------------------------------+-----------
           1 | testdb | libc     | 2021-05-10 19:59:38.619472+08 | 16388 | ledgernsp | usertable | 57c101076694b415 | be82f98ee68b2bc4e375f69209345406 | Archived.
   (1 row)
   ```
   该结果表明，当前coordinator节点全局区块表导出成功。
   
   
 
