创建富历史记录数据库

本主题包含的信息可帮助您指定 Oracle 数据库连接并选择创建富历史记录数据库的渠道。您将使用该数据库生成分类账活动的分析报告和可视化。

什么是丰富的历史数据库?

丰富的历史记录数据库是 Oracle Blockchain Platform 外部的,其中包含有关所选渠道上区块链账本交易的数据。您可以使用此数据库创建分析报告并可视化分类账的活动。

例如,使用丰富的历史记录数据库,您可以创建分析来了解银行中所有客户的平均余额,或者从批发商向零售商发运商品所用的时间。

在内部,Oracle Blockchain Platform 使用 Hyperledger Fabric 历史记录数据库来管理分类账,并在控制台中向您提供分类账事务处理信息。只有链代码可以访问此历史记录数据库,您无法将 Hyperledger Fabric 历史记录数据库公开为分析查询的数据源。丰富的历史记录数据库使用外部 Oracle 数据库,其中包含有关在渠道上提交的每个事务处理的许多详细信息。这种级别的数据收集使丰富的历史记录数据库成为分析的优秀数据源。有关富历史记录数据库收集的数据的信息,请参阅富历史记录数据库表和列

您只能将 Oracle 数据库(例如 Oracle Autonomous Data WarehouseOracle Database Classic Cloud Service )与 Oracle Cloud Infrastructure 结合使用来创建丰富的历史记录数据库。您可以使用 Oracle Blockchain Platform 控制台提供连接字符串和身份证明以访问和写入 Oracle 数据库。请注意,您提供的身份证明是数据库的身份证明,Oracle Blockchain Platform 不管理这些身份证明。创建连接后,您将选择包含要包含在富历史记录数据库中的分类账数据的渠道。请参见 Enable and Configure the Rich History Database

您可以使用标准表或区块链表来存储丰富的历史记录数据库。区块链表是防篡改的仅附加表,可以用作安全分类账,同时还可以用于与其他表的事务处理和查询。有关详细信息,请参阅 Oracle Blockchain Table

您可以使用任何分析工具(例如 Oracle Analytics CloudOracle Data Visualization Cloud Service )访问丰富的历史记录数据库并创建分析报告或数据可视化。

创建 Oracle Database Classic Cloud Service 连接字符串

您必须从部署在 Oracle Cloud Infrastructure 上的 Oracle Database Classic Cloud Service 收集信息,以构建丰富历史记录数据库所需的连接字符串。还必须允许通过端口 1521 访问数据库。

查找并记录 Oracle Database Classic Cloud Service 信息

Oracle Cloud Infrastructure 控制台中提供了创建与 Oracle Database Classic Cloud Service 的连接所需的信息。

  1. 在 Infrastructure 控制台中,单击左上角的导航菜单,然后单击数据库

  2. 找到要连接到的数据库并记录公共 IP 地址。

  3. 单击要连接到的数据库的名称,并在以下字段中记录值:

    • 数据库的唯一名称

    • 主机域名

    • 端口

  4. 查找具有从此数据库读取权限的数据库用户的用户名和密码,并记下这些用户名和密码。例如,用户 SYSTEM。

允许通过端口 1521 访问数据库

添加允许富历史记录数据库通过端口 1521 访问数据库的入站规则。

  1. Oracle Cloud Infrastructure 主页中,单击导航图标,然后在数据库下单击数据库系统

  2. 单击要连接到的数据库。

  3. 单击虚拟云网络链接。

  4. 导航到相应的子网,然后在安全列表下,单击 <Target Database> 的默认安全列表

    将显示“安全列表”页。

  5. 单击编辑所有规则

  6. 添加入站规则以允许来自公共 Internet 的任何传入流量通过以下设置到达此数据库节点上的端口 1521:

    • 来源 CIDR :0.0.0.0/0

    • IP 协议:TCP

    • SOURCE PORT RANGE :全部

    • 目的地端口范围:1521

    • 允许:以下端口的 TCP 流量:1521

