そこはかとなく

見て聞いて触ったことの技術メモ

Node.jsからAutonomous Transaction Processing(ATP)に接続

この記事について

この記事ではNode.jsのアプリケーションからAutonomous Transaction Processing(ATP)に接続する方法を記載しています。

前提

  • Oracle Cloudのアカウントを持っている
    無償トライアルはこちら Try for Free | Oracle Cloud
  • Autonomous Transaction Processing(ATP)がプロビジョニングされている

Autonomous Transaction Processing(ATP)とは

Autonomous Transaction Processing は、自己稼動、自己保護、自己修復が可能なOracle Autonomous Database を基盤とするクラウド・サービス・ファミリーの一部です。

Autonomous Transaction Processingは、機械学習と自動化を使用して人手による作業、人的エラー、手作業によるチューニングを排除してくれます。

ATPへの接続は証明書認証とSSLが使用されクライアントとATP間のすべての通信は暗号化されます。

f:id:scoto:20190209010550p:plain

Node.jsアプリケーションからATPへの接続 設定手順

以下の手順で設定していきます。

  • Oracle Instant Clientのセットアップ
  • ドライバ(node-oracledb)のインストール
  • セキュリティ資格証明を取得
  • アプリケーションに接続情報を登録

Oracle Instant Clientのセットアップ

1.Oracle Instant Client を入手します*1
以下URLから入手可能です。 ご利用の環境に合うファイルを選択してください。
Oracle Instant Client - Free tools and libraries for connecting to Oracle Database

2.Zipファイル、またはrpmパッケージを解凍します

Windowsの例:C:\instantclient_12_2
Windowsの場合には解凍したディレクトリをPATH変数に登録します。

Linuxの例:/home/myuser/instantclient_18_3
Linuxの場合にはlibclntsh.soのシンボリック・リンクを作成し、環境変数LD_LIBRARY_PATHを登録します。

> cd /home/myuser/instantclient_18_3 
> ln -s libclntsh.so.18.1 libclntsh.so
> export LD_LIBRARY_PATH=/home/myuser/instantclient_18_3:$LD_LIBRARY_PATH

ドライバ(node-oracledb)のインストール

node-oracledb は Node.jsのOracle DBドライバ(Apatche License 2.0)です。
以下URLから入手可能です。
GitHub - oracle/node-oracledb: Oracle Database driver for Node.js maintained by Oracle Corp.

package.jsonの依存関係にoracledbを追加するか、手動で以下のコマンドを実行することでインストールできます。

> npm install oracledb

セキュリティ資格証明を取得

1. 以下の手順でセキュリティ資格証明(Oracle client credentials)をダウンロードします。

  • Autonomous Transaction Processing詳細ページで「DB Connection」をクリックします
  • パスワードを入力します*2
  • 「Download」クリックして、クライアントのセキュリティ資格証明のzipファイルを保存します

2. セキュリティ資格証明のZipを以下のディレクトリに解凍します。

Windowsの例:C:\instantclient_12_2\network\admin

Linuxの例:/home/myuser/instantclient_18_3/network/admin
Linuxの場合には解凍したディレクトリを環境変数TNS_ADMINに登録します。

Zipに含まれるファイル

-rw-r--r-- 1 cotoc 197121  3336 1月  29 05:53 truststore.jks
-rw-r--r-- 1 cotoc 197121 12753 1月  29 05:53 tnsnames.ora
-rw-r--r-- 1 cotoc 197121    87 1月  29 05:53 ojdbc.properties
-rw-r--r-- 1 cotoc 197121  3243 1月  29 05:53 keystore.jks
-rw-r--r-- 1 cotoc 197121  6616 1月  29 05:53 ewallet.p12
-rw-r--r-- 1 cotoc 197121  6661 1月  29 05:53 cwallet.sso
-rw-r--r-- 1 cotoc 197121 20083 1月  29 14:53 Wallet_store.zip
-rw-r--r-- 1 cotoc 197121   139 1月  29 16:10 sqlnet.ora

Node.jsアプリケーションからATPに接続するためにはtnsnames.ora、sqlnet.ora、cwallet.ssoを使用します。

アプリケーションに接続情報を登録

dbConfig.js にnode-oracledbドライバを使用したOracle DBのアクセスのコードを記述します。
今回はmodule.exportsを使用しています。

module.exports = {
    user          : process.env.NODE_ORACLEDB_USER || “DBユーザー名”,
    password      : process.env.NODE_ORACLEDB_PASSWORD || “DBパスワード”,
    connectString : process.env.NODE_ORACLEDB_CONNECTIONSTRING || “<サービス名>_low”,
    externalAuth  : process.env.NODE_ORACLEDB_EXTERNALAUTH ? true : false
  };
  • NODE_ORACLEDB_USER:DBのユーザー名を登録します
  • NODE_ORACLEDB_PASSWORD:DBのユーザー名のパスワードを登録します
  • NODE_ORACLEDB_CONNECTIONSTRING:データベース・サービス名を登録します
  • NODE_ORACLEDB_EXTERNALAUTH :外部認証テストのためのオプションをFalseに設定します

NODE_ORACLEDB_CONNECTIONSTRINGに記述するデータベース・サービス名はセキュリティ資格証明に含まれる tnsnames.ora を確認します。

※ tnsnames.oraファイルには、high/medium/low/tp/tpurgentの5つのデータベース・サービス名が含まれます。それぞれ優先順位と並列処理の実行の有無が異なります。

Managing and Monitoring Performance of Autonomous Transaction Processing

お疲れさまでした!これでNode.jsアプリからATPへの接続に必要な設定は完了です!

ご覧いただきありがとうございました。

*1:Instant Clientは、OTNの開発および配布に関する個別のInstant Clientライセンス契約書に従って提供されることに注意してください。

*2:パスワードは、8文字以上の長さで1文字以上と数値または1特殊文字を含める必要があります