質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2108閲覧

【AWS】EC2インスタンスと外部オラクルRDSとの接続がうまくいきません。(Centos7.6.1810/PHP7.1.26/oci2.1.8/Apache2.4.6)

aaayii

総合スコア14

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/03/04 10:54

編集2019/03/06 03:26

【やりたいこと】
これから開発するウェブアプリケーション(AWSのEC2)から既存システムのデータを参照できるようにしたいです。
既存システムはVBで作られており、そのデータベースがRDSでオラクルエンジンを使っています。

【開発している環境】Centos7.6.1810/PHP7.1.26/oci2.1.8/Apache2.4.6

【つまづいているところ】
すべて設定し終わったあと「IP/test.php」に接続すると次のようなエラーがでてなかなか成功しません。
下記に実行した内容と結果、エラー内容、test.phpの内容を載せます。
恐れ入りますがご教授いただけると幸いです。
よろしくお願いいたします。

【test.php】

<?php $conn = oci_new_connect('ユーザー名', 'パスワード', 'エンドポイント/orcl','AL32UTF8'); var_dump($conn);

【エラー内容】

PHP Warning: oci_new_connect(): ORA-12170: TNS:Connect timeout occurred in /var/www/html/test.php on line 4

【oci8導入の流れ】※づらづら書きます。

#yum update #yum install epel-release #rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm #yum install --enablerepo=remi,remi-php71 php php-devel php-pear php-mbstring php-pdo php-gd php-zip php-xml php-fpm php-mcrypt php-mysqlnd php-pecl-apcu php-pecl-zendopcache php-intl #yum install php71-php-oci8 //下記サイトからダウンロードrpmファイルを/tmpディレクトリに格納。 https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html #cd /tmp #rpm -ivh oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm #rpm -ivh oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm #vi /etc/profile #export ORACLE_HOME=/usr/lib/oracle/12.2/client64/lib [追記] #export NLS_LANG=Japanese_Japan.AL32UTF8 [追記] #export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH [追記] #export PATH=$ORACLE_HOME:$PATH [追記] #source /etc/profile #yum -y install systemtap-sdt-devel #export PHP_DTRACE=yes #pecl channel-update pecl.php.net #yum -y install gcc #pecl install oci8-2.1.8 php.iniにextension=oci8.so [追加] #systemctl restart httpd.service//Apache再起動 //モジュールが読み込まれているか確認。 #php -m | grep oci oci8 //「oci_connect」関数が存在するかチェック。 #php --rf oci_connect Function [ <internal:oci8> function oci_connect ] { - Parameters [5] { Parameter #0 [ <required> $username ] Parameter #1 [ <required> $password ] Parameter #2 [ <optional> $connection_string ] Parameter #3 [ <optional> $character_set ] Parameter #4 [ <optional> $session_mode ] } }

!!追記です!!

#mkdir -p /usr/lib/oracle/12.2/client64/network/admin #vi /usr/lib/oracle/12.2/client64/network/admin/tnsnames.ora ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = エンドポイント)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL) ) )

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/04 11:08

phpからではなくコマンドラインとか別のツールとかからは接続できるんですよね?
退会済みユーザー

退会済みユーザー

2019/03/04 11:59

ファイアウォール方面とSELinux方面の状況も確認。
atata0319

2019/03/04 18:09

RDS って AWS 使ってるならシステム構成の全体像が分からないと難しそうですね。接続元の CentOS がどこに立っているかとか?EC2 かオンプレミスか?
aaayii

2019/03/05 00:58

mts10806さん ご連絡ありがとうございます。私のローカル(windows)からはXammp内の全く別システムですが接続は可能です。現在開発中のサーバーからSQL*Plusなどを使った接続はまだやっておりません
aaayii

2019/03/05 01:02

m6uさん ご連絡ありがとうございます。 FWはSSHでfirewall-cmd --stateとたたくと、bash: firewall-cmd: command not foundとなるので少なくても有効にはなってなく、 SELinuxもdisabledの状態です。
aaayii

2019/03/05 01:10

