こんにちは、今日はOracle Cloud上に作成したVMインスタンスから、同じくOCIで作成したOracle Autonomous Databaseに接続してみたいと思います。
この投稿は2020/04/11から30日毎日投稿するチャレンジの5日目の記事です。30日終わるまでに、「何かしら」のWebアプリを作成し、Oracle Databaseも活用する予定です!
OCI VMインスタンスにssh接続
Terminalからsshを使ってVMインスタンスに接続します。.sshファイル内にprivate keyが存在するので、private keyは省略することができます。
ssh opc@ip_address
[opc@miyacle-vm ~]$
接続することができました。ではOracle Autonomous Transaction Processing(ATP)に接続する下準備に入ります。
OCI VMインスタンスでOracle Database利用の下準備
※後にPHPから接続を行いたいのでPHP接続を前提に話を進めていきますが、本記事ではPHP接続は行いません。
Oracle Databaseに接続するためには、Oracle OCI8モジュール、Instant Clientライブラリが必須のようです。公式サイトによるとInstant Clientを利用することでCloud上のDatabaseにアクセスできます。まず、yumを利用してoci8をインストールしてみます。初期のopcユーザーでは実行権限がないので、sudoをつけます。
sudo yum install php-oci8
oci8についてはphpinfoで確認することができます。
次にInstant Clientをインストールします。Linux用のversion19.6を利用しました。rpmファイルをダウンロードしFTPクライアントからファイルをインスタンスに保存しました。
Instant Clientとついでに、同サイトからダウンロードできるsqlplusもインストールしました。
sudo yum install --nogpgcheck oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm oracle-instantclient19.6-sqlplus-19.6.0.0.0-1.x86_64.rpm
しかし、下記のようなエラーが発生して、インストールが完了しません。
Error: oracle-instantclient19.3-basic conflicts with oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64
Error: oracle-instantclient19.6-basic conflicts with oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64
エラーには、Instanct Client 19.3と衝突してしまっているとあります。*どうやら過去に19.3をインストールしていたようです…笑
rmコマンドで19.3を取り除きます。
sudo yum remove oracle-instantclient19.3-basic
そして、改めてyum installを行い、やっとインストールが完了しました。(実はここにたどり着くまでだいぶ時間かかってしまいました… 原因はLinux操作のミスです)
OCI8、Instant Client、そしてSQLPlusのインストールが無事完了したので、昨日作成したOracle Cloud上のAutonomous Transaction Processing(ATP)に接続します!
OCIのAutonomous Databaseに接続
昨日の記事でも利用した、クライアント資格証明(ウォレット)を今回も利用して接続していきます。クライアント資格証明書のzipを解凍し、クライアント資格証明(ウォレット)ファイルを保存します。
/usr/lib/oracle/19.6/client64/lib/network/admin/にウォレットフォルダ内のtnsnames.ora、sqlnet.ora、cwallet.sso、ewallet.p12を保存するのですが、FTPクライアントからではpermission deniedとなってしまい、opcユーザーから保存ができませんでした。そこで、homeディレクトリに一度保存し。sudoを使い、cpコマンドでコピーを作成することにしました。
sudo cp tnsnames.ora sqlnet.ora cwallet.sso ewallet.p12 /usr/lib/oracle/19.6/client64/lib/network/admin/
必要なパッケージのインストールやファイルの保存が完了しました。それではデータベース に接続してみます。今回はネットワーク経由でデータベース に接続するため、ネットワーク接続情報が必要となります。それが”接続記述子”というものです(こちらを参考)。
接続記述子はクライアント資格証明(ウォレット)内のtnsnames.oraファイルの記述されています。テキストエディタで開くとdb名_high、db名_low、db名_medium、db名_tp、db名_tpurgentの5つが記述されていますが。昨日同様tpを利用します。
先ほどインストールしたSQLPlusを利用して、接続してみます。接続方法はコマンド<sqlplus “dbユーザー名”/”パスワード”@”接続記述子”>です。コマンドを実行すると…
sqlplus "dbユーザー名"/"パスワード"@"接続記述子"
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Apr 15 08:32:00 2020
Version 19.6.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Wed Apr 15 2020 05:34:20 +00:00
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
SQL>
接続できました!ここまで無駄に時間をかけてしまったので、非常に感動しております笑 Connected to:の部分にOCIで作成したデータベースのバージョンとエディションが表示されていますね。
試しに、昨日作成したテーブルを表示してみましょう。
SQL> SELECT * FROM employees;
EMPNO NAME SALARY COMM HIREDATE MANAGER DEPT_ID
---------- ---------- ---------- ---------- --------- ---------- ----------
100 King 4500 200 17-NOV-87 10
101 John 1800 150 07-APR-89 100 20
102 David 2400 31-AUG-91 100 30
103 Paul 1800 120 01-JUN-94 101 20
104 Jones 2500 120 21-NOV-98 102 30
105 Steven 2500 11-JUL-98 102 30
106 Denver 2600 08-NOV-98 101 20
7 rows selected.
出力されました!HIREDATEの月表示が英語表記となっていますね。昨日は日本語表記だったのでOSの言語や環境によって変わるようですね。
おわりに
今日はOracle Cloudで作成したOracle Autonomous DatabaseにVMインスタンスから接続してみました。PHPからの呼び出しや、SQLの実行は今度記事にしたいと思います。
接続自体は難しいところはありませんが、Linux操作になれていなかったので私はだいぶ時間をかけてしまいました。不覚です。Linuxもこれからブログ記事を書く際に触っていくので今後の成長に期待です。
今日はSQL学習を行う予定でしたが、断念して明日行います。30日間ブログ投稿チャレンジが終わった際には「なんでこんなところで時間かけていたんだろうと」思えるようになりたいです。
本日も最後まで見ていただきありがとうございました。
コメント