3

現在、.NET Microsoft oracle ドライバーから ODP.NET ドライバーに移行中です。

私たちが経験した問題の 1 つは、次のエラーです。

ORA-12705: NLSデータ・ファイルにアクセスできないか、指定された環境が無効です

レジストリを変更して設定を変更することで、エラーを停止することができました (この質問を参照してください) 。

私たちの場合、私たちは変更しました

HKEY_LOCAL_MACHINE - SOFTWARE - ORACLE - NLS_LANG

NAに設定された

と同じになる

HKEY_LOCAL_MACHINE - SOFTWARE - ORACLE - HOME0 - NLS_LANG

正しく設定されたもの

私の質問は、レジストリに異なる NLS_LANG 設定があるのはなぜですか? この値を変更すると、影響が生じる可能性がありますか?


更新: Oracle NLS FAQで次のことを見つけました

Oracle バージョン 7 の場合:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

Oracle Database バージョン 8、8i、および 9i の場合:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEx\

「x」はOracleホームを識別する一意の番号です。

HOME0 は最初のインストールです

Oracle データベース 10g の場合:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_<oracle_home_name>

そこに名前のエントリがあります NLS_LANG

OK、バージョンごとに異なるレジストリ設定があります...

ノート:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE バージョン 7 がインストールされていないときに、NLS_LANG が「NA」に設定されていることに混乱する人もい ます。これは下位互換性のために使用され、無視できます。

私は Oracle 9i を使用しているので、さらに混乱しています。ODP.NET dll が Oracle 7 のレジストリ設定を調べているのはなぜですか?

4

5 に答える 5

2

私は同様の問題を抱えていました。

ORA-12705: NLSデータ・ファイルにアクセスできないか、指定された環境が無効です

ODP.NET dll またはインスタント クライアントがレジストリを読み取っていました。

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG=NA

値 NA が原因でエラーが発生しました。

これは、すでにクライアントをインストールしていたが、ODP.NET を使用した VB.NET アプリ用にネットワーク ドライブ経由で Oracle インスタント クライアントを使用したかったためです。

私の vb.net ソリューションでの簡単な修正は、たとえば、次の方法でアプリケーションの環境を調整することでした。

Environment.SetEnvironmentVariable("NLS_LANG", 
                    "AMERICAN_AMERICA.WE8MSWIN1252", 
                    EnvironmentVariableTarget.Process)

注意してください。Oracle の「NLS FAQ」リンクは無効になりました (2012)

于 2012-01-17T16:50:55.057 に答える
2

11g ODP リリースに関する PER Oracle Notes では、次の場合にこのエラーが発生する可能性があります。

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG=NA <--- This NA does in fact cause this error if set to NA.

DELETING必要でない場合は、キーを試すかNLS_LANG、ロケールに有効な設定に設定できます。

に設定しAMERICAN_AMERICA.WE8MSWIN1252ます。

于 2011-09-13T23:32:08.377 に答える
2

私たちの場合、本番環境の Oracle 9i サーバーに Web サービスをインストールしていたため、Oracle レジストリに重大な変更を加える必要はありませんでした。

解決策は、Web サービスが実行されているユーザー ID の ORACLE レジストリ キーへのすべてのアクセスを拒否することで、ODAC が ORACLE レジストリ キーを認識できないようにすることでした。

  1. 開始 -> 実行... regedit (管理者として)
  2. 案内するHKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
  3. キーを右クリックORACLE-> パーミッション...
  4. [追加...] ボタンをクリックします。
  5. Web サービスのアプリケーション プール ID で構成された Web サービス ユーザー名 (例: IUSR_MyWebService) を追加します。これは、タスク マネージャーの w3wp.exe プロセスに対して表示されるユーザー名です。
  6. OK を押します。
  7. 新しいユーザーのアクセス許可については、フル コントロールのアクセス許可に対して [拒否] をオンにして、[OK] をクリックします。

ORACLEこれは問題なく機能し、おまけとして、レジストリ キーに対する今後の変更からアプリケーションが確実に分離されるようにしました。

ヒント:問題のユーザーが問題のキーにアクセスできないことを証明するには、レジストリ エディターの実行中のインスタンスをすべて閉じ、そのユーザーとして (Run As... を使用して)CMDプロンプトを開始し、コマンドから起動します。促す。regedit

于 2013-01-11T16:54:46.340 に答える
1

これは、ODAC 11 クライアント コンポーネント ( Oracleの Web サイトからダウンロード) をインストールすることで、最終的にすべて解決されました。クライアントを完全にインストールするのではなく、ODAC dll をコピーしたため、システムが混乱していたと思います。ODP.NET は Oracle 11 クライアントを想定しており、Oracle ホームの場所を知りませんでした。

注: xCopy デプロイメントを使用して ODAC コンポーネントをインストールする場合は、それらを既存の Oracle ホーム ディレクトリ (9i クライアントの場合は c:\oracle\ora92 など) にインストールしないでください。これにより、「プロバイダは Oracle クライアントのバージョンと互換性がありません」というエラーが発生します。

于 2010-01-14T12:51:05.830 に答える
1

Oracle クライアント (ORACLE_HOME\bin\ora*.dll) は、同じディレクトリで「oracle.key」という名前のファイルを探しています。このファイルには、この Oracle クライアント インストールに属するレジストリ キーの名前が含まれています。(例: "Software\ORACLE\HOME3") アンドレアス

于 2009-11-19T16:24:51.487 に答える