构建连接字符串

启用对 Oracle 数据库的访问后,使用在配置富历史记录对话框中收集的信息来构建连接字符串。

使用以下语法构造连接字符串: <publicIP><portNumber>/<database unique name>。<host domain name>

例如,192.0.2.0:1521/CustDB_iad1vm.sub05031027070.customervcnwith.oraclevcn.example.com

确保数据库用户具有正确的权限

为了使丰富的历史记录功能能够管理其数据库会话并从临时数据库或网络停机中恢复,请确保注册到 Oracle Blockchain Platform 的数据库用户具有以下两个权限:
grant select on v_$session to <user>;
grant alter system to <user>;
此外,如果富历史记录数据库使用 Oracle Autonomous Data Warehouse ,则数据库用户必须具有以下权限:
grant unlimited tablespace to <user>;
如果数据库用户已经没有这些权限,则必须由系统数据库管理员授予这些权限。

如果没有这些权限,Oracle Blockchain Platform 可以复制到数据库,但无法从导致数据库会话损坏的情况中恢复,这会阻止富历史记录在很长一段时间内追赶最近的事务处理。如果没有对 Oracle Autonomous Data Warehouse 的这些权限,则不会保存丰富的历史记录数据。

启用和配置富历史记录数据库

使用控制台提供数据库连接信息,并选择包含要写入到富历史记录数据库的链代码分类账数据的渠道。默认情况下,渠道未启用将数据写入富历史记录数据库。

请注意以下信息:

  • 每个区块链网络成员配置自己的丰富历史记录数据库。

  • 必须使用 Oracle 数据库。不支持其他数据库类型。

  • 写入富历史记录数据库的每个通道必须至少包含一个对等节点。

  1. 输入要用于存储丰富历史记录信息的 Oracle 数据库的连接和身份证明信息。
    1. 转到控制台并单击选项按钮,然后单击配置富历史记录。此按钮位于条形图上方,其中包含用于导航到节点、通道和链代码的选项卡。
      此时将显示配置富历史记录对话框。
    2. 输入访问 Oracle 数据库所需的用户名和密码。
    3. 连接字符串字段中,输入用于存储富历史记录数据的数据库的连接字符串。您在此处输入的内容取决于您使用的 Oracle 数据库。
      • 如果您使用的是 Oracle Autonomous Data Warehouse ,则将输入类似于 <username>adw_high 的内容。要查找 Oracle Autonomous Data Warehouse 的连接信息,请转到其身份证明 wallet ZIP 文件并打开其 TNS 文件。
      • 如果您将 Oracle Database Classic Cloud ServiceOracle Cloud Infrastructure 一起使用,请参阅创建 Oracle Database Classic Cloud Service 连接字符串
      • 如果您使用的是非自治 Oracle 数据库(不使用身份证明 Wallet 的数据库),并且希望使用 sys 用户连接到数据库,则必须将 ?as=sys[dba|asm|oper] 附加到连接字符串。例如,123.123.123.123:1521/example.oraclevcn.com?as=sysdba
    4. 如果您使用的是 Oracle Cloud 自治数据库实例(例如 Oracle Autonomous Data WarehouseOracle Autonomous Transaction Processing ),则使用 Wallet Package File 字段上载所需的身份证明 wallet ZIP 文件。此文件包含客户端身份证明,并从 Oracle 自治数据库生成。

      注意:

      配置富历史记录后,再次打开配置富历史记录对话框时,不会显示 wallet 文件名。如果更新其他设置,则必须先重新上载 wallet ZIP 文件,然后再单击保存。如果在未显示 Wallet 文件名时单击保存,则配置将更新为不使用 Wallet 文件。
    5. 要使用区块链表存储丰富的历史记录数据库,请选择使用数据库区块链表
      基础数据库必须支持区块链表。
      • 要指定保留表和行的天数,请选择基本配置,然后输入保留表和行的天数。输入 0 可永久保留表或行。要防止对保留值进行进一步更改,请选择已锁定
      • 要使用数据定义语言 (Data Definition Language,DDL) 语句指定表和行保留,请选择高级配置查询,然后输入 DDL 语句。
    6. 单击保存
  2. 在包含要写入富历史记录数据库的链代码数据的渠道上启用富历史记录。
    1. 转到控制台并选择渠道选项卡。
    2. 找到包含要写入富历史记录数据库的链代码数据的通道。单击其更多选项按钮并选择配置富历史记录
      此时将显示 Configure Rich History 对话框。
    3. 单击启用富历史记录复选框。要将专用数据收集存储在富历史记录数据库中,请输入专用数据收集名称的列表(以逗号分隔)。有关专用数据收集的详细信息,请参阅什么是专用数据收集?。要将事务处理详细信息添加到富历史记录数据库,请选择要添加的详细信息。单击保存
