最初に
備忘録として記述してあるので、一部端折っている部分があります。
やりたい事
SQL ServerからOracle(11g)にリンクサーバーを設定し、SQLServerへのSELECT文実行でSQL ServerのテーブルとOracleのテーブルをJOINした結果を取得する。
前提条件
- SQL Server導入済み
- SQL Server Management Studio導入済み
- Oracle導入済み
作業順序
- SQL ServerがOracleに接続出来るようにする
- リンクサーバーの設定をする
- SELECT文を実行する
SQL ServerがOracleに接続出来るようにする
OracleのページからOracle Clientのインストーラを取得して、実行。実行は当たり前だが、SQL Serverが起動している端末で行う。インストールコンポーネントの選択でOracle Provider for OLE DBがインストールされる様にする。
インストール完了後、端末を再起動をする。
リンクサーバーの設定をする
SQL Server Management Studioからの設定方法。
- SQL Serverに接続して、サーバーオブジェクト->リンクサーバー->プロバイダーを開く
- OraOLEDB.Oracleをダブルクリック
-
InProcess許可にチェックを付けてOKとする -
リンクサーバーで右クリックして、新しいリンクサーバーを作成 - 以下の様に設定してOKとする
| ページ | 項目 | 設定値 |
|---|---|---|
| 全般 | リンクサーバー | 任意 |
| サーバーの種類 | その他のデータソース | |
| プロバイダー | Oracle Provider for OLE DB | |
| 製品名 | Oracle | |
| データソース | サーバ(IP等):ポート番号/サービス (例:192.168.11.1:1521/oradb) | |
| プロバイダー文字列 | 空 | |
| セキュリティ | ローカルサーバーのログインとリモートサーバーのログインのマッピング | なし |
| 上記一覧で定義されないログインの接続方法 | このセキュリティコンテキストを使用する | |
| リモートログイン | Oracle接続時のユーザー名 | |
| パスワード | Oracle接続時のパスワード |
Select文を実行する
SelectFromLinkServer(Oracle)
SELECT * from リンクサーバー名..スキーマ名.テーブル名
SQL Server Management Studio上ではリンクサーバー名->default->スキーマ名.テーブル名のツリーで見える為、以下の様なSELECT文を想像するが、defaultは不要。
NGSelectFromLinkServer(Oracle)
--エラーSELECT文。メッセージ7312となる
SELECT * from リンクサーバー名.default.スキーマ名.テーブル名