Keys to the Oracle Cloud indexページ▶▶ 

Keys to the Oracle Cloud

第5回:【MICRO DATA編】
PaaSレイヤの実装②(History DB)

大塚紳一郎, 2019年12月


著者紹介


大塚 紳一郎(おおつか しんいちろう)


2003年、株式会社野村総合研究所に新卒で入社。ミッションクリティカルシステムにおけるOracle Databaseの構築、運用、コンサルティングに関して15年以上の経験を持つ。毎年サンフランシスコで開催される世界最大のテクノロジーイベント「Oracle OpenWorld」を含む各種イベントでの講演多数。Autonomous DatabaseがGAされた年にOracle ACE Associateになれたことに運命を感じており、Oracleデータベース管理者の今後のロールモデルの構築に携わりたいと考え日々活動中。最新の登壇タイトルは「Boosting your career through Oracle Cloud Infrastructure 2018 Certified Architect Associate.」

‐ NRI認定ITアーキテクト
‐ Oracle ACE Associate
‐ Oracle MASTER Platinum10g,11g,12c(Platinum of the year 2016 in Japan)
‐ Oracle MASTER Cloud Oracle Database Cloud Service
‐ Oracle MASTER Cloud Oracle Java Cloud Service
‐ Oracle Cloud Infrastructure 2018 Certified Architect Associate

 

  • これからの内容はOracle Cloud Infrastructure (以下OCI)のサービスを前提としたものです。
  • 検証時点(2019年3月末)のOCIのサービス内容に基づいて記載しているため、内容が一部異なる場合があります。
  • 最新の情報については公式Webサイトをご確認頂きたく思います。
  • 本連載は私個人の理解に基づいており、事実と異なる可能性があることをご了承いただきたく思います。

こんにちは、NRIの大塚です。今回はMICRO DATA領域の連載5回目です。


 

テーマとするPaaSはOracle Blockchain Platform Cloud Serviceです。
今回はRich History Database機能の実装です。

 

今回作成するのは図中赤枠(DBサーバと、Windows RDPサーバ)の部分です。


実装手順は以下の6ステップとなります。

  • - Step1:Oracle Blockchain Platform Cloud Serviceのデータの複製について
  • - Step2:Database Cloud Serviceのインスタンス作成
  • - Step3:DBサーバ(Rich History Database)の設定
  • - Step4:Oracle Blockchain Platform Cloud Service側の設定
  • - Step5:複製されたデータの確認
  • - Step6:Windows RDPサーバインスタンスの構築

