- PR -

複数のOracleクライアントが存在する環境で接続時にdll関連のエラー

1
投稿者投稿内容
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2005-08-26 20:55
---開発環境-------------------------
[ OS ] Windows2000 pro SP4
[ .NET ] .NET Framework ver1.1
[ VS ] VisualStudio.NET 2003 SP
[DataBase] Oracle 9.2.0
[ 接続 ] OleDb
[開 発 物] Windows アプリ
[言 語] VB.NET
------------------------------------

いつもお世話になります。

OracleをDBにしたC/Sアプリを開発しユーザーの環境下で稼動しています。
開発環境にはOracle9.2.0とありますが元々はOracle7.3.4で開発を行い、
後にサーバーを9.2.0にバージョンアップしました。
よってクライアントにはOracleクライアントの7が入っていて9.2に
バージョンアップ後も問題なく動作していました。

しかしながら他のシステムの関連でユーザーのクライアントにOracle8.0が
インストールされるとアプリを最初にOracleに接続する際にエラーメッセージが
何回か表示されるようになりました。
その後メッセージBoxでOKをクリックしてメッセージを消した後は正常に繋がります。

メッセージの内容は以下の2つです。

 序数435がダイナミックリンクライブラリCORE40.dllから見つかりませんでした。

 プロシージャエントリポイントlxnrpcがダイナミックリンクライブラリNLSRTL33.dll
 から見つかりませんでした。

OracleのHomeSelectorでORACLE_HOMEをOracle8.0側に切替えるとメッセージは出なくなり、
このdllのバージョンからしてOracle8.0側を使って接続を行おうとしているように思います。

ORACLE_HOMEをDEFAULTのままで(クライアントの7)、このメッセージを出なくするように
色々と調査していますが、まだ結論に辿り着きません。

.Netのアプリケーションはどの様な基準でORACLE_HOMEを選択しているのでしょうか?

何かヒントになるような事がございましたらご教示の程、宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-26 21:37
こんにちは、じゃんぬ です。

引用:

.Netのアプリケーションはどの様な基準でORACLE_HOMEを選択しているのでしょうか?
何かヒントになるような事がございましたらご教示の程、宜しくお願いします。


クライアントは、新しいバージョンを優先させているだけかもしれませんね。
9.2 はサーバに入れたものですよね?

引用:

クライアントにはOracleクライアントの7が入っていて9.2に
バージョンアップ後も問題なく動作していました。


ここだけ見るとわかりにくいのですが、

引用:

しかしながら他のシステムの関連でユーザーのクライアントにOracle8.0が
インストールされるとアプリを最初にOracleに接続する際にエラーメッセージが
何回か表示されるようになりました。


とのことなので、クライアント側に入れたのは 8.0 ってことですよね?



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2005-08-26 21:55
こんばんは、じゃんぬさん。

ご返答ありがとうございます。

9.2はサーバー側です。

ユーザーの新しく追加されたORACLE_HOMEの下のbinの中にORA803.DLLが入っていたので
クライアントはOracle8.0.3だと思います。
(なぜだかORA804.DLLとora805.dllもありましたが・・・。)

僕自身の開発環境では特に問題はないのが気になります。
同様にOracleのクライアントが複数存在します。
僕の環境はOSが2000ユーザーはXPのSP2でMDACのバージョンも若干異なります。
僕が2.80でユーザーが2.81です。

あと何か調査する点はあるのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-28 11:11
引用:

とっとさんの書き込み (2005-08-26 21:55) より:

僕の環境はOSが2000ユーザーはXPのSP2でMDACのバージョンも若干異なります。
僕が2.80でユーザーが2.81です。


8.0 だと微妙ですね。
私も同じようなことがあった時に、XP 側でインストーラ作ったら、
何故かうまくいったことがあったんですよね。
ただその時は、MDAC のエラーがしっかりと出ていたんですが...
今回とは少し様子が違うような気はします。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2005-08-28 17:36
こんにちは。

インストーラについては僕の方も不完全ですので作り直すつもりです。
MDACのエラーも出ましたし・・・。

例えばObjectBrowserでも7.3対応のものと9.2対応の複数のバージョンを
インストールした場合、それぞれ対応したORACLE_HOMEを自動的に参照します。

アプリ側でそういう事が出来ないか少し考えてみます。
あと、自分の環境でも本当に?デフォルトのORACLE_HOMEを参照しているか
確認してみます。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2005-08-29 18:40
お世話になります。

原因はこれだと思います。
Microsoft ODBC ドライバおよび OLE DB Provider for Oracle の制限事項
http://support.microsoft.com/default.aspx?scid=kb;ja;244661#appliesto

Microsoft Data Access Components (MDAC) 2.5 以降のバージョンでは、Microsoft ODBC
ドライバおよび OLE DB プロバイダはいずれも Oracle 8i をサポートしていますが、以下の
制限事項があります。

  中略

複数の Oracle クライアントのインスタンス、つまり複数の Oracle ホームは、SYSTEM PATH
変数で定義された最初の Oracle ホームに依存するため、サポートされません。

試しに事象の発生するユーザーのPC上で環境変数Pathに設定されている環境変数のうち、
2つのORACLE_HOMEを入れ替えるとエラーメッセージは出ませんでした。

ただ、OSがXPの場合でないとエラーメッセージが出る現象が出ませんでした。
これについては、まだ調査台数が少ないのですが・・。

他のアプリに影響があると困るので該当のアプリでの環境変数の設定を調べてみます。

とりあえず経過報告です。

とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2005-09-01 14:22
おせわになります。

バッチファイルを作成して

setlocal

set ORACLE_HOME=C:\(新たにインストールしたORACLE_HOME)

cd C:\(該当のアプリのexeファイルのディレクトリ)

(該当のアプリの).exe
endlocal

としました。

自分の環境(OS2000)では上手く行きましたが、XPの環境では上手くいきませんでした。
今までのメッセージが出た後、サービス名を解決できませんのエラーが出ました。

何かOSによる違いがあるのでしょうか?
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2005-09-05 14:02
お世話になります。
バッチファイルを作り直して

setlocal

set PATH=C:\(新たにインストールしたORACLE_HOME)\bin;%PATH:C:\(新たにインストールしたORACLE_HOME)\bin;=%

cd C:\(該当のアプリのexeファイルのディレクトリ)

(該当のアプリの).exe
endlocal

としてアプリ起動前に環境変数のPATHを編集して新しいORACLE_HOMEが先になるように
しました。

.NET Framework Data Provider for Oracle を使用して試してみましたが、
エラーメッセージが出る部分は改善されませんでした。

結局データプロバイダの種類を変更しても環境変数PATHに記述された最初のORACLE_HOMEを
参照するという点は同じでした。
1

スキルアップ/キャリアアップ(JOB@IT)