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

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

webcontent

テーマとするPaaSはOracle Blockchain Platform Cloud Serviceです。

今回はRich History Database機能の実装です。

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

webcontent

実装手順は以下の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.Database Cloud Serviceのインスタンス作成

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

URLは以下です。

//cloud.oracle.com/ja_JP/sign-in

webcontent

Oracle Cloud 管理コンソールを活用して実装をしていきます。

下図のとおり「Compute」を押下してください。

webcontent

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

webcontent

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

webcontent

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

webcontent

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

webcontent

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

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

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

webcontent

DBサーバのPrivate IPアドレスは以下にて確認できます。

(Compute → Bare Metal, VM, and Exadata)

webcontent

それでは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)を選択し、下図のように確認してください。

webcontent

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>x

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

4. Oracle Blockchain Platform Cloud Service側の設定

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

webcontent

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

webcontent

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

webcontent

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

下図のように①~④の順に押下してください。

webcontent

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

webcontent

最後にmychannel1に属しているPeer(台帳の実態を保持している)を再起動すると複製が開始されます。

mychannel1ですので、Peer0と、Peer1が該当となります。

まずPeer0です。下図のように①~④の順に押下してください。

webcontent

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

webcontent

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

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

webcontent

複製されたデータの確認

複製されたデータを確認したいと思います。

まず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.

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」が一致していることが分かります。

webcontent

今度は「OBPCS_mychannel1_state」テーブルを見てみたいと思います。

ここではAさんとBさん(KEY)の現在の残高(VALUE)が分かります。

前回AさんからBさんへ10円の送金を行っておりますので、そのときの結果が表示されています。

webcontent

お気づきの方も多いと思いますが、上記画面は「Oracle SQL Developer」の画面です。

「Oracle SQL Developer」からの接続設定は以下となります。

webcontent

接続経路は以下です。

webcontent

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

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

まずインスタンス作成時に指定するサブネット「RDP-SERVER」を作成します。

「Networking」 → 「Virtual Cloud Networks」(PROXYを選択)→ 「Create Subnet」を押下します。

webcontent

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

次にインスタンスの作成です。

「Compute」→「Instances」→「Create Instance」を押下してください。

webcontent

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

webcontent

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

接続したいと思います。接続は以下User name/Passwordです。

User name:ホスト名\opc

Password:上記のInitial Password(初回接続時に変更します)

webcontent

ここに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 SOURCE PORT RANGE
DESTINATION PORT RANGE 1521