CentOS 5.5/64ビットVMをセットアップして、PHPおよびPerlスクリプトを使用してリモートOracleデータベースにアクセスしようとしています(Oracleの経験はありません) 、以前は一部のPostgreSQlとMySQLのみをプログラムおよび管理したことがあります。)
次のOracle Instant Client rpmsをインストールしました。
Oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
Oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm
Oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm
そして、次の変数を.bash_profileに追加しました:
export TNS_ADMIN=/etc
export Oracle_HOME=/usr/lib/Oracle/11.2
export LD_LIBRARY_PATH=$Oracle_HOME/client64/lib
PATH=$PATH:$HOME/bin:/sbin:$Oracle_HOME/client64/bin
ファイル/etc/tnsnames.ora
に、Oracleデータベースを実行しているリモートサイトの同僚から受け取った情報を書き込みました。
some_string =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = my_address)(PORT = my_port))
)
(CONNECT_DATA =
(SERVICE_NAME = PDTT)
)
)
良い点は、CLIから実行して接続できることです。
sqlplus 'my_user/my_password@//my_address:my_port/PDTT'
次に、以下を発行していくつかのテーブルを表示できます。
select table_name from user_tables;
また、Sudo pecl install oci8
を正常に実行し、以下を含む/etc/php.d/oci8.ini
ファイルを追加しました。
extension=oci8.so
次のphpinfo()出力を見ることができます
今私の質問と問題をお願いします:
1)Oracle_SID変数を設定する方法と、設定後にsqlplusを呼び出す方法を教えてください。 PHPおよびPerlスクリプトからOracle_SIDを使用できますか/使用する必要がありますか?
2)Sudo -E Perl -MCPAN -e Shell
を実行すると、他のPerlモジュールをインストールするときにうまく機能しますが、「DBD :: Oracleをインストールする」場合は次のように失敗します
CPAN.pm: Going to build T/TI/TIMB/DBD-Oracle-1.26.tar.gz
Using DBI 1.52 (for Perl 5.008008 on x86_64-linux-thread-multi) installed in /usr/lib64/Perl5/vendor_Perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/
Configuring DBD::Oracle for Perl 5.008008 on linux (x86_64-linux-thread-multi)
Remember to actually *READ* the README file! Especially if you have any problems.
The Oracle_HOME environment variable value (/usr/lib/Oracle/11.2) is not valid.
It must be set to hold the path to an Oracle installation directory
on this machine (or a machine with a compatible architecture).
For an Instant Client install, the directory should include an sdk subdirectory.
See the appropriate README file for your OS for more information.
ABORTED!
Running make test
Make had some problems, maybe interrupted? Won't test
Running make install
Make had some problems, maybe interrupted? Won't install
上記の「sdk」ディレクトリについて言及していますが、rpmにはそのディレクトリがまったくありませんでした。
# rpm -ql Oracle-instantclient11.2-devel | grep -i sdk
#
Oracleのインストールと使用に関するヒントと役立つヒントをありがとうございます。多くのOracle情報がありますが、多くの場合、Oracleが同じマシンにインストールされていると想定しています。
質問1の場合、リモートデータベースにアクセスするには、Oracle_SIDは関係ありません。 Oracle_SIDは、クライアントとサーバーが同じホストで実行されている場合にのみ役立ちます。 tnsnames.oraファイルがあれば、次を使用してリモートデータベースに接続できるはずです。
sqlplus my_user@some_string
あなたも使用することができます
sqlplus my_user/my_password@some_string
ただし、私は通常、コマンドラインでパスワードを指定することを避けます-スヌーピーユーザーとpsコマンドがパスワードを渡してしまうことがあります。データベースにパスワードの入力を求めさせます。実際、私はsqlplusコマンドを次のように発行する癖になりました。
sqlplus /nolog
そしてプロンプトの問題で
connect my_user/my_password@some_string
接続しているユーザーやデータベースすら誰にも見えないので、私はそれについて考える必要はありません。
質問#2に関しては、あなたを助けることはできません。
編集:
まあ、多分私は#2を手伝うことができます。 インスタントクライアントでのDBDの使用に関するこのリンク を見つけました。どうやらあなたもsdkインスタントクライアントをダウンロード/インストールする必要があります。リンクのステップ3を参照してください。
私も同じ問題を抱えていました。次のように環境変数Oracle_HOMEを調整することを解決しました:
export Oracle_HOME=/usr/lib/Oracle/11.2/client64
そして$ Oracle_HOME内にそれぞれのサブディレクトリがあります:
binlibsdk
その後、DBD :: Oracleをインストールできます。
1)@connect_stringを省略したい場合は、TWO_TASK環境変数を名前tnsnamesエイリアス(この場合はsome_string)に設定できます。
同じことが、WindowsのLOCAL変数を使用して実行されます。
2)Sudoが環境変数をリセットしているようです。 sudoersファイルのenv_keep行に$ Oracle_HOMEおよびおそらく他のファイルを追加する必要があります。同じことを実現するsudoersファイルへの他の変更について説明します ここ 。