web-dev-qa-db-ja.com

Windows認証ユーザーとして「OLE DBプロバイダーのインスタンスを作成できません」エラーが発生しました

Oracleサーバー上のMS SQL Serverからopenrowsetを実行しようとしています。

次のコマンドを実行すると:

select * from
OPENROWSET('OraOLEDB.Oracle','srv';'user';'pass', 
'select * from table')

次のエラーが発生します

Msg 7302, Level 16, State 1, Line 1
Cannot create an instance of OLE DB provider "OraOLEDB.Oracle" for linked server "(null)".

OraOLEDB.Oracleでopenrowsetを使用する方法を教えてください。

64ビットバージョンのMS SQL ServerとOracle OLEDBドライバーを使用しています。

編集

Windows 7 x64Windows Server 2008 x64 with MS SQL Server 2008 x64を実行している2台のマシンでこれを試しました。どちらも同じエラーメッセージを表示しました。

20
th1rdey3

SQL Server Enterprise Managerで\Server Objects\Linked Servers\Providersを開き、OraOLEDB.Oracleプロバイダーを右クリックしてプロパティを選択し、"Allow inprocess"オプションを確認します。リンクサーバーを再作成し、再度テストします。

SQL Server Management Studioにアクセスできない場合は、次のクエリを実行することもできます。

EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1
47
David Brabant

リンクサーバーは、サーバーのローカル管理者であるユーザーに対しては機能するが、他のユーザーに対しては機能しないという問題に遭遇しました。何時間もいじくり回した後、次の手順を使用して問題を解決できました。

  1. (CTRL + R)「dcomcnfg」を実行します。 「コンポーネントサービス->コンピューター->マイコンピューター-> DCOM構成」に移動します。
  2. 「MSDAINITIALIZE」のプロパティページを開きます。
  3. プロパティページで「アプリケーションID」をコピーします。
  4. 「dcomcnfg」を閉じます。
  5. 「regedit」を実行します。 ???で「HKEY_CLASSES_ROOT\AppID {???}」に移動します手順3でコピーしたアプリケーションIDを表します。
  6. 「{???}」フォルダーを右クリックして、「許可」を選択します
  7. ローカル管理者グループをアクセス許可に追加し、フルコントロールを付与します。
  8. 「regedit」を閉じます。
  9. サーバーを再起動します。
  10. 「dcomconfig」を実行します。 「コンポーネントサービス->コンピューター->マイコンピューター-> DCOM構成」に移動します。
  11. 「MSDAINITIALIZE」のプロパティページを開きます。
  12. [セキュリティ]タブで、[起動とアクティブ化のアクセス許可]の下の[カスタマイズ]を選択し、[編集]ボタンをクリックします。
  13. 「認証済みユーザー」を追加し、4つの起動およびアクティベーション許可をすべて付与します。
  14. 「dcomcnfg」を閉じます。
  15. Oracleインストールルートディレクトリを見つけます。私の場合は「E:\ Oracle」。
  16. Oracleルートディレクトリのセキュリティプロパティを編集します。 「認証済みユーザー」を追加し、「読み取り実行」、「フォルダーの内容の一覧表示」、および「読み取り」権限を付与します。新しい許可を適用します。
  17. [詳細なアクセス許可]ボタンをクリックし、[アクセス許可の変更]をクリックします。 「すべての子オブジェクトのアクセス許可を、このオブジェクトの継承可能なアクセス許可に置き換える」を選択します。新しい許可を適用します。
  18. SQL Serverで「OraOLEDB.Oracle」プロバイダーを見つけます。 「インプロセスを許可」パラメータがチェックされていることを確認してください。
  19. サーバーを再起動します。
12
Matt Anderson

(ローカルSQL Serverアカウントではなく)Windows認証でSQL Serverに接続する場合、リンクサーバーを使用しようとすると、エラーメッセージが表示される場合があります。

Cannot create an instance of OLE DB provider "(OLEDB provider name)"...

「MSDAINITIALIZE DCOMクラスのセキュリティ設定が正しくないため」この問題に対する最も直接的な回答は Microsoft KB 2647989 によって提供されます。

解決策は、MSDAINITIALIZEのセキュリティ設定を修正することです。 Windows Vista以降では、クラスはTrustedInstallerによって所有されているため、セキュリティを調整する前にMSDAINITIALIZEの所有権を変更する必要があります。上記のKBには、詳細な手順が記載されています。

このMSDNブログの投稿で理由を説明しています

MSDAINITIALIZEは、OLE DB。によって提供されるCOMクラスです。このクラスは、OLE DB接続文字列を解析し、プロパティ値に基づいてプロバイダをロード/初期化できます。接続文字列.MSDAINITILIAZEは、SQL Serverに接続しているユーザーによって開始されます。Windows認証を使用してSQL Serverに接続する場合、プロバイダーはログインユーザーアカウントで初期化されます。ログインユーザーがSQLログインである場合、プロバイダーは初期化されますSQL Serverサービスアカウントで使用されるログインの種類に基づいて、MSDAINITIALIZEの権限を適宜提供する必要があります。

この問題は、少なくともSQL Server 2000までさかのぼります。 MicrosoftのKB 280106はエラーについて説明しています (「メッセージ3」を参照)で、OLEDBプロバイダーのIn Processフラグを設定する修正案があります。

In Processを設定することで差し迫った問題を解決できますが、それはあなたが望むものではないかもしれません。マイクロソフトによると、

SQL Serverプロセスの外部でプロバイダーをインスタンス化すると、プロバイダーのエラーからSQL Serverプロセスが保護されます。プロバイダーがSQL Serverプロセスの外部でインスタンス化される場合、長い列(テキスト、ntext、またはイメージ)を参照する更新または挿入は許可されません。 - SQL Server 2008 R2のリンクサーバープロパティドキュメント

より良い答えは、Microsoftのガイダンスに従って、MSDAINITIALIZEセキュリティを調整することです。

7
patrickmdnet

特にエラー7302については、レジストリでOraOLEDB.Oracleを探しているときに、InprocServer32の場所が間違っていることを発見しました。

その場合、またはレジストリでその文字列が見つからない場合は、コンポーネントをインストールまたは再登録する必要があります。

GUID=レベルからキーを削除してから、ProgID(OraOLEDB.Oracle)キーを見つけ、それも削除する必要がありました(ProgIDはペアとしてCLSIDにリンクします)。

次に、ORAOLEDB * .dllでregsvr32.exeを呼び出してOraOLEDB.Oracleを再登録しました。

単独で再登録しても問題は解決しませんでした。レジストリキーを削除して正しい場所を指すようにしなければなりませんでした。または、InprocServer32の場所をハックします。

現在、シングルスレッドアパートメントに関するエラー7308があります。転がる!

2
GilesDMiddleton

Oracle 12cにリンクしようとするSQL Server 2017で同じエラーを受け取りました。 OracleのSQL Developerを使用してソースデータベースに接続することはできましたが、リンクサーバーは7302エラーをスローし続けました。

最後に、すべてのSQLサービスを停止、次にODACコンポーネントを再インストール。 SQLサービスのバックアップを開始しました。

0
Josh Jay

次の構成と同様の状況:

  • Windows Server 2012 R2標準
  • MS SQL Server 2008(SQL 2012もテスト済み)
  • Oracle 10gクライアント(OracleDB v8.1.7)
  • MSDAORAプロバイダー
  • エラーID:7302

私の解決策:

  • インストール2ビット MS SQL Server(64ビットMSDAORAは存在しません)
  • インストール2bit Oracle 10g 10.2.0.5パッチ(setup.exeでW7互換性に設定)
  • SQLサービスを再起動します
  • チェックプロセス内で許可 MSDAORAプロバイダーで
  • リンクされたOracleサーバー接続のテスト
0
gaffcz