web-dev-qa-db-ja.com

SQL Server 2008 x64 ODBC Oracleへのリンクサーバーが機能しない

Sql Server 2008 x64を2つのボックスにインストールしました。 1つはWindows 7 x64ワークステーション(Sql Server 2008 x64 SP2開発版)、もう1つはWindows Server 2003 x64(Sql Server 2008 x64 SP2 Enterpriseエディション)です。外部ベンダーのOracleインスタンスへのリンクサーバーを作成しようとしています。フルインストール(XCopyバージョンではない)を使用してOracle ODAC 11g 64ビットドライバーをインストールしました。

ドライバはすべて正しくインストールされているようです。リモートサーバーへの正しいIP、ポートなどを使用してtnsnames.oraファイルを作成および更新し、再起動しました。 64 ODBC管理ツールを使用して、ODBC Oracleサーバーへの接続を作成し、「テスト」ボタンがtnsnames.oraファイルと正しいユーザーIDおよびパスワード。

次に、SQL Server 2008にアクセスして、リンクサーバーを作成します。 OLE DBリンクサーバーを作成し、接続に成功すると、カタログにテーブル/ビューをリストし、1つの重大な問題のみでそれらに対してクエリを実行できます。TIMESTAMPフィールドを持つテーブルの場合、通常の4つの部分からなるクエリは適合をスローします。SQLServerからOracleへのOLEDBリンクサーバーでは、これを見回すことが一般的な問題であり、OPENQUERYを使用することが最も一般的な回避策です。

ODBC接続は、ベンダーが接続に使用することを推奨していますが、ここで大きな問題が発生します。システムDSNを使用して正常に作成されたように見えるリンクサーバーを作成できます= ODBC接続以前に作成しました。カタログ内のテーブル/ビューのリストを表示できますが、すべて正しく表示されます。ただし、データを取得しようとすると、完全に失敗します。

ビュー名を右クリックして[スクリプト]-> [選択先...]を選択すると、次のようなメッセージが表示されます。

[テーブル名]には選択できる列が含まれていないか、現在のユーザーにそのオブジェクトに対する権限がありません。

SELECTを手動でスクリプト化して実行しようとすると、ほとんどの列名がわかっているため、エラーメッセージが表示されます。

OLEリンクサーバー[リンクサーバー名]のDBプロバイダー "MSDASQL"が、テーブル[テーブル名]に対して無効な列定義を返しました。

ベンダーは、ユーザーID(両方のケースで同じ)がテーブル/ビューに対して適切な権限を持っていると述べており、これはOLE DB接続がほとんど機能しているように見えます。Oracleサーバーは10gですが、32ビットか64ビットかわかりません。違いはありますか?

現在、Win7 x64ワークステーションからこれを動作させるように取り組んでいますが、2003サーバーでの短いテストでは同じ結果が得られました。必要に応じて、OLEDB/OPENQUERYソリューションを機能させることができると思います。ただし、これは理想的ではなく、ベンダーによって推奨されていません。 ODBC接続が機能するようにするために私が見逃しているかもしれないアイデアはありますか?

2
BBlake

ビュー名を右クリックして[スクリプト]-> [選択先...]を選択しようとすると、メッセージが表示されます

GUIは、(列名とデータ型を読み取るために)Oracleデータディクショナリビューにアクセスしようとしているため、選択できないため、エラーメッセージが表示されます。

正確な原因を追跡できるように、ODBCセッションをトレースするようにベンダーのOracle DBAに依頼してください。

2
Philᵀᴹ