弊社ブログの Oracle Autonomous Transaction Processing(以下 ATP)記事の第3弾となりますが、今回は PHP で ATP に接続してみたいと思います。
過去の ATP の記事は以下となります。まだご覧になられていない方は、是非、一読頂ければと思います。
今回 PHP での接続を確認した環境は以下となります。
- CentOS 7.5
- PHP 7.3
- Oracle Instant Client 19.3
手順
1.PHPをインストール
EPEL、Remiリポジトリをインストールし、PHP7.3をインストールします。
接続ドライバとしてOCI8モジュールもインストールします。
1 2 3 |
# yum install -y epel-release # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm # yum install -y --enablerepo=remi,remi-php73 php php-devel php-oci8 |
2.必要なインストールパッケージ、クライアント資格証明書(ウォレット)の用意
▼Oracle Instant Client
Oracle Technology Networkより、以下のファイルをダウンロードしてサーバに配置しておきます。
sqlplus は登録データ確認用としてインストールします。
- oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
- oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm
- oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm
(執筆時点で公開されていた最新バージョンとなります。)
▼クライアント資格証明書(ウォレット)
Oracle Cloud のコンソール画面の「Autonomous Transaction Processing」の詳細画面よりクライアント資格証明書をダウンロードしてサーバに配置します。
ダウンロード手順は弊社ブログ「Oracle Autonomous Database(ATP)を触ってみた」に記載していますので参照頂ければと思います。
作業ディレクトリに以下のようにダウンロードしたファイルを保存しています。
1 2 3 4 5 |
[root@php-atp ~]# ls -l oracle-instantclient19.3-* Wallet* -rw-rw-r--. 1 root root 53758240 Jun 28 08:52 oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm -rw-rw-r--. 1 root root 612036 Jun 28 10:03 oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm -rw-rw-r--. 1 root root 702200 Jun 28 10:03 oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm -rw-rw-r--. 1 root root 19916 Jun 26 08:46 Wallet_atp01.zip |
3.Oracle Instant Client の各パッケージをインストール
ダウンロードした Oracle Instant Client の各パッケージをインストールし、共有ライブラリの検索パスを追加します。
1 2 3 4 5 6 7 8 9 |
[root@php-atp ~]# rpm -ivh oracle-instantclient19.3-*.rpm Preparing... ################################# [100%] Updating / installing... 1:oracle-instantclient19.3-basic-19################################# [ 33%] 2:oracle-instantclient19.3-devel-19################################# [ 67%] 3:oracle-instantclient19.3-sqlplus-################################# [100%] [root@php-atp ~]# sh -c "echo /usr/lib/oracle/19.3/client64/lib > /etc/ld.so.conf.d/oci.conf" [root@php-atp ~]# ldconfig [root@php-atp ~]# |
4.クライアント資格証明書の配置
Oracle Cloud のコンソール画面からダウンロードしたクライアント資格証明書を解凍し、必要なファイルを/usr/lib/oracle/19.3/client64/lib/network/admin/
にコピーします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@php-atp ~]# mkdir ~/wallets [root@php-atp ~]# unzip Wallet_atp01.zip -d ~/wallets Archive: Wallet_atp01.zip inflating: /root/wallets/cwallet.sso inflating: /root/wallets/tnsnames.ora inflating: /root/wallets/truststore.jks inflating: /root/wallets/ojdbc.properties inflating: /root/wallets/sqlnet.ora inflating: /root/wallets/ewallet.p12 inflating: /root/wallets/keystore.jks [root@php-atp ~]# cd ~/wallets [root@php-atp wallets]# cp tnsnames.ora sqlnet.ora cwallet.sso ewallet.p12 /usr/lib/oracle/19.3/client64/lib/network/admin/ [root@php-atp wallets]# |
5.PHPスクリプトからATPにデータ登録
以下のようなPHPスクリプトを用意しました。
(エラーハンドリング処理は省略しております。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php // Connect $con = oci_connect("<ATPユーザ>", "<ATPユーザパスワード>", "<接続記述子>"); // Create Table $sql = "CREATE TABLE atp_test (id NUMBER, name VARCHAR2(10))"; $stmt = oci_parse($con, $sql); oci_execute($stmt); // Insert Record $data = [ [1, "Tarou" ], [2, "Jirou" ], [3, "Saburou" ] ]; $stmt = oci_parse($con, "INSERT INTO atp_test VALUES (:1, :2)"); foreach ($data as $row) { oci_bind_by_name($stmt, ":1", $row[0]); oci_bind_by_name($stmt, ":2", $row[1]); oci_execute($stmt, OCI_NO_AUTO_COMMIT); } oci_commit($con); echo "end!\n"; ?> |
atp_test
テーブルを作成し、以下のようなレコードを登録しています。
ID | NAME |
---|---|
1 | Tarou |
2 | Jirou |
3 | Saburou |
※接続記述子は/usr/lib/oracle/19.3/client64/lib/network/admin/tnsnames.ora
を確認して下さい。
1 |
<接続記述子> = (description= (address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))・・・ |
それでは、実行してみます。
1 2 3 |
[root@php-atp ~]# php example.php end! [root@php-atp ~]# |
エラーなく終了したので、sqlplus で接続して確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[root@php-atp ~]# sqlplus <ATPユーザ>/<ATPユーザパスワード>@<接続記述子> SQL*Plus: Release 19.0.0.0.0 - Production on Fri Jul 5 18:29:28 2019 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Last Successful login time: Fri Jul 05 2019 18:28:30 +00:00 Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.4.0.0.0 SQL> SELECT * FROM atp_test; ID NAME ---------- -------------------- 1 Tarou 2 Jirou 3 Saburou SQL> |
まとめ
アプリケーションからのデータベース操作は、特に ATP を意識する必要はなく Oracle データベースと同様に操作できます。
また、今回の執筆にあたり軽く調べたところ、Python や Go、Node.js、R といった言語で ATP に接続をされた方の日本語記事もあり、そんなに苦労せずにアプリケーションからも接続できるのではないでしょうか。
ATPのこれからの盛り上がりに期待したいと思います。