配置了富历史记录数据库,但不会立即在数据库中创建表。发生下一次相关的事务处理或分类账更改时,将在丰富的历史记录数据库中创建表。

修改与富历史记录数据库的连接

您可以更改富历史记录数据库的连接信息。

在数据库中为通道创建表后,修改通道的富历史记录配置不会产生任何影响,即使单击保存之后也是如此,除非您更改用户名和密码或连接字符串。如果更改用户名和密码,则会在同一数据库中创建表。如果更改连接字符串和身份证明,则会配置其他数据库,并在下次更改相关事务处理或分类账后创建表。不能将富历史记录数据库从标准表更改为区块链表,并且不能更改保留时间,除非还更改身份证明或连接字符串。
  1. 转到控制台并单击选项按钮,然后单击配置富历史记录。此按钮位于条形图上方,其中包含用于导航到节点、通道和链代码的选项卡。
  2. 如果需要,请更新访问 Oracle 数据库所需的用户名和密码。
  3. 如果需要,在连接字符串字段中,修改用于存储富历史记录数据的数据库的连接字符串。您在此处输入的内容取决于您使用的 Oracle 数据库。
    • 如果您使用的是 Oracle Autonomous Data Warehouse ,则将输入类似于 <username>adw_high 的内容。要查找 Oracle Autonomous Data Warehouse 的连接信息,请转到其身份证明 wallet ZIP 文件并打开其 TNS 文件。
    • 如果您将 Oracle Database Classic Cloud ServiceOracle Cloud Infrastructure 一起使用,请参阅创建 Oracle Database Classic Cloud Service 连接字符串
    • 如果您使用的是非自治 Oracle 数据库(不使用身份证明 Wallet 的数据库),并且希望使用 sys 用户连接到数据库,则必须将 ?as=sys[dba|asm|oper] 附加到连接字符串。例如,123.123.123.123:1521/example.oraclevcn.com?as=sysdba
  4. 如果您使用的是 Oracle Cloud 自治数据库实例(例如 Oracle Autonomous Data WarehouseOracle Autonomous Transaction Processing ),则使用 Wallet Package File 字段上载或重新上载所需的身份证明 wallet 文件。此文件包含客户端身份证明并从 Oracle 自治数据库生成。

    注意:

    配置富历史记录后,再次打开配置富历史记录对话框时,不会显示 wallet 文件名。如果更新其他设置,则必须先重新上载 wallet ZIP 文件,然后再单击保存。如果在未显示 Wallet 文件名时单击保存,则配置将更新为不使用 Wallet 文件。
  5. 要使用区块链表存储丰富的历史记录数据库,请选择使用数据库区块链表
    基础数据库必须支持区块链表。
    • 要指定保留表和行的天数,请选择基本配置,然后输入保留表和行的天数。输入 0 可永久保留表或行。要防止对保留值进行进一步更改,请选择已锁定
    • 要使用数据定义语言 (Data Definition Language,DDL) 语句指定表和行保留,请选择高级配置查询,然后输入 DDL 语句。
  6. 单击保存

