9

SQL Server 2005 を Oracle 10g データベースにリンクしようとしています。Oracle クライアントを SQL サーバーにインストールし、tnsping と sqlplus の両方を使用して Oracle データベースに接続できることを確認しました。SQL Server でクエリを実行しようとすると、次のようになります。

OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD" returned message "ORA-12154: TNS:could not resolve the connect identifier specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD".

何か案は?次の両方のクエリを試してみましたが、うまくいきませんでした。

select * from openquery(ORA_CSSA2APD, 'select count(rowid) from eservice_op.agent')

select count(rowid) from ORA_CSSA2APD..eservice_op.agent

4

5 に答える 5

6

環境設定を疑います。つまり、セッションは TNSNAMES.ORA ファイルを取得していますが、SQL Server の基礎となるセッションはそうではありません。私は ORACLE_HOME をチェックし、おそらく TNS_ADMIN が設定され、指している可能性があります。

SQL Server 接続でデータベースの簡易接続構文を使用できますか。

IE は、ORA_CSSA2APD をホスト名:1521/service_name に置き換えます。

于 2010-08-11T00:06:07.757 に答える
4

ORA:12154 は通常、接続しようとしているデータベースのエイリアスが tnsnames.ora ファイルに見つからなかったことを意味します。( http://ora-12154.ora-code.com/の詳細な説明を参照してください。)

データ ソースが、tnsnames ファイルが認識しているエイリアスであることを確認する必要があります (クエリを実行している場所に関係なく、SQL Server が存在するサーバー上)。SQL Server は他の Oracle クライアントと同じように、接続先を知る必要があり、tnsnames.ora ファイルがなければ、Oracle データベースの場所の詳細を知ることはできません。

SQL Server サーバーにアクセスできない場合 (冗長部門のサーバーがあります)、サーバー管理者に設定を依頼する必要があります。

(リンク サーバーのデータ ソース プロパティは、リンクしようとしているデータベースの tnsnames.ora エイリアスのエイリアスである必要があります。)

HTH...

于 2010-08-10T00:05:33.677 に答える
2

この問題は私にも起こりましたが、特定の Windows ユーザー アカウントでのみ発生しました。OraOLEDB.Oracle プロバイダーの「インプロセスを許可する」プロバイダー オプションを有効にする ([SSMS] > [サーバー オブジェクト] > [リンク サーバー] > [プロバイダー] > [OraOLEDB.Oracle])、SQL Server Windows サービスを再起動し、最後に TNSNAMES.ora ファイルのアクセス許可を調整する組み合わせ直接。

于 2016-08-19T21:04:15.657 に答える
2

TNS エラー メッセージは通常、接続に欠陥があることを意味します (たとえば、指定されたポートでホストを取得できない/タイムアウトになっている、または単に ORA_CSSA2APD が何を指しているのかわからないなど)。

考慮すべきことの 1 つは、64 ビットの Windows を使用しているか、32 ビットまたは 64 ビットの Oracle クライアント (あるいは両方) を使用しているかということです。Oracle を呼び出そうとする 64 ビット OS で実行されている 32 ビット アプリがある場合は、32 ビット Oracle クライアントが必要です。64 ビット OS で 32 ビット クライアントを使用するのは難しい場合があり、"Program Files (x86)" フォルダーにインストールしない方が安全です。

また、次の点に注意してください

Windows Server 2003 または Windows XP の 64 ビット バージョンでは、%WinDir%\System32 フォルダーは 64 ビット アプリケーション用に予約されています。32 ビット アプリケーションが System32 フォルダーにアクセスしようとすると、アクセスは次のフォルダーにリダイレクトされます: %WinDir%\SysWOW64

したがって、64 ビット Windows の場合、32 ビットのものは SysWOW64 フォルダーにあり、64 ビットのものは system32 フォルダーにあります。

于 2010-08-09T22:59:48.047 に答える
0

なんらかの理由で、SQL Server がデフォルトの Oracle の場所で TNSNAMES.ORA ファイルを探し始めたことがわかりました。

TNSNAMES.ORA ファイルを次の場所に配置することができ、結果は成功しました。

32 ビット OS 上の SQL Server 32 ビットまたは 64 ビット OS 上の 64 ビットの場合

%ProgramFiles%\Oracle
%ProgramFiles%\Oracle\network\admin

64 ビット OS 上の SQL Server 32 ビットの場合

%ProgramFiles% (x86)\Oracle
%ProgramFiles% (x86)\Oracle\network\admin

私たちも SQL*Plus を使用して接続できましたが、SQL Server は接続できませんでした。SQL*Plus は同じ TNSNAMES.ORA ファイルを使用していないことに注意してください。これが、1つが機能した理由です。

于 2013-11-16T23:13:48.947 に答える