创建富历史记录数据库

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

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

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

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

在内部,Oracle Blockchain Platform 使用超级账本架构历史记录数据库来管理账本并在控制台中向您提供账本事务处理信息。只有链代码可以访问此历史记录数据库,并且您无法将超级账本架构历史记录数据库公开为分析查询的数据源。富历史记录数据库使用外部 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 表

您可以使用任何分析工具(例如 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. 找到要连接到的数据库并记录 Public IP 地址。

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

    • 数据库唯一名称

    • 主机名

    • 端口

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

启用通过端口 1521 进行数据库访问

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

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

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

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

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

    此时将显示 "Security List" 页面。

  5. 单击编辑所有规则

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

    • 源 CIDR :0.0.0.0/0

    • IP 协议:TCP

    • SOURCE PORT RANGE(SOURCE 端口范围):全部

    • 目标端口范围: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. 转到控制台并单击 Options(选项)按钮,然后单击 Configure Rich History(配置富历史记录)。此按钮位于栏上方,其中包含用于导航到节点、通道和链代码的选项卡。
      此时将显示 Configure Rich History 对话框。
    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. 要使用区块链表存储丰富的历史记录数据库,请选择使用数据库区块链表
      基础数据库必须支持区块链表。有关详细信息,请参阅 Oracle Blockchain 表
      • 要指定保留表和行的天数,请选择 Basic Configuration(基本配置),然后输入保留表和行的天数。输入 0 可永久保留表或行。要防止进一步更改保留值,请选择锁定
      • 要使用数据定义语言 (Data Definition Language,DDL) 语句指定表和行保留,请选择高级配置查询,然后输入 DDL 语句。
    6. 单击保存
  2. 在包含要写入富历史记录数据库的链代码数据的渠道上启用富历史记录。
    1. 转到控制台并选择渠道选项卡。
    2. 找到包含要写入富历史记录数据库的链代码数据的渠道。单击其 More Options(更多选项)按钮并选择 Configure Rich History(配置富历史记录)
      此时将显示 Configure Rich History 对话框。
    3. 单击启用富历史记录复选框。要在丰富的历史记录数据库中存储专用数据收集,请输入专用数据收集名称的列表,以逗号分隔。有关专用数据收集的详细信息,请参阅什么是专用数据收集?。要将事务处理详细信息添加到富历史记录数据库,请选择要添加的详细信息。单击保存
已配置富历史记录数据库,但不会立即在数据库中创建表。下次相关事务处理或分类账更改发生时,将在丰富的历史记录数据库中创建表。

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

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

在数据库中为通道创建表后,即使在单击保存之后,修改通道的丰富历史记录配置也不会生效,除非您更改用户名和密码或连接字符串。如果更改用户名和密码,则会在同一数据库中创建表。如果更改连接字符串和凭证,则会配置其他数据库,并在下次更改相关事务处理或分类账后创建表。无法将丰富的历史记录数据库从标准表更改为区块链表,并且不能更改保留时间,除非您还更改了身份证明或连接字符串。
  1. 转到控制台并单击 Options(选项)按钮,然后单击 Configure Rich History(配置富历史记录)。此按钮位于栏上方,其中包含用于导航到节点、通道和链代码的选项卡。
  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. 要使用区块链表存储丰富的历史记录数据库,请选择使用数据库区块链表
    基础数据库必须支持区块链表。
    • 要指定保留表和行的天数,请选择 Basic Configuration(基本配置),然后输入保留表和行的天数。输入 0 可永久保留表或行。要防止进一步更改保留值,请选择锁定
    • 要使用数据定义语言 (Data Definition Language,DDL) 语句指定表和行保留,请选择高级配置查询,然后输入 DDL 语句。
  6. 单击保存

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

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

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

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

  1. 转到控制台并选择渠道选项卡。
  2. 找到要修改其访问权限的渠道。单击其 More Options(更多选项)按钮并选择 Configure Rich History(配置富历史记录)
    此时将显示 Configure Rich History 对话框。
  3. 要为渠道启用富历史记录数据的收集,请选中启用富历史记录复选框。要禁用通道丰富历史记录数据的收集,请清除启用丰富历史记录复选框。
  4. 要配置通道以使用其他数据库或其他设置收集富历史记录数据,请选择使用通道级别配置,然后指定要使用的设置。
    有关丰富历史记录设置的更多信息,请参见 Enable and Configure the Rich History Database
  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
提交者 CN VARCHAR2(512)
提交者组织 VARCHAR2(512)
提交人 VARCHAR2(512)
链代码类型 VARCHAR2(32)
验证码名称 VARCHAR2(32)
背书 CLOB
输入 CLOB
事件 CLOB
响应 数字 (0)
RESPONSEPAYLOAD VARCHAR2(1024)
重新设置 CLOB
BLOCKCREATORCN VARCHAR2(512)
BLOCKCREATORORG VARCHAR2(512)
BLOCKCREATOROU VARCHAR2(512)
配置块编号 数字 (0)
配置块创建程序 VARCHAR2(512)
CONFIGBLOCKCREATORORG VARCHAR2(512)
CONFIGBLOCKCREATOROU VARCHAR2(512)

注意:

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