配置将数据写入富历史记录数据库的通道

您可以允许渠道将链代码分类账数据写入富历史记录数据库,并且可以阻止渠道将数据写入富历史记录数据库。您还可以将单个通道配置为使用与全局设置不同的富历史记录数据库配置。

必须指定要连接到富历史记录数据库的全局信息,然后才能选择写入富历史记录数据库的通道。请参见 Enable and Configure the Rich History Database

在数据库中为通道创建表后,修改通道的富历史记录配置不会产生任何影响,即使单击保存之后也是如此,除非您更改用户名和密码或连接字符串。如果更改用户名和密码,则会在同一数据库中创建表。如果更改连接字符串和身份证明,则会配置其他数据库,并在下次更改相关事务处理或分类账后创建表。不能将富历史记录数据库从标准表更改为区块链表,并且不能更改保留时间,除非还更改身份证明或连接字符串。

  1. 转到控制台并选择渠道选项卡。
  2. 找到要修改其访问权限的渠道。单击其更多选项按钮并选择配置富历史记录
    此时将显示 Configure Rich History 对话框。
  3. 要为渠道启用丰富历史记录数据的收集,请选中启用丰富历史记录复选框。要为渠道禁用富历史记录数据收集,请清除启用富历史记录复选框。
  4. 要将通道配置为使用其他数据库或其他设置收集富历史记录数据,请选择使用通道级别配置,然后指定要使用的设置。
    有关富历史记录设置的详细信息,请参阅启用和配置富历史记录数据库
  5. 单击保存

监视富历史记录状态

配置富历史记录数据库后,可以使用控制台监视富历史记录复制状态。

  1. 转到控制台并选择渠道选项卡。
  2. 在通道表中,单击要监视的通道的更多操作按钮,然后单击丰富的历史记录状态
    此时将显示 Rich History Status 对话框,其中包括有关复制和配置状态的详细信息。
  3. 单击刷新以显示最新状态。

限制对富历史记录的访问

您可以使用渠道策略和访问控制列表 (access control list,ACL) 来限制可以配置富历史记录数据库并检索富历史记录状态或配置信息的组织。

默认情况下,对渠道具有管理访问权限的所有组织都可以配置丰富的历史记录收集,并且可以检索丰富的历史记录状态和配置详细信息。要将此访问权限限制为创始人组织,请创建渠道策略并将该策略应用于控制访问权限的资源。
  1. 转到控制台并选择渠道选项卡。
    此时将显示 Channels(通道)选项卡。通道表包含网络上所有通道的列表。
  2. 在渠道表中,单击要限制访问的渠道的名称。
  3. 单击渠道策略,然后创建一个签名策略,其中包括将访问丰富历史记录功能的组织成员。
    有关渠道策略的更多信息,请参见 Work With Channel Policies and ACLs
    例如,创建一个仅包括创建者组织的标识的策略,而不包括任何参与者组织的标识。
  4. 单击 ACL
  5. 在“资源”表中,找到要更新以使用新策略的资源。单击资源的展开,然后选择要分配给资源的策略
    下表显示了控制对丰富历史记录的访问的资源。
    资源 访问控制
    obpadmin/ConfigureRichHistoryChannel 控制为渠道配置、启用和禁用富历史记录。
    obpadmin/GetRichHistoryChannelStatus 控制为通道检索富历史记录复制状态。
    obpadmin/GetRichHistoryChannelConfig 控制检索渠道的当前富历史记录配置。
  6. 单击更新 ACL
丰富的历史记录访问现在由新策略控制。未包含在新策略中的组织成员在尝试访问由该策略控制的资源时将收到错误消息。

丰富的历史记录数据库表和列

