てみブログ

てみブログ

個人的な覚書用です

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してコンソールに繋ぎ直すこと。