それでは、さっそくはじめたいと思います。

 

 

  1. Oracle Blockchain Platform Cloud Serviceのデータの複製について


    Oracle Blockchain Platform Cloud Serviceのチャネルごとに管理されている台帳のデータのレプリカをRDBMS上に作成することができます。マニュアルを見てみましょう。

    Platform and contains data about the blockchain ledger’s transactions on the channels you select. You use this database to create analytics reports and visualization about your ledger’s activities.

    ※Create the Rich History Database ~What's the Rich History Database?~

    つまり全履歴の参照は、ブロックチェーンに行うとコストが高い為、RDBMSにオフロードするアーキテクチャがベストプラクティスであるということです。Oracle Blockchain Platform Cloud Serviceのこの機能はRich History Databaseと呼ばれています。今回は、この機能を実装したいと思います。
    Rich History Databaseの要件をマニュアルで確認したいと思います。

    You can only use an Oracle database such as Oracle Autonomous Data Warehouse or Oracle Database Cloud Service with Oracle Cloud Infrastructure to create your rich history database.

    ※Create the Rich History Database ~What's the Rich History Database?~

    Oracle Cloud InfrastructureベースのDatabase( Autonomous Data Warehouse or Database Cloud Service)のみがOracle Blockchain Platform Cloud Serviceよりデータ連携可能とのことです。
    今回はDatabase Cloud Serviceで実装したいと思います。

  2.  

  3. Database Cloud Serviceのインスタンス作成


    しばらくの間PaaSでの操作が多かったかと思います。今回はOracle Cloud 管理コンソール直下からの操作になりますので、再度確認するところから始めたいと思います。早速Oracle Cloud 管理コンソールへログインしてみましょう。
    URLは以下です。
    https://cloud.oracle.com/ja_JP/sign-in


    Oracle Cloud 管理コンソールを活用して実装をしていきます。
    下図のとおり「Compute」を押下してください。


    以下の画面に遷移しますので、「Bare Metal, VM, and Exadata」を押下します。


    以下の画面に遷移しますので、「Compartment」が「Blockchain」であることを確認の上、「Launch DB System」を押下してください。


    データベースの作成情報入力画面が表示されますので、値を入力します。


    しばらくすると以下のように作成が完了します。


    Oracle Blockchain Platform Cloud Service側からRich History Databaseへのデータ連携は1521ポートで行われますので、
    VCN:APPのセキュリティ・リストにTCP:1521の通信許可設定をします。

    Compute→Networking→Virtual Cloud Networks→Virtual Cloud Network Details→VCN:APPを選択して→Security Lists→Default Security List for APPを以下の情報にて更新します。

    Ingres Rules(VCN「APP」に入ってくる通信)

    項目 設定値
    STATELESS チェックしない(=Stateful Rulesになります)
    SOURCE Type CIDR
    SOURCE CIDR 0.0.0.0/0
    (Oracle Blockchain Platform Cloud Service)
    IP PROTOCOL TCP
    SOURCE PORT RANGE ALL
    DESTINATION PORT RANGE 1521
  4.  

  5. DBサーバ(Rich History Database)の設定


    先ほど作成したDBサーバにログインしたいと思います。経路は下図のようになります(VCN Peeringを経由して接続されます)



    DBサーバのPrivate IPアドレスは以下にて確認できます。
    (Compute → Bare Metal, VM, and Exadata)


    それではDBを設定していきます。
    ProxyサーバからDBサーバに接続します。

    [opc@hostname 鍵ファイル置き場]$ ssh -i myrsa opc@DBサーバのIPアドレス
    [opc@hostname ~]$

    Oracle Databaseに接続したいと思います。

    [opc@hostname ~]$ . oraenv
    ORACLE_SID = [opc] ? richdb
    ORACLE_BASE environment variable is not being set since this
    information is not available for the current user ID opc.
    You can set ORACLE_BASE manually if it is required.
    Resetting ORACLE_BASE to its previous value or ORACLE_HOME
    The Oracle base has been set to /u01/app/oracle/product/18.0.0.0/dbhome_1
    
    [opc@hostname ~]$ sqlplus system/DBインスタンス作成時に設定したパスワード
    Copyright (c) 1982, 2018, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 - Production
    Version 18.2.0.0.0
    
    SQL>

    Oracle Blockchain Platform Cloud ServiceがこのDBサーバ(Rich History Database)へデータ連携を行うためのDBユーザなどの環境を整備します。

    Pluggable Databaseに接続します。

    SQL> alter session set container=richpdb1;
    Session altered.
    

    DBユーザを作成します。

    SQL> create user 任意のDBユーザ名 identified by パスワード;
    User created.
    

    DBユーザの確認をします。

    SQL> SELECT username, default_tablespace, temporary_tablespace FROM dba_users WHERE username = '先ほど作成したDBユーザ名を大文字で入力';
    
    USERNAME              DEFAULT_TABLESPACE    TEMPORARY_TABLESPACE
    ---------------------------- ------------------------------ ------------------------------
    先ほど作成したDBユーザ名    USERS                    TEMP
    

    権限を付与し、一度Exitします。

    SQL> grant connect, resource to先ほど作成したDBユーザ名;
    Grant succeeded.
    
    SQL> grant unlimited tablespace to先ほど作成したDBユーザ名;
    Grant succeeded.
    
    SQL> exit
    Disconnected from Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 - Production
    Version 18.2.0.0.0
    

    作成したDBユーザでログインしてみたいと思います。
    Connection Stringは
    <DBサーバのPrivateIP>:<portNumber>/<database unique name>.<host domain name>
    の形式です。
    <database unique name>はDBインスタンス作成時のPDB Name(richpdb1としました)
    <host domain name>は
    Compute → Bare Metal, VM, and Exadata(rich-DB)を選択し、下図のように確認してください。


    PDBに先ほど作成したDBユーザで接続します。

    [opc@hostname ~]$ . oraenv
    ORACLE_SID = [opc] ? richdb
    ORACLE_BASE environment variable is not being set since this
    information is not available for the current user ID opc.
    You can set ORACLE_BASE manually if it is required.
    Resetting ORACLE_BASE to its previous value or ORACLE_HOME
    The Oracle base has been set to /u01/app/oracle/product/18.0.0.0/dbhome_1
    
    [opc@hostname ~]$ sqlplus 先ほど作成したDBユーザ名/パスワード@DBサーバのPrivateIPアドレ ス:1521/richpdb1.<host domain name>
    
    Copyright (c) 1982, 2018, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 - Production
    Version 18.2.0.0.0
    

    権限が付与されているか確認して、Exitしましょう。これでOracle Database側の設定は完了です。

    SQL> select username, granted_role from user_role_privs;
    
    USERNAME           GRANTED_ROLE
    ------------------------ --------------------------------------------------------
    MYTEST              CONNECT
    MYTEST              RESOURCE
    
    
    SQL> select username, privilege from user_sys_privs;
    
    USERNAME           PRIVILEGE
    ------------------------ --------------------------------------------------------
    MYTEST              UNLIMITED TABLESPACE
    
    SQL> exit
    Disconnected from Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 - Production
    Version 18.2.0.0.0
    
  6.  

  7. Oracle Blockchain Platform Cloud Service側の設定

    それではOracle Blockchain Platform Cloud Service側の設定を行いたいと思います。Blockchain consoleの右上にあるハンバーガーボタンを押下し、すると「Configure Rich History」が現れますので、押下してください。


    「Configure Rich History」には以下のように値を設定してください。


    「Success」と、表示されて、ウィンドウは自動で閉じます。


    次に、複製したい台帳に対して、Rich History Database機能を有効にします。前回、チャネルごとに台帳を管理することをお話しました。つまり、Rich History Database機能の有効化はチャネル単位で行って行きます。
    下図のように①~④の順に押下してください。


    「Enable Rich History」にチェックを入れて、「Save」を押下してください。


    最後にmychannel1に属しているPeer(台帳の実態を保持している)を再起動すると複製が開始されます。
    mychannel1ですので、Peer0と、Peer1が該当となります。
    まずPeer0です。下図のように①~④の順に押下してください。


    以下メッセージが表示されますので「Confirm」を押下してください。


    同じ手順でPeer1も「Restart」してください。

    「Status」が「Up」になれば、完了です(下図はPeer1の再起動中の状況)

  8.  

  9. 複製されたデータの確認

    複製されたデータを確認したいと思います。
    まずPDBに接続します。

    [opc@hostname ~]$ . oraenv
    ORACLE_SID = [opc] ? richdb
    ORACLE_BASE environment variable is not being set since this
    information is not available for the current user ID opc.
    You can set ORACLE_BASE manually if it is required.
    Resetting ORACLE_BASE to its previous value or ORACLE_HOME
    The Oracle base has been set to /u01/app/oracle/product/18.0.0.0/dbhome_1
    
    [opc@hostname ~]$ sqlplus 先ほど作成したDBユーザ名/パスワード@DBサーバのPrivateIPアドレ ス:1521/richpdb1.<host domain name>
    
    Copyright (c) 1982, 2018, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 - Production
    Version 18.2.0.0.0

    以下のようなテーブルが作られていると思います。

    SQL> select table_name from user_tables order by table_name;
    
    TABLE_NAME
    --------------------------------------------------------------------------------
    OBPCS_mychannel1_hist
    OBPCS_mychannel1_last
    OBPCS_mychannel1_state

    テーブル名は<instanceName>_<channelName>_が先頭に付きますので、複数のチャネルからの接続も重複することなく、対応できます。履歴データの参照をRich History Databaseに対して行うことで、どれくらいの効果が出るかは、次回お話したいと思います。それぞれのテーブルの項目の詳細はマニュアルで確認することができます。

    ※Create the Rich History Database ~Rich History Database Tables and Columns~

    例えば「OBPCS_mychannel1_last」テーブル。これは何番のブロックまでコピーしたかを管理しています。

    SQL> select * from "OBPCS_mychannel1_last";
    
    ID             BLOCKNO    TXNNO
    ---------------- --------------- ----------
    height         5            1

    Blockchain Consoleで確認できるブロック数と上記のBLOCKNO「5」が一致していることが分かります。


    今度は「OBPCS_mychannel1_state」テーブルを見てみたいと思います。
    ここではAさんとBさん(KEY)の現在の残高(VALUE)が分かります。
    前回AさんからBさんへ10円の送金を行っておりますので、そのときの結果が表示されています。


    次に「OBPCS_mychannel1_hist」テーブルです。
    このテーブルでいままでの履歴を確認することができます。
    AさんとBさん(KEY)の残高(VALUE)がどのように変わっていったか、改ざんされない記録として確認できます。


    お気づきの方も多いと思いますが、上記画面は「Oracle SQL Developer」の画面です。
    「Oracle SQL Developer」からの接続設定は以下となります。


    接続経路は以下です。


    今回の最後にWindowsサーバインスタンスの構築手順を記載しておきたいと思います。

  10.  

  11. Windows RDPサーバインスタンスの構築

    まずインスタンス作成時に指定するサブネット「RDP-SERVER」を作成します。
    「Networking」 → 「Virtual Cloud Networks」(PROXYを選択)→ 「Create Subnet」を押下します。


    「Create」を押下すると、すぐに作成されます。

    次にインスタンスの作成です。
    「Compute」→「Instances」→「Create Instance」を押下してください。


    インスタンス作成画面にて、さっそく値を入力していきましょう。


    「Create」を押下すると、すぐに作成されます。


    接続したいと思います。接続は以下User name/Passwordです。
    User name:ホスト名\opc
    Password:上記のInitial Password(初回接続時に変更します)


    ここにOracle SQL Developerをセットアップし、VCN「APP」のセキュリティ・リストにTCP:1521の通信許可設定をすれば、ご紹介したような接続を行うことができます。

    VCN:APPのセキュリティ・リストにVCN:PROXYからのTCP:1521の通信許可設定をします。

    Compute→Networking→Virtual Cloud Networks→Virtual Cloud Network Details
    →VCN:APPを選択して→Security Lists→Default Security List for APPを以下の情報にて更新します。

    Ingres Rules(VCN「APP」に入ってくる通信)

    項目 設定値
    STATELESS チェックしない(=Stateful Rulesになります)
    SOURCE Type CIDR
    SOURCE CIDR 0.0.0.0/0
    (Oracle Blockchain Platform Cloud Service)
    IP PROTOCOL TCP
    SOURCE PORT RANGE ALL
    DESTINATION PORT RANGE 1521

