リッチ履歴データベースの作成

このトピックでは、Oracleデータベース接続の指定およびリッチ履歴データベースを作成するチャネルの選択に役立つ情報を示します。このデータベースを使用して、レジャーのアクティビティのアナリティクス・レポートおよびビジュアライゼーションを作成します。

リッチ履歴データベースとは

リッチ履歴データベースは、Oracle Blockchain Platform外部のもので、選択したチャネル上のブロックチェーン・レジャーのトランザクションに関するデータが含まれています。このデータベースを使用して、レジャーの活動に関するアナリティクス・レポートおよびビジュアライゼーションを作成します。

たとえば、リッチ履歴データベースを使用して、一定の期間内のすべてのカスタマの銀行の平均残高を確認したり、卸売業者から小売業者への商品の出荷にかかった時間を確認したりするアナリティクスを作成できます。

内部ではOracle Blockchain PlatformはHyperledger Fabric履歴データベースを使用してレジャーを管理し、コンソールでレジャートランザクション情報を表示します。この履歴データベースにアクセスできるのはチェーンコードのみで、分析的な問合せのデータ・ソースとしてHyperledger Fabric履歴データベースを公開することはできません。リッチ履歴データベースでは、外部Oracleデータベースが使用され、チャネルでコミットされるすべてのトランザクションに関する詳細が多く含まれています。このレベルのデータ・コレクションでは、リッチ履歴データベースがアナリティクス用の優れたデータ・ソースになります。リッチ履歴データベースによって収集されるデータの詳細は、「リッチ履歴データベースの表と列」を参照してください。

リッチ履歴データベースを作成するには、Oracle Autonomous Data WarehouseOracle Database Classic Cloud ServiceOracle Cloud Infrastructureの組合せなどのOracleデータベースのみ使用できます。Oracle Blockchain Platformのコンソールを使用して、Oracleデータベースへのアクセスと書込みを行うための接続文字列と資格証明を指定します。指定する資格証明はデータベースの資格証明で、Oracle Blockchain Platformでは管理されないことに注意してください。接続を作成した後、リッチ履歴データベースに含めるレジャー・データが含まれるチャネルを選択します。「リッチ履歴データベースの有効化と構成」を参照してください。

標準表またはブロックチェーン表を使用して、リッチ履歴データベースを格納できます。ブロックチェーン表は改ざん防止された追加専用の表で、セキュアなレジャーとして他の表とのトランザクションおよび問合せにも使用できます。

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 Database Classic Cloud Serviceへの接続を作成するために必要な情報は、Oracle Cloud Infrastructureコンソールで取得できます。

  1. インフラストラクチャ・コンソールから左上隅にあるナビゲーション・メニューをクリックし、「データベース」をクリックします。

  2. 接続するデータベースを見つけ、パブリックIPアドレスを記録します。

  3. 接続先のデータベースの名前をクリックし、次のフィールドの値を記録します:

    • 一意のデータベース名

    • ホスト・ドメイン名

    • ポート

  4. このデータベースからの読取り権限を持つデータベース・ユーザーのユーザー名およびパスワードを調べ、メモします。たとえば、ユーザーSYSTEMなどです。

ポート1521によるデータベース・アクセスの有効化

