##本記事の目的
Always Free環境でOracle Autonomous Databaseに保存されているデータをグラフとして読み込み、Graph Vizで可視化するまでの手順をご紹介します。
##前提条件
- Graph Server and Clientがダウンロード済みであること
まだダウンロードしていない方はこちらからOracle Graph Server and Clientをダウンロードしてください。
インストール手順はDocumentやこちらの記事を参考にしてください。
##Always Free環境の構築
###Computeインスタンス作成
こちらの記事を参考に、仮想クラウドネットワーク・Computeの作成を行ってください。
###Autonomous Database作成
####インスタンス作成
ナビゲーション・メニュー > データベース > Autonomous Data Warehouseを選択します。
「Autonomous Databaseを作成」ダイアログで以下の項目を入力します。
- 基本データベース情報
- 表示名
- コンパートメント
- Databaseの名前
- ワークロードタイプ
- Autonomous Data Warehouse または Autonomous Transaction Processing
- データベースCPUコア数およびストレージの構成
- Always Freeオプションを選択
- 管理者資格証明
- 以下の基準を満たすパスワードを入力
- 12から30文字までの長さ
- 1つ以上の小文字を含む
- 少なくとも1つの大文字を含む
- 少なくとも1つの番号が含む
- 二重引用符( ")は含まない
- 大/小文字に関係なく、文字列adminは含まない
- 以下の基準を満たすパスワードを入力
- ライセンス・タイプ
- Always Freeの場合は調整不要
上記の入力が終わったら、「Autonomous Databaseの作成」をクリックします。
プロビジョニングが完了すると、下記のように緑色のマークに変化します。
####walletファイルダウンロード
DB接続
をクリックします。
下記の画面から、ウォレットのダウンロード
をクリックし、ウォレットをダウンロードします。
ダウンロードしたウォレットは、作成したComputeインスタンスの任意のディレクトリに解凍しておきましょう。
####今回使用するサンプルデータ作成
SQL Developer Webから、今回使用するサンプルデータを作成します。
サービスコンソール
> SQL Developer Web
をクリックしてください。
以下を指定してログインします。
- ユーザー名 :
ADMIN
- パスワード :
Autonomous Database作成時に指定したパスワード
ログイン完了後、以下のSQLで今回使用するスキーマを作成し、権限を付与します。
CREATE USER customer_360 IDENTIFIED BY pass;
GRANT CREATE SESSION to customer_360;
GRANT CREATE TABLE to customer_360;
GRANT ALTER SESSION to customer_360;
GRANT ALTER ANY TABLE to customer_360;
Autonomous Databaseに、サンプルグラフで使用するデータをあらかじめロードしておきます。
ロード時のスクリプトは、こちらを参照して下さい。
##Two-TierとThree-Tierの違い
アーキテクチャの観点では、Two-Tierモード
とThree-Tierモード
の2種類があります。
-
Two-Tierモード
Graph Clientとなるアプリケーションが直接Oracle Databaseに接続する構成です。 -
Three-Tierモード
Graph ClientとなるアプリケーションはGraph Serverに接続し、仲介するGraph ServerがOracle Databaseに接続します。
##グラフデータベース作成手順(Two-Tier / Three-Tier 共通)
以下の作業は全て作成したComputeインスタンスにて行ってください。
###1. opg-rdbms-jshell起動
opg-jshell-rdbms> var jdbcUrl = "jdbc:oracle:thin:@<tnsnames.ora内の接続記述子>?TNS_ADMIN=<Walletファイルを解凍したディレクトリを指定>"
実行例
opg-jshell-rdbms> var jdbcUrl = "jdbc:oracle:thin:@db201901151442_low?TNS_ADMIN=/etc/wallet"
###2. jdbc connection, user, password定義
opg-jshell-rdbms> var user = "<DB Username>"
user ==> "○○○"
opg-jshell-rdbms> var pass = "<DB User Password>"
pass ==> "△△△"
実行例
opg-jshell-rdbms> var user = "customer_360"
user ==> "customer_360"
opg-jshell-rdbms> var pass = "Welcome1"
pass ==> "Welcome1"
###3. DriverManager.getConnectionで接続
opg-jshell-rdbms> var conn = DriverManager.getConnection(jdbcUrl, user, pass)
conn ==> oracle.jdbc.driver.T4CConnection@6d484bf4
###4. Graph Clientからグラフを作成
以下のPGQLを記載したファイルを作成します。
(今回は、/opt/oracle/graph/graph_data/create_pg.pgql
に作成します。)
CREATE PROPERTY GRAPH customer_360
VERTEX TABLES(
customer
LABEL "customer"
PROPERTIES(
type as "type"
,name as "name"
,age as "age"
,location as "location"
,gender as "gender"
,student as "student"
)
,account
LABEL "account"
PROPERTIES(
type as "type"
,account_no as "account_no"
,balance as "balance"
)
,merchant
LABEL "merchant"
PROPERTIES(
type as "type"
,name as "name"
)
)
EDGE TABLES(
owned_by
SOURCE KEY(from_id) REFERENCES account
DESTINATION KEY(to_id) REFERENCES customer
LABEL "owned_by"
PROPERTIES (
since AS "since"
)
,parent_of
SOURCE KEY(from_id) REFERENCES customer
DESTINATION KEY(to_id) REFERENCES customer
LABEL "parent_of"
,purchased
SOURCE KEY(from_id) REFERENCES account
DESTINATION KEY(to_id) REFERENCES merchant
LABEL "purchased"
PROPERTIES (
amount AS "amount"
)
,transfer
SOURCE KEY(from_id) REFERENCES account
DESTINATION KEY(to_id) REFERENCES account
LABEL "transfer"
PROPERTIES (
amount AS "amount"
, date AS "date"
)
)
作成したpgqlファイルをjshellで読み込み、PQGLを実行します。
opg-jshell-rdbms> conn.setAutoCommit(false)
opg-jshell-rdbms> var pgql = PgqlConnection.getConnection(conn)
opg-jshell-rdbms> pgql.prepareStatement(Files.readString(Paths.get("/opt/oracle/graph/graph_data/create_pg.pgql"))).execute()
opg-jshell-rdbms> Consumer<String> query = q -> {
try(var s = pgql.prepareStatement(q)){
s.execute();
s.getResultSet().print();
}catch(Exception e){
throw new RuntimeException(e);
}
}
opg-jshell-rdbms> query.accept("select count(v) from customer_360 match(v)");
件数が返ってくれば成功です。
##グラフデータベース作成手順(Three-Tierで使用する場合の追加手順)
###5. Databaseのパスワードを含んだJava Keystore作成
$ keytool -importpass -alias nwpg -keystore nwpgkeystore.p12 -storetype pkcs12
キーストアのパスワードを入力してください: <Keystoreのパスワードを入力>
保存するパスワードを入力してください: <保存するパスワードを入力>
パスワードを再入力してください: <保存するパスワードを再入力>
Java 8 以前のJDKを使用している場合は、-storetype pkcs12
オプションが必要です。
###6. JVMにTNS_ADMIN
環境変数をオーバーライドして読み込ませるように設定
$ export JAVA_OPTS=“-Doracle.net.tns_admin=<ダウンロードしたウォレットを展開したディレクトリ> -Doracle.jdbc.fanEnabled=false”
実行例
$ export JAVA_OPTS=“-Doracle.net.tns_admin=/home/oracle/wallet -Doracle.jdbc.fanEnabled=false”
###7. 手順5で作成したJava Keystoreを指定してGraph Serverを起動
$ cd /opt/oracle/graph
$ ./pgx/bin/start-server --secret-store /home/oracle/wallet/nwpgkeystore.p12
###8. Graph Vizで可視化
Autonomous Databaseからグラフをロードできました!
##まとめ
今回は、Autonomous Databaseに保存されているデータを用いてグラフを作成しました。
サポート範囲が広がってきているPGXを活用して、どんどんネットワーク分析をしましょう!