OS : WindowsXP SP2
Perl : ActivePerl 5.8.8
DBD : DBD-Oracle1.17
DB : Oracle9i
PerlでOracleのDBサーバに接続ができません。
ソースは以下の通りです。
================================================================================
#!perl -w
use DBI;
$dbh = DBI->connect('dbi:Oracle:test', 'scott/tiger') or die "An error occured : $@";
$dbh->disconnect;
exit 0;
================================================================================
上記コードを実行すると、connectの行でdieします。
================================================================================
D:\test>perl ttoracle.pl
DBI connect('test','scott/tiger',...) failed: ORA-12705: Cannot access NLS data files or invalid environment specified (DBD ERROR: OCISessionBegin) at ttoracle.pl line 5
An error occured : at ttoracle.pl line 5.
================================================================================
Oracleのサーバーはローカルにあり、ポートもデフォルトの設定です。
試しに、
$dbh = DBI->connect('dbi:Oracle:test@localhost:1521', 'scott/tiger') or die "An error occured : $@";
としましたが、結果は同じでした。
また、エラーの内容的に環境変数かと思いORACLE_HOMEを環境変数にセットしてみましたが、これもまた、結果は同じでした。
DBの接続については、sqlplusコマンドからであれば問題なく接続できます。
(コマンド:sqlplus scott/tiger@test)
やはり、環境変数まわりの設定が問題でしょうか?
よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
全然回答ではないですが、補足だけ。
windowsだと、NLS_LANG等はレジストリに入ったハズなので、
特に自前でORACLE関連の環境変数をsetしていないのであれば、
私の書いた事については問題ないと思います。
会社の環境でNLS_LANGを環境変数に設定したところ、
PerlからOracleに接続することができました。
(今まで環境変数のNLS_LANGは未設定でした。)
ただ、ひとつ疑問なのが、なぜ自宅ではNLS_LANGの
設定が必要なく、会社では必要なのかということです。
しかも、sqlplusやJDBC経由で接続した場合は一切問題がなく、
Perlの実行時のみ、上記の問題が発生するのです・・・。
とりあえず、当初の問題はおかげさまで解決できました。
ご協力ありがとうございました。
No.3
- 回答日時:
エラーメッセージを正直にうけとれば、
NLS_LANGの設定値が間違っているという事ですが、
だとするとsqlplusも動かないんですよね・・・。
perlを動かす時だけ、
環境変数で間違ったNLS_LANGが設定されていたりしませんか?
この回答への補足
perl及びsqlplus実行時はコマンドプロンプトから直接コマンドを叩いており、環境変数は同じはずなのです。。。
ただ、コマンドプロンプトでsetコマンドを叩いてもNLS_LANGの値は設定されてないようです。このNLS_LANGの設定は必須なんでしょうか?
今までOracleを使っていて、この環境変数を設定したことがないのですが・・・。(設定しなくてもデフォルト値が指定される??)
別回答に補足しましたとおり、会社と自宅で同様の環境のはずが、動作が違うため、その違いを探ってみようと思っています。
No.1
- 回答日時:
解決するかどうかわかりませんが…
use DBI;
use DBD::Oracle;
$dbh = DBI->connect("dbi:Oracle:$SID","$UserName/$Paswd") || die "Unable to connect:$DBI::errstr";
この回答への補足
返事が遅れてしまい、申し訳ございません。
ご提案いただいた方法で試してみましたが、結果は同様でした。
ちなみに、会社の環境で試すと上記エラーが発生し、会社と同様のインストール方法(環境変数等も同じはず・・・)で自宅にOracleを導入し、実行してみたところ問題なく接続できました。
どうも、perlよりも、DB側に問題があるように思えるのですが、なにを確認してよいのか分かりません。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Windows 10 VirtualBox 7のゲストOSでの物理HDDパーティションのマウント方法 2 2023/05/04 13:01
- その他(SNS・コミュニケーションサービス) 爆サイやっていたら、下のような文字が出ました! これは何なのでしょうか? nginx error! 1 2023/06/09 12:27
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- ソフトウェア 移行PCにDockerがインストールされていても各種開発環境のアプリはインストールが必要? 2 2023/05/21 21:53
- PHP php エラー 2 2022/10/23 16:43
- オープンソース AWSドメイン名でApacheテスト・ページを表示させる方法を教えて下さい。 1 2023/04/26 15:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fetchrow_arrayとfetchrow_hash...
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
Form間の値の渡し方
-
VBAで別モジュールへの変数の受...
-
例外処理のフローチャートの記...
-
モジュールの最大数はいくつな...
-
VBAで旧字体を異字体に一括で変...
-
Excel VBA 『Call』で呼び出す...
-
Excel VBAで、ユーザーフォーム...
-
モジュールとは何ですか
-
VBでグローバル変数を宣言するには
-
LCD ディスプレイを Raspberry ...
-
ベースモジュールって?
-
本当にPublicな変数(配列で)
-
エクセルVBAでシートモジュール...
-
Perlソースコードをコンパイル...
-
Excel VBAで、ユーザーフォー...
-
EXECEL VBA コマンドボタンか...
-
VBA モジュールを閉じるショー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fetchrow_arrayとfetchrow_hash...
-
perlでdb(mysql)に接続
-
perlのdbi-connect処理のエラー
-
PerlソースでのSQLのエラーにつ...
-
PerlでMySQLのテーブル一覧取得
-
ActivePerl を使用して MySQL に
-
MySQLのトランザクションについて
-
テキストデータをpostgreSQLの...
-
CGIからデータベースにデータを...
-
データベースにアクセス出来ま...
-
perlでのDBI接続
-
CGI(perl)データベースを教えて...
-
DBIでメールアドレスにマッチさ...
-
データベースへのデータの受け渡し
-
Oracleのデータベースに接続で...
-
ファイルデータ内容を SQL条件...
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
おすすめ情報