今回はここまでといたします。読んで頂きありがとうございました。

 

※Oracle Blockchain Platform Books:
https://docs.oracle.com/en/cloud/paas/blockchain-cloud/books.html

※What's Oracle Blockchain Platform:
https://docs.oracle.com/en/cloud/paas/blockchain-cloud/user/whats-oracle-blockchain-cloud-service.html

※Get Started Using Samples:
https://docs.oracle.com/en/cloud/paas/blockchain-cloud/user/get-started-using-samples.html

※About the REST APIs:
https://docs.oracle.com/en/cloud/paas/blockchain-cloud/rest-api/index.html

※Use the REST APIs to Develop Applications:
https://docs.oracle.com/en/cloud/paas/blockchain-cloud/user/use-rest-apis-develop-applications.html

※Create the Rich History Database:
https://docs.oracle.com/en/cloud/paas/blockchain-cloud/user/create-rich-history-database.html#GUID-F09873B0-98F6-430D-947C-299A5AD8CCCB

※コンピュート・サービスの概要:
https://docs.oracle.com/cd/E97706_01/Content/Compute/Concepts/computeoverview.htm

 

 

AutonomousDatabaseを無期限 / 無料(Always Free)で使用可能になりました。

Cloudをまだお試しでない方は、無料トライアルをご利用下さい。