Oracle Graph をクラウド上で構築（DBCS 編）

![cloud-dbcs.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/7b1d6712-2a28-eed5-8db3-074859462598.jpeg)
Oracle Graph を Autonomous Database を用いて構築する手順を [ADB 編](https://qiita.com/ryotayamanaka/items/7769d1ed239bf997e3ff) に記載しましたが、Oracle Graph はオンプレ／クラウドを問わず全ての Oracle Database のエディション（ただし、12.2 以降）で使うことができるので、ここでは Database Cloud Service（DBCS）を使う場合の手順についてご紹介します。ADB 編のときと同様、Graph Server の Marketplace イメージを使います。

Oracle Cloud 上の Always Free Services に含まれるのは Autonomous Database（ADB）なので、常時無料で使いたい場合には [ADB 編](https://qiita.com/ryotayamanaka/items/7769d1ed239bf997e3ff) を参照してください。

## DBCS の作成

通常通りに DBCS を作成します。この手順は省略します。

後にデータベースに接続するために、接続に必要な情報を確認しておきます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/231b7680-d587-7e87-6a64-20ca0b31c4e9.png)

ここでは、DB system と Hostname prefix をともに dbcs1 として設定し、次のようなサービス名でデータベース・コンテナへの接続が確認できているとします。

```
ssh -i <private_key> opc@<public_ip_address>

例：
ssh -i key.pem opc@203.0.113.14
```

oracle ユーザーに切り替えます。

```
sudo su - oracle
```

SQL*Plus を用いて管理者権限でデータベースの PDB1 コンテナに接続します。

```
sqlplus sys@<public_ip_address>:1521/<service_name> as sysdba

例：
sqlplus sys @203.0.113.14:1521/dbcs1_pdb1.sub01234567890.vcn1.oraclevcn.com as sysdba

exit
```

OS 認証を用いることで次のように接続することも可能です。

```
sqlplus / as sysdba
alter session set container = DBCS1_PDB1;

exit
```

## PL/SQL パッチの適用

Oracle Graph Client for PL/SQL を [こちら](https://www.oracle.com/database/technologies/spatialandgraph/property-graph-features/graph-server-and-client/graph-server-and-client-downloads.html) から入手します。バージョン 22.3 の場合には、V1021725-01.zip というファイルがダウンロードされます。

DBCS インスタンスにコピーします。

```
scp -i <private_key> V1021725-01.zip opc@<public_ip_address>:

例：
scp -i key.pem V1021725-01.zip opc@203.0.113.14:/tmp
```

DBCS インスタンスにログインします。

```
ssh -i <private_key> opc@<public_ip_address>
```

oracle ユーザーで解凍します。

```
sudo su - oracle
unzip /tmp/V1021725-01.zip 
unzip oracle-graph-plsql-22.3.0.zip -d oracle-graph-plsql
```

管理者権限でデータベース・コンテナに接続します。

```
sqlplus / as sysdba
SQL> show pdbs 

    CON_ID CON_NAME			  OPEN MODE   RESTRICTED
---------- ------------------ ----------- ---------- ----------
	     2 PDB$SEED			  READ ONLY   NO
	     3 DBCS1_PDB1		  READ WRITE  NO

SQL> alter session set container = DBCS1_PDB1;
```

PL/SQL パッチを適用します。

```
@oracle-graph-plsql/19c_and_above/opgremov.sql
@oracle-graph-plsql/19c_and_above/catopg.sql

exit
```

## ユーザーの作成

管理者権限を用いて、上で作成したロールを持つユーザーを作成します。

再度、管理者権限で接続します。

```
$ sqlplus / as sysdba
SQL> alter session set container = DBCS1_PDB1;
```

ユーザーを作成します。

```
CREATE USER graphuser
IDENTIFIED BY WELcome123##
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
```

ユーザーに権限を与えます。

```
GRANT
  alter session 
, create procedure 
, create sequence 
, create session 
, create table 
, create trigger 
, create type 
, create view
, graph_developer -- This role is required for using Graph Server
TO graphuser;

exit
```

新しいユーザーと JDBC URL を用いてデータベースに接続できることを確認しておきます。

```
sqlplus graphuser/WELcome123##@<public_ip_address>:1521/<service_name>

例：
sqlplus graphuser/WELcome123##@203.0.113.14:1521/dbcs1_pdb1.sub01234567890.vcn1.oraclevcn.com
```

## ネットワークの作成

Graph Server が接続するネットワークを作成して必要なポートを開放します。既に DBCS インスタンスが使用しているネットワークを使用することもできますが、ここでは別の新しいネットワークを作成することにします。

Networking > Virtual Cloud Networks に進みます。
![networking-vcn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/1ae99d1b-f3ba-46e0-3ba1-51c9adcd076c.png)

ウィザードを使用するのが簡単です。Start VCN Wizard > Create VCN with Internet Connectivity > Start VCN Wizard と進んで、特に設定を変更することなく新しい VCN を作成してください。
![Screen Shot 2022-05-02 at 14.28.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/66c21025-8ef2-6a2b-5fc2-0948c56aefb8.png)

ここでは `vcn1` という名前の VCN を作成します。
![vcn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/4baab5f7-1001-ef3c-07a1-3c4ee952518e.png)

ポート 7007 をアクセス可能にします。Virtual Cloud Networks > VCN1 > Public Subnet-VCN1 > Default Security List for VCN1 > Add Ingress Rules と進み、次のルールを作成します。実利用では、セキュリティを高めるためにクライアントの IP アドレスを制限してください。

```
Source Type: CIDR
Source CIDR: 0.0.0.0/0
IP Protocol: TCP
Source Port Range: (All)
Destination Port Range: 7007
Description: 例）For Graph Server
```

![ingress-rule.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/a6a4be14-5a3b-50ba-05ef-4fbb9de25765.jpeg)

## Graph Server の作成

Marketplace タブに移動し「Graph Server and Client」を検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/59759cae-5656-0d60-3ae7-c5e28a19d2c3.png)

ここでは、現時点の最新バージョン 22.3.0 を選択しますが、他のバージョンを選択した場合も手順は同様です。
![Screen Shot 2022-08-11 at 19.23.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/9c377920-22d0-1ef4-561f-b0cce5931c6c.png)

Stack Information は変更する必要はありません。
![Screen Shot 2022-08-11 at 19.25.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/26952be3-9fbf-a199-af4a-1eb81a0f1ac2.png)

Configure Variables の各項目を設定します。
![Screen Shot 2022-05-02 at 14.40.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/0b4f8742-b80f-71ec-b099-8e9164426e6d.png)

ネットワークとして先に作成した VCN とパブリック・サブネットを選択します。
![Screen Shot 2022-05-02 at 14.49.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/262c9f80-8134-37ab-c09a-e94f28884772.png)

Graph Server からデータベースへの接続のために、先に確認した JDBC URL を次のようなフォーマットで指定します。
```
jdbc:oracle:thin:@<public_ip_address>:1521/<service_name>

例：
jdbc:oracle:thin:@203.0.113.14:1521/dbcs1_pdb1.sub01234567890.vcn1.oraclevcn.com
```

スタックを作成します。通常、数分で完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/e11089af-87bc-336a-e4cc-13b2d7c4cb29.png)

