SQL ServerからORACLEクエリデータは、OracleにSQL Serverで作成することができ、達成するためにサーバーをリンクされますが、32ビット、64ビットマシンやソフトウェアに応じて
私たちは、別のドライバを実装する必要があります。
64ビットマシン上で、アクセス・インターフェースを介して:OLE DBのOracleProvide、達成されます。
1、機械およびソフトウェア環境
オペレーティングシステムは、次のとおりです。Windows 7の究極の64ビット版、SQL Serverの20008R2 64魏、Oracle 11gの11.2.0.1.0 64ビット。
2、ORACLEの環境設定
パスワードは、ユーザーがスコットの虎で、変更、および、サインインしようとすると、ルックアップテーブルをアカウントのロックを解除するために、オラクルを接続します。
1 C:\ Users \ユーザー管理> SQLPLUS / としてSYSDBA 2 3 SQL * Plusを:リリース11.2。0.1。0星期四3月に生産13 16:11:03 2014年 4 5著作権(C)1982、2010 、Oracleの。全著作権所有。 6 7 8 连接到: 9 Oracle Database 11gのEnterprise Editionのリリース11.2。0.1。0 - 64生産 10 ザ・パーティショニングでは、OLAP、アプリケーションのテストデータマイニングとRealオプションで 11 12 SQL> ALTERタイガーで識別されるユーザーのscott; 13 14 ユーザーが変更されました。 15 16 SQL> ALTERスコットアカウントユーザUNLOCK; 17 18 ユーザーが変更されました。 19 20 SQL>接続スコット/ タイガー 21が 接続されています。 22で SQL> SELECT COUNT(*)からEMP; 23は、 COUNT(* ) 24 ---------- 25 12れています
ビューのlistener.oraは正しいです。
1ネットワーク設定ファイルのlistener.ora#:D:\アプリの\管理者\製品\ 11.2。0 \ dbhome_1 \ネットワーク\管理者\ listener.oraに 2 Oracle設定ツールによって生成#。 3 4 5 SID_LIST_LISTENER = 6 (SID_LIST = 7 (SID_DESC = 8 (SID_NAME = CLRExtProc) 9 (ORACLE_HOME = D:\ \アプリ\ Administratorの\物11.2。0 \ dbhome_1) 10 (PROGRAM = EXTPROC) 11 (ENVS = "EXTPROC_DLLS = ONLY:D:\アプリ\管理\製品11.2.0 \ dbhome_1 \ビン\のoraclr11.dll \ 」) 12 ) 13 14 (SID_DESC = 15 (GLOBAL_DBNAME = ORCL) 16 (ORACLE_HOME = D:\アプリ\管理\ \製品11.2。0 \ dbhome_1) 17 (SID_NAME = ORCL) 18 ) 19 ) 20 21 22 23 LISTENER = 24 (DESCRIPTION_LIST = 25 (DESCRIPTION = 26 (ADDRESS =(PROTOCOL = TCP)(HOST =ローカルホスト)(PORT = 1521)) 27 ) 28 )
内側には特に注意してください:
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\アプリ\ Administratorの\製品11.2.0 \ dbhome_1 \)
(SID_NAME = ORCL)
)
また、tnsnames.oraファイルが正しいことを参照してください。
1#のtnsnames.oraネットワーク設定ファイル:D:\ \アプリケーション\管理者\製品11.2。0 \ dbhome_1の\ NETWORK \ ADMINののの\のtnsnames.ora 2 Oracle設定ツールによって生成#。 3 4 ORACLR_CONNECTION_DATA = 5 (DESCRIPTION = 6 (ADDRESS_LIST = 7 (ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC1521)) 8 ) 9 (CONNECT_DATA = 10 (SID = CLRExtProc) 11 (PRESENTATION = RO) 12 ) 13 ) 14 15LISTENER_orcl = 16 (ADDRESS =(PROTOCOL = TCP)(HOST =ローカルホスト)(PORT = 1521 )) 17 18 ORCL = 19 (DESCRIPTION = 20 (ADDRESS =(PROTOCOL = TCP)(HOST =ローカルホスト)(PORT = 1521 )) 21 (CONNECT_DATA = 22 (SID = ORCL) 23 (SERVER = DEDICATED) 24 (SERVICE_NAME = ORCL) 25 ) 26 )
具体的には:
ORCL =
(DESCRIPTION =
(ADDRESS =(PROTOCOL = TCP)(HOST =ローカルホスト)(PORT = 1521))
(CONNECT_DATA =
(SID = ORCL)
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL) ) )
リスナーが正常であれば参照してください。
1つの SQL> ホストLSNRCTLステータス 2 3 LSNRCTL ための 64ビットのWindows:バージョン11.2。0.1。0 -オンの製造13 3月- - 2014 16:16:21 4 5著作権(C)1991、2010 、オラクル。全著作権所有。 6 7正在连接到(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST =ローカルホスト)(PORT = 1521 ))) 8 リスナーの的ステータス 9 ----------------- ------- 10 別名LISTENER 11バージョンTNSLSNR のための 64ビットのWindows:バージョン11.2。0.1。0 - 生産の 12開始日 13 -月- 2014年 13:17:27 13アップタイム 0ティエン2 Xiaoshi 58分58 ミャオ族 14 トレースレベルOFF 15 安全ON:ローカル認証OS 16 SNMP OFF 17。リスナーパラメータファイルをD:\アプリケーション\管理者\製品\ 11.2。0 \ \ネットワーク\のADMIN dbhome_1のlistener.ora \ 18リスナー・ログ・ファイルd:\アプリケーション\管理者\ DIAG \ TNSLSNR \ GGG- PC \リスナー\アラート\たlog.xml 。19 エンドポイントの要約をリスニング... 20である (DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = 127.0。0.1)(PORT = 1521 ))) 21は 、サービスの抽象.. 22サービス" CLRExtProc "を含む。1つのインスタンス。 23基 の例としては、「CLRExtProc 」、UNKNOWN状態、このサービスを備える。1 中...ハンドラ 24サービス" ORCL "を含む。1つのインスタンス。 25基 の例は「ORCL 」、ステータスUNKNOWN、このサービスは、1つのにハンドラを... 26コマンドが正常に完了します
図3は、リンクサーバーをセットアップします。
tnsnames.oraファイルORCLサービス名:特に注目すべきなのは、データソースORCLが参照していることです。
最初のステップは、「新しいリンクサーバー」を選択します
第二段階は、OracleがOLE DBを提供する選択してください
第三段階、製品を入力してください:オラクル、データソース:ORCL
第四ステップは、実際の状況に応じて、この設定をoracleユーザー名とパスワードを入力し、入力がうまく決定するために、ポイントを終えました。
4、試験クエリ
1 選択 * から OPENQUERY(xxxは、' EMP SELECT * FROM ')
リターンの結果:
図5に示すように、コードで実装。
1 /****** Object: LinkedServer [ORCL_SCOTT] Script Date: 03/13/2014 16:25:21 ******/ 2 EXEC master.dbo.sp_addlinkedserver 3 @server = N'ORCL_SCOTT', 4 @srvproduct=N'oracle', 5 @provider=N'OraOLEDB.Oracle', 6 @datasrc=N'orcl' 7 GO 8 9 /* For security reasons the linked server remote logins password is changed with ######## */ 10 EXEC master.dbo.sp_addlinkedsrvlogin 11 @rmtsrvname=N'ORCL_SCOTT', 12 @useself=N'False', 13 @locallogin=NULL, 14 @rmtuser=N'scott', 15 @rmtpassword='tiger' 16 go 17 18 19 select * from openquery(ORCL_SCOTT, 'SELECT * FROM scott.emp')
还可以用?表示绑定变量:
1 EXEC ( 'SELECT * FROM scott.emp') AT ORCL_SCOTT; 2 GO 3 EXEC ( 'SELECT * FROM scott.emp WHERE MGR = ?', 7902) AT ORCL_SCOTT; 4 GO 5 DECLARE @v INT; 6 SET @v = 7902; 7 EXEC ( 'SELECT * FROM scott.emp WHERE MGR = ?', @v) AT ORCL_SCOTT; 8 GO
6、通过openrowset函数来实现,更简单。
1 select * from openrowset('OraOLEDB.Oracle','orcl';'scott';'tiger','select * from SCOTT.EMP')
返回结果: