大塚紳一郎, 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の大塚です。今回はMICRO DATA領域の連載5回目です。
テーマとするPaaSはOracle Blockchain Platform Cloud Serviceです。
今回はRich History Database機能の実装です。
今回作成するのは図中赤枠(DBサーバと、Windows RDPサーバ)の部分です。
実装手順は以下の6ステップとなります。
それでは、さっそくはじめたいと思います。
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で実装したいと思います。
しばらくの間PaaSでの操作が多かったかと思います。今回はOracle Cloud 管理コンソール直下からの操作になりますので、再度確認するところから始めたいと思います。早速Oracle Cloud 管理コンソールへログインしてみましょう。
URLは以下です。
//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 |
先ほど作成した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>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
それでは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の再起動中の状況)
複製されたデータを確認したいと思います。
まず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」が一致していることが分かります。
今度は「OBPCS_mychannel1_state」テーブルを見てみたいと思います。
ここではAさんとBさん(KEY)の現在の残高(VALUE)が分かります。
前回AさんからBさんへ10円の送金を行っておりますので、そのときの結果が表示されています。
お気づきの方も多いと思いますが、上記画面は「Oracle SQL Developer」の画面です。
「Oracle SQL Developer」からの接続設定は以下となります。
接続経路は以下です。
今回の最後にWindowsサーバインスタンスの構築手順を記載しておきたいと思います。
まずインスタンス作成時に指定するサブネット「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 | SOURCE PORT RANGE |
DESTINATION PORT RANGE | 1521 |
今回はここまでといたします。読んで頂きありがとうございました。
※Oracle Blockchain Platform Books:
//docs.oracle.com/en/cloud/paas/blockchain-cloud/books.html
※What's Oracle Blockchain Platform:
//docs.oracle.com/en/cloud/paas/blockchain-cloud/user/whats-oracle-blockchain-cloud-service.html
※Get Started Using Samples:
//docs.oracle.com/en/cloud/paas/blockchain-cloud/user/get-started-using-samples.html
※About the REST APIs:
//docs.oracle.com/en/cloud/paas/blockchain-cloud/rest-api/index.html
※Use the REST APIs to Develop Applications:
//docs.oracle.com/en/cloud/paas/blockchain-cloud/user/use-rest-apis-develop-applications.html
※Create the Rich History Database:
//docs.oracle.com/en/cloud/paas/blockchain-cloud/user/create-rich-history-database.html#GUID-F09873B0-98F6-430D-947C-299A5AD8CCCB
※コンピュート・サービスの概要:
//docs.oracle.com/cd/E97706_01/Content/Compute/Concepts/computeoverview.htm