丰富的历史记录数据库包含每个通道的三个表:历史记录、状态和最新高度。创建链代码的分类账事务处理分析时,将查询历史记录和状态表。如果您在启用富历史记录时选择了任何事务处理详细信息,则将创建包含事务处理详细信息的附加表。

“历史记录”表

<instanceName><channelName> _hist 表包含分类账历史记录。此表中的数据告诉您链代码 ID、使用的关键字、事务处理是否有效、分配给关键字的值等。

请注意, valuevalueJson 列以互斥方式使用。也就是说,当键值是有效的 json 时,该值将设置为 valueJson 列。否则,将在 value 列中设置该值。valueJson 列在数据库中设置为 json 列,这意味着用户可以使用通常特定于 Oracle JSON 的扩展来查询该列。

如果已配置,专用数据也会存储在此表中。对于专用数据,链代码 ID 使用以下格式: <chaincodeName> $$ <collectionName>

数据类型
chaincodeId VARCHAR2 (256)
钥匙 VARCHAR2 (1024)
txnIsValid     数字 (1)
value VARCHAR2 (4000)
valueJson CLOB
blockNo 数字非空值
txnNo 编号 NOT NULL
txnId VARCHAR2 (128)  
txnTimestamp TIMESTAMP
txnIsDelete 数字 (1)

状态表

<instanceName><channelName> _state 表包含从状态数据库复制的数据值。创建有关分类账状态的分析时,将查询状态表。

请注意, valuevalueJson 列以互斥方式使用。也就是说,当键值是有效的 json 时,该值将设置为 valueJson 列。否则,将在 value 列中设置该值。valueJson 列在数据库中设置为 json 列,这意味着用户可以使用通常特定于 Oracle JSON 的扩展来查询该列。

数据类型
chaincodeId VARCHAR2 (256)
VARCHAR2 (1024)
value VARCHAR2 (4000) 
valueJson CLOB
blockNo NUMBER
txnNo NUMBER

最新高度表

<instanceName><channelName> _last 表在内部由 Oracle Blockchain Platform 用于跟踪富历史记录数据库中记录的块高度。它确定富历史记录数据库的当前状态,以及是否所有链代码事务处理都记录在富历史记录数据库中。无法查询此数据库进行分析。

事务处理详细信息表

<instanceName><channelName> _more 表包含与已提交事务处理相关的属性。启用富历史记录数据库时,您可以选择要在此表中记录的这些属性。事务处理详细信息表仅捕获有关背书事务处理的信息,而不捕获配置事务处理或任何其他类型的超级账本架构事务处理。

数据类型
链代码标识 VARCHAR2 (256)
预留房编号 NUMBER
TXNNO NUMBER
TXNID VARCHAR2(128)
交易时间戳 TIMESTAMP
提交者 VARCHAR2(512)
提交组织 VARCHAR2(512)
提交者 VARCHAR2(512)
链代码类型 VARCHAR2(32)
验证码名称 VARCHAR2(32)
背书 CLOB
输入 CLOB
事件 CLOB
RESPONSESTATUS 数字 (0)
RESPONSEPAYLOAD VARCHAR2(1024)
活动 CLOB
块创建者 VARCHAR2(512)
BLOCKCREATORORG VARCHAR2(512)
BLOCKCREATOROU VARCHAR2(512)
配置块编号 数字 (0)
配置块创建程序 VARCHAR2(512)
配置块创建者 ORG VARCHAR2(512)
配置块创建者 VARCHAR2(512)

注意:

  • 组织 (ORG) 和组织单位 (OU) 由身份证书驱动,这意味着可以将其分配给多个值。它们在表值中以逗号分隔列表的形式捕获。
  • 对于身份,该表仅包含有关证书的“主题”部分的信息,不包括“发行人”部分。
  • RWSET 列包含对背书期间执行的所有链代码(在同一分类账中)的操作。因此,您通常会看到 lscc 读取操作和实际链代码名称空间操作。