AWSでEC2からRDSのOracleに接続する
前提
EC2
OSはRed Hat Enterprise Linux (RHEL) 8.4
ec2-userで接続
RDS
Oracle19.0
Port1521
※重要
EC2とRDSは同じVPC上に存在する。
EC2とRDSは同じセキュリティグループ内にあるか、
もしくはセキュリティグループ間でポート1521の通信を許可していること。
(ここ、引っかかって接続できなかった。)
EC2にOracle Instant Clientをインストールする。
sqlplusを使うために必要。
インストーラはOracleのサイトにある。
rpm形式のファイルを使う。
クライアントバージョンはなるべくサーバーに合わせた方が無難かと思う。
今回はEC2に直接インストーラをダウンロードした。
ダウンロードするためにwgetを使うのでインストールする。
$ sudo yum install wget
wgetがインストールできたら、Oracle Instant Clientのインストーラをダウンロードする。
適当なディレクトリを作って移動する。
今回は「/home/ec2-user/oracle_client_installer」のディレクトリに保存した。
以下コマンドでダウンロード(バージョンによってパスは異なる。)
BasicとSqlplusが必要。
$ wget https://download.oracle.com/otn_software/linux/instantclient/19600/oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm $ wget https://download.oracle.com/otn_software/linux/instantclient/19600/oracle-instantclient19.6-sqlplus-19.6.0.0.0-1.x86_64.rpm
ダウンロードできたらインストールする。
$ sudo yum install -y oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm $ sudo yum install -y oracle-instantclient19.6-sqlplus-19.6.0.0.0-1.x86_64.rpm
sqlplusのパスが通るように、環境変数を設定する。
19.6の場合は、sqlplusは「/usr/lib/oracle/19.6/client64/bin」にあるので、
export PATH=/usr/lib/oracle/19.6/client64/bin:$PATH export LD_LIBRARY_PATH=/usr/lib/oracle/19.6/client64/bin:$LD_LIBRARY_PATH
これでOK
sqlplusが使えることを確認する。
$ sqlplus64 -v
なんかエラーが出る
error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory
なにやら「libnsl.so.1」というライブラリが不足しているみたい。
(RHEL8だとデフォルトではインストールされていない???)
ファイルはあるみたいなので、以下コマンドでインストールできる。
$ sudo yum install /lib/libnsl.so.1
これでsqlplusが使えるようになる。
$ sqlplus64 -v
RDSのエンドポイント名とポート番号を確認する。
>RDS>データベース>(対象のデータベース)>接続とセキュリティ
・エンドポイント をコピーする。(xxxxxx.ap-northeast-1.rds.amazonaws.com みたいなやつ)
・ポートは変えてなければ1521のはず。
>RDS>データベース>(対象のデータベース)>設定 ・DB名 を確認する(デフォルトだとORCL)
あと、RDS作成時に設定したユーザー名(デフォルトだとadmin)と、パスワードが必要。
以下コマンドで接続する。(デフォルトの場合)
$ sudo sqlplus64 admin@エンドポイント名:1521/ORCL
パスワードを聞かれるので、RDS作成時に設定したパスワードを入力。 これでつながるはず。
以下エラーが出るときは、EC2-RDS間でポート1521が通ってない可能性がある。
AWSのセキュリティグループ設定を見直す。
「ORA-12162: TNS:net service name is incorrectly specified」
日本語(全角文字)を扱えるようにする
Linux側のbashに追加する。
Linux上のユーザーフォルダ直下にあるbash_profileをviで編集する。
$ vi ~/.bash_profile
以下の1行を末尾に追加する。
export NLS_LANG=Japanese_Japan.AL32UTF8
ESC :wqで保存。
bash読み込みはログイン時なので、一度exitしてコンソールに繋ぎ直すこと。