正常に作成が完了した場合の画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/18ff17bf-b258-def4-7a9a-e55f04cd5322.png)

ログの最後に Compute インスタンスの IP アドレスやグラフ可視化アプリの URL が出力されています。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/7da5ca3e-bd83-a120-cfca-cf8233f6be29.png)

## グラフ可視化アプリへのログイン

ウェブブラウザで、`https://<public_ip_for_compute>:7007/ui` を開きます。

Marketplace イメージは自己署名 SSL 証明書とともに配布されているため、実運用では独自の証明書に変更する必要があります。自己署名 SSL 証明書のまま使っている場合、ウェブブラウザには警告が表示されます。

Chrome の場合は、警告ウィンドウに thisisunsafe と入力すると Graph Viz の画面に遷移します。
![login-chrome.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/c6efd4b7-2c23-17b0-97f3-9b0d59b68a73.jpeg)

Firefox の場合 Advanced > Accept the Risk and Continue をクリックします。
![Screen Shot 2022-05-02 at 15.36.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/dde66d71-6965-01d0-343b-47aaa2d8591b.png)

すでに「hr」というサンプルのグラフがロードされているので、そのままクエリの実行ボタンを押すと取得されたサブグラフが描画されます。
![graphviz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410176/f7654ca7-96ad-855f-4331-cb3300570eb4.png)

以上で構築完了です。他の記事を参考に、様々なグラフの作成や描画を試してみてください！