atata0319 ご連絡ありがとうございます。 今回開発しているものは、AWSのEC2インスタンスを使用しております。 ちなみに既存システムは、システム:AWS上のEC2インスタンスWindowsServer2012、データベース:AWS上のRDSです。
atata0319

2019/03/05 02:23

なんとなくセキュリティグループが設定されてないだけって気もしますが。調査用にインスタントクライアントのtoolsパッケージでsql*plusもインストールしておくのがおすすめです。まずはtnspingコマンドで疎通確認ですね。 tnsping エンドポイント/orcl tnspingコマンドが無いのであればインスタントクライアントのtoolsに入ってるかもしれません。
atata0319

2019/03/05 03:00

instant clientにはtnspingが含まれないことを確認しました。ネットワークレベルの疎通確認にはtelnetを使った方が早そうです。該当のエンドポイントの1521ポートに接続してみてください。
aaayii

2019/03/05 03:22

セキュリティグループが設定とは、EC2でクライアント側のインバウンド設定のことでしょうか。 また「# telnet エンドポイント 1521」を実行したところ、telnet: connect to address 10.0.0.7: Connection timed outと表示され接続できませんでした。 それと新たにtnsnames.oraの設定をしてみました。追記いたしますので合わせてご確認いただきたいです。 よろしくお願いいたします。
aaayii

2019/03/05 03:44

ちなみにsqlplus64でユーザー名・パスを入力すると、「ORA-12162: TNS: 指定されたNetサービス名は正しくありません。」となります。 調べるとユーザーオラクルの/oracle/.bashrcにORACLE_SIDをセットとありますがそもそもユーザーオラクルを作ってないですし、必要でしょうか。。
guest

回答1

0

ベストアンサー

同一 VPC 内での話ですが、RDS はデフォルトでポートが閉じられているので、RDS のセキュリティグループでポート 1521 で該当の EC2 の CentOS インスタンスからのインバウンドを許可しておく必要があります。同様に CentOS 側のセキュリティグループではポート 1521 の RDS に対するアウトバウンド通信を許可しておく必要があります。
これができていれば、CentOS から telnet エンドポイント 1521 が通るはずです。当然、標準の telnet プロトコルではないので応答はありません。


ちなみにsqlplus64でユーザー名・パスを入力すると、「ORA-12162: TNS: 指定されたNetサービス名は正しくありません。」となります。

調べるとユーザーオラクルの/oracle/.bashrcにORACLE_SIDをセットとありますがそもそもユーザーオラクルを作ってないですし、必要でしょうか。。

ORACLE_SID は不要です。それはローカルに DB を立てる時に使います。上記のエラーは tnsnames.ora は見つかったが、tnsnames.ora の内容に誤りがある際に発生します。ただし、記載通りの内容であれば、このエラーになる可能性は低いと思われます。現在稼働している Windows Server の tnsnames.ora をそのままコピーして改行文字が正しくない状態になっている可能性はあるかなと思いました。 何か予想外の文字が含まれているか確認することをお勧めします。なお、instant client で tnsnames.ora を使用する場合、TNS_ADMIN 環境変数を使用するのがお勧めです。上記の設定ですと以下のような記述になります。

export TNS_ADMIN=/usr/lib/oracle/12.2/client64/network/admin ```ただ、他に Oracle Client をインストールしていないなら、現在のままでも良いと思います。 --- 最初に書いた telnet が通った状態になっていれば、以下のように指定すれば大体つながると思うのですが・・・。

sqlplus64 ユーザー名/パスワード@エンドポイント名/ORCL

まずは SQL*Plus で普通に接続できてから、PHP の方を確認された方が良いかと思います。 --- あと、AWS の話であることを質問に追記した方が回答がつきやすいかもしれません。

投稿2019/03/05 14:44

atata0319

総合スコア881

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaayii

2019/03/06 03:23

解決いたしました! 今まで別のVPC内にインスタンスを作ってましたが、既存システムと同じVPC内にインスタンスを建て、セキュリティーグループも一緒のものを使用したら上記の設定で接続可能となりました! atata0319さんの「同一 VPC 内での話」がなかったら気づきませんでした。 大変ありがとうございます!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問