リッチ履歴データベースがポート1521を介してデータベースにアクセスできるようにするイングレス・ルールを追加します。

  1. Oracle Cloud Infrastructureホームページで、ナビゲーション・アイコンをクリックし、「データベース」の下の「DBシステム」をクリックします。

  2. 接続するデータベースをクリックします。

  3. 「仮想クラウド・ネットワーク」リンクをクリックします。

  4. 適切なサブネットに移動し、「セキュリティ・リスト」の下の「<ターゲット・データベース>のデフォルト・セキュリティ・リスト」をクリックします。

    「セキュリティ・リスト」ページが表示されます。

  5. 「すべてのルールの編集」をクリックします。

  6. 次の設定を使用してイングレス・ルールを追加し、パブリック・インターネットからの受信トラフィックがこのデータベース・ノードのポート1521に到達できるようにします:

    • ソースCIDR: 0.0.0.0/0

    • IPプロトコル: TCP

    • ソース・ポート範囲: すべて

    • 宛先ポート範囲: 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に登録されているデータベース・ユーザーに次の2つの権限があることを確認します:
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つ以上のピア・ノードが含まれている必要があります。

  1. リッチ履歴情報の格納に使用するOracleデータベースの接続情報および資格証明情報を入力します。
    1. コンソールに移動してオプション・ボタンをクリックし、「リッチ履歴の構成」をクリックします。このボタンは、ノード、チャネルおよびチェーンコードへの移動に使用するタブを含むバーの上にあります。
      リッチ履歴の構成ダイアログ・ボックスが表示されます。
    2. Oracleデータベースへのアクセスに必要なユーザー名とパスワードを入力します。
    3. 接続文字列フィールドに、リッチ履歴データの格納に使用するデータベースの接続文字列を入力します。ここに入力する内容は、使用するOracleデータベースによって異なります。
      • Oracle Autonomous Data Warehouseを使用する場合は、<username>adw_highのように入力します。Oracle Autonomous Data Warehouseの接続情報を確認するには、資格証明ウォレットZIPファイルに移動して、TNSファイルを開きます。
      • Oracle Database Classic Cloud ServiceOracle Cloud Infrastructureの組合せを使用する場合は、「Oracle Database Classic Cloud Service接続文字列の作成」を参照してください。
      • 自律型でないOracleデータベース(資格証明ウォレットを使用しないデータベース)を使用し、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など)を使用する場合、ウォレット・パッケージ・ファイル・フィールドを使用して必要な資格証明ウォレットのZIPファイルをアップロードします。このファイルにはクライアント資格証明が含まれ、Oracle自律型データベースから生成されます。

      ノート:

      リッチ履歴を構成した後にリッチ履歴の構成ダイアログ・ボックスを再度開くと、ウォレット・ファイル名は表示されません。他の設定を更新する場合は、ウォレットZIPファイルを再度アップロードしてから「保存」をクリックする必要があります。ウォレット・ファイル名が表示されていないときに「保存」をクリックすると、ウォレット・ファイルを使用しないように構成が更新されます。
    5. ブロックチェーン表を使用してリッチ履歴データベースを格納するには、データベース・ブロックチェーン表の使用を選択します。
      基礎となるデータベースは、ブロックチェーン表をサポートしている必要があります。
      • 表および行を保持する日数を指定するには、「基本構成」を選択し、表および行を保持する日数を入力します。表または行を永続的に保持するには、0を入力します。保持期間の値がこれ以上変更されないようにするには、「ロック済」を選択します。
      • データ定義言語(DDL)文を使用して表および行の保持を指定するには、拡張構成問合せを選択し、DDL文を入力します。
    6. 「保存」をクリックします。
  2. リッチ履歴データベースに書き込むチェーンコード・データを含むチャネルで、リッチ履歴を有効にします。
    1. コンソールに移動し、チャネル・タブを選択します。
    2. リッチ履歴データベースに書き込むチェーンコード・データを含むチャネルを特定します。詳細オプション・ボタンをクリックして、「リッチ履歴の構成」を選択します。
      リッチ履歴の構成ダイアログが表示されます。
    3. 「リッチ履歴の有効化」チェック・ボックスをクリックします。リッチ履歴データベースにプライベート・データ・コレクションを格納するには、プライベート・データ・コレクション名のリストをカンマで区切って入力します。プライベート・データ・コレクションの詳細は、「プライベート・データ・コレクションとは」を参照してください。リッチ履歴データベースにトランザクション詳細を追加するには、追加する詳細を選択します。「保存」をクリックします。
リッチ履歴データベースは構成されていますが、表はすぐにはデータベースに作成されません。関連する次のトランザクションまたはレジャー変更が発生すると、リッチ履歴データベースに表が作成されます。

リッチ履歴データベースへの接続の変更

リッチ履歴データベースの接続情報を変更できます。

表がチャネルのデータベースに作成された後は、ユーザー名とパスワードまたは接続文字列を変更しないかぎり、「保存」をクリックした後も、チャネルのリッチ履歴構成を変更しても効果はありません。ユーザー名とパスワードを変更すると、表が同じデータベースに作成されます。接続文字列および資格証明を変更すると、別のデータベースが構成され、関連する次のトランザクションまたはレジャーの変更後に表が作成されます。リッチ履歴データベースを標準表からブロックチェーン表に変更することはできず、資格証明または接続文字列も変更しないかぎり、保持時間を変更することはできません。
  1. コンソールに移動してオプション・ボタンをクリックし、「リッチ履歴の構成」をクリックします。このボタンは、ノード、チャネルおよびチェーンコードへの移動に使用するタブを含むバーの上にあります。
  2. 必要に応じて、Oracleデータベースへのアクセスに必要なユーザー名とパスワードを更新します。
  3. 必要に応じて、接続文字列フィールドで、リッチ履歴データの格納に使用するデータベースの接続文字列を変更します。ここに入力する内容は、使用するOracleデータベースによって異なります。
    • Oracle Autonomous Data Warehouseを使用する場合は、<username>adw_highのように入力します。Oracle Autonomous Data Warehouseの接続情報を確認するには、資格証明ウォレットZIPファイルに移動して、TNSファイルを開きます。
    • Oracle Database Classic Cloud ServiceOracle Cloud Infrastructureの組合せを使用する場合は、「Oracle Database Classic Cloud Service接続文字列の作成」を参照してください。
    • 自律型でないOracleデータベース(資格証明ウォレットを使用しないデータベース)を使用し、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など)を使用する場合、ウォレット・パッケージ・ファイル・フィールドを使用して必要な資格証明ウォレット・ファイルをアップロードまたは再アップロードします。このファイルにはクライアント資格証明が含まれ、Oracle自律型データベースから生成されます。

    ノート:

    リッチ履歴を構成した後にリッチ履歴の構成ダイアログ・ボックスを再度開くと、ウォレット・ファイル名は表示されません。他の設定を更新する場合は、ウォレットZIPファイルを再度アップロードしてから「保存」をクリックする必要があります。ウォレット・ファイル名が表示されていないときに「保存」をクリックすると、ウォレット・ファイルを使用しないように構成が更新されます。
  5. ブロックチェーン表を使用してリッチ履歴データベースを格納するには、データベース・ブロックチェーン表の使用を選択します。
    基礎となるデータベースは、ブロックチェーン表をサポートしている必要があります。
    • 表および行を保持する日数を指定するには、「基本構成」を選択し、表および行を保持する日数を入力します。表または行を永続的に保持するには、0を入力します。保持期間の値がこれ以上変更されないようにするには、「ロック済」を選択します。
    • データ定義言語(DDL)文を使用して表および行の保持を指定するには、拡張構成問合せを選択し、DDL文を入力します。
  6. 「保存」をクリックします。

リッチ履歴データベースにデータを書き込むチャネルの構成

チェーンコード・レジャー・データをリッチ履歴データベースに書き込むためにチャネルを有効にしたり、チャネルがリッチ履歴データベースにデータを書き込むことを停止できます。グローバル設定とは異なるリッチ履歴データベース構成を使用するように個々のチャネルを構成することもできます。

リッチ履歴データベースに書き込むチャネルを選択する前に、リッチ履歴データベースに接続するためのグローバル情報を指定する必要があります。「リッチ履歴データベースの有効化と構成」を参照してください。

表がチャネルのデータベースに作成された後は、ユーザー名とパスワードまたは接続文字列を変更しないかぎり、「保存」をクリックした後も、チャネルのリッチ履歴構成を変更しても効果はありません。ユーザー名とパスワードを変更すると、表が同じデータベースに作成されます。接続文字列および資格証明を変更すると、別のデータベースが構成され、関連する次のトランザクションまたはレジャーの変更後に表が作成されます。リッチ履歴データベースを標準表からブロックチェーン表に変更することはできず、資格証明または接続文字列も変更しないかぎり、保持時間を変更することはできません。

  1. コンソールに移動し、チャネル・タブを選択します。
  2. アクセスを変更するチャネルを探します。詳細オプション・ボタンをクリックして、「リッチ履歴の構成」を選択します。
    リッチ履歴の構成ダイアログが表示されます。
  3. チャネルのリッチ履歴データの収集を有効にするには、リッチ履歴の有効化チェック・ボックスを選択します。チャネルのリッチ履歴データの収集を無効にするには、リッチ履歴の有効化チェック・ボックスをクリアします。
  4. 異なるデータベースまたは異なる設定を使用してリッチ履歴データを収集するようにチャネルを構成するには、チャネル・レベル構成の使用を選択し、使用する設定を指定します。
    リッチ履歴設定の詳細は、「リッチ履歴データベースの有効化と構成」を参照してください。
  5. 「保存」をクリックします。

リッチ履歴ステータスの監視

リッチ履歴データベースを構成した後、コンソールを使用してリッチ履歴レプリケーション・ステータスを監視できます。

  1. コンソールに移動し、チャネル・タブを選択します。
  2. チャネル表で、監視するチャネルの「他のアクション」ボタンをクリックし、リッチ履歴ステータスをクリックします。
    レプリケーションおよび構成ステータスの詳細を含むリッチ履歴ステータス・ダイアログ・ボックスが表示されます。
  3. 「リフレッシュ」をクリックして、最新のステータスを表示します。

リッチ履歴へのアクセス制限

チャネル・ポリシーおよびアクセス制御リスト(ACL)を使用して、リッチ履歴データベースを構成し、リッチ履歴ステータスまたは構成情報を取得できる組織を制限できます。

デフォルトでは、チャネルへの管理アクセス権を持つすべての組織がリッチ履歴収集を構成でき、リッチ履歴ステータスおよび構成詳細を取得できます。このアクセスをファウンダ組織などに制限するには、チャネル・ポリシーを作成し、アクセスを制御するリソースにポリシーを適用します。
  1. コンソールに移動し、チャネル・タブを選択します。
    「チャネル」タブが表示されます。チャネル表にはネットワーク上のすべてのチャネルのリストが表示されます。
  2. チャネル表で、アクセスを制限するチャネルの名前をクリックします。
  3. チャネル・ポリシーをクリックし、リッチ履歴機能にアクセスする組織メンバーを含む署名ポリシーを作成します。
    チャネル・ポリシーの詳細は、「チャネル・ポリシーとACLの使用」を参照してください。
    たとえば、ファウンダ組織のIDのみを含み、参加者組織のIDは含まないポリシーを作成します。
  4. 「ACL」をクリックします。
  5. リソース表で、新しいポリシーを使用するように更新するリソースを特定します。リソースの「展開」をクリックし、リソースに割り当てるポリシーを選択します
    次の表は、リッチ履歴へのアクセスを制御するリソースを示しています。
    リソース アクセス制御
    obpadmin/ConfigureRichHistoryChannel チャネルのリッチ履歴の構成、有効化および無効化を制御します。
    obpadmin/GetRichHistoryChannelStatus チャネルのリッチ履歴レプリケーション・ステータスの取得を制御します。
    obpadmin/GetRichHistoryChannelConfig チャネルの現在のリッチ履歴構成の取得を制御します。
  6. ACLの更新をクリックします。
リッチ履歴アクセスは、新しいポリシーによって制御されるようになりました。新しいポリシーに含まれていない組織メンバーは、ポリシーによって制御されているリソースにアクセスしようとするとエラー・メッセージを受け取ります。

リッチ履歴データベースの表と列

リッチ履歴データベースには、チャネルごとに履歴、状態および最新の高さの3つの表が含まれています。チェーンコードのレジャー・トランザクションに関するアナリティクスを作成するときは、履歴表および状態表を問い合せます。リッチ履歴を有効にするときにトランザクション詳細を選択することを選択した場合は、トランザクション詳細を含む追加の表が作成されます。

履歴表

<instanceName><channelName>_hist表には、レジャー履歴が含まれています。この表のデータは、チェーンコードID、使用されているキー、トランザクションが有効であったかどうか、キーに割り当てられている値などを示します。

valueおよびvalueJson列は、相互に排他的に使用されることに注意してください。キー値が有効なjsonの場合、その値はvalueJson列に設定されます。それ以外の場合は、値はvalue列に設定されます。valueJson列はデータベースでJSON列として設定されます。つまり、ユーザーが通常のOracle JSON固有の拡張機能を使用してその列を問い合せることができるということです。

構成されている場合、プライベート・データもこの表に格納されます。プライベート・データの場合、チェーンコードIDは次の形式を使用します: <chaincodeName>$$<collectionName>

データ型
chaincodeId VARCHAR2 (256)
key   VARCHAR2 (1024)
txnIsValid     NUMBER (1)
value VARCHAR2 (4000)
valueJson CLOB
blockNo NUMBER NOT NULL
txnNo NUMBER NOT NULL
txnId VARCHAR2 (128)  
txnTimestamp TIMESTAMP
txnIsDelete NUMBER (1)

状態表

<instanceName><channelName>_state表には、状態データベースからレプリケートされたデータ値が含まれています。台帳の状態に関するアナリティクスを作成する場合、状態表に問合せを行います。

valueおよびvalueJson列は、相互に排他的に使用されることに注意してください。キー値が有効なjsonの場合、その値はvalueJson列に設定されます。それ以外の場合は、値はvalue列に設定されます。valueJson列はデータベースでJSON列として設定されます。つまり、ユーザーが通常のOracle JSON固有の拡張機能を使用してその列を問い合せることができるということです。

データ型
chaincodeId VARCHAR2 (256)
key VARCHAR2 (1024)
value VARCHAR2 (4000) 
valueJson CLOB
blockNo NUMBER
txnNo NUMBER

最新の高さの表

<instanceName><channelName>_last表は、Oracle Blockchain Platformで内部的に使用され、リッチ履歴データベースに記録されたブロックの高さを追跡します。リッチ履歴データベースが最新か、すべてのチェーンコード・トランザクションがリッチ履歴データベースに記録されたかを判断するものです。アナリティクスのためにこのデータベースを問い合せることはできません。

トランザクション詳細表

<instanceName><channelName>_more表には、コミット済トランザクションに関連する属性が含まれます。リッチ履歴データベースを有効にする場合、この表に記録する属性を選択できます。トランザクション詳細表では、エンドーサ・トランザクションに関する情報のみが取得され、構成トランザクションやその他の種類のHyperledger Fabricトランザクションに関する情報は取得されません。

データ型
CHAINCODEID VARCHAR2 (256)
BLOCKNO NUMBER
TXNNO NUMBER
TXNID VARCHAR2(128)
TXNTIMESTAMP TIMESTAMP
SUBMITTERCN VARCHAR2(512)
SUBMITTERORG VARCHAR2(512)
SUBMITTEROU VARCHAR2(512)
CHAINCODETYPE VARCHAR2(32)
VALIDATIONCODENAME VARCHAR2(32)
ENDORSEMENTS CLOB
INPUTS CLOB
EVENTS CLOB
RESPONSESTATUS NUMBER(0)
RESPONSEPAYLOAD VARCHAR2(1024)
RWSET CLOB
BLOCKCREATORCN VARCHAR2(512)
BLOCKCREATORORG VARCHAR2(512)
BLOCKCREATOROU VARCHAR2(512)
CONFIGBLOCKNUMBER NUMBER(0)
CONFIGBLOCKCREATORCN VARCHAR2(512)
CONFIGBLOCKCREATORORG VARCHAR2(512)
CONFIGBLOCKCREATOROU VARCHAR2(512)

ノート:

  • 組織(ORG)および組織単位(OU)はアイデンティティ証明書によって制御され、これは複数の値に割り当てることができるということです。表の値のカンマ区切りリストとして取得されます。
  • アイデンティティの場合、表には証明書の「サブジェクト」部分に関する情報のみが含まれ、「発行者」に関する情報は含まれません。
  • RWSET列には、エンドースメント中に実行されたすべてのチェーンコード(同じレジャー内)に対する操作が含まれます。そのため、通常はlsccの読取り操作と実際のチェーンコード・ネームスペース操作の両方が表示されます。