Luben Park

          Java Ben 成長之路

          [轉(zhuǎn)帖]SQL Server - [分布式查詢/事務(wù)]

          分布式查詢
          ??? OPENROWSET
          ??? 從Excel取數(shù)據(jù)
          ??? SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=d:\1.xls',[Sheet1$])
          ??? 從Oracle取數(shù)據(jù)
          ??? SELECT?* FROM OPENROWSET('MSDAORA.1','NetServiceName';'User';'Password','SELECT * FROM OracleTalbe')
          ?
          ??? Linked Server(for Oracle)
          ??? 建立Linked Server
          ??? sp_addlinkedserver'Allies', 'Oracle', 'MSDAORA.1', 'NetServiceName'
          ??? Oracle的Login
          ??? sp_addlinkedsrvlogin'Allies', FALSE, 'SQLServerLogin', 'OracleUser', 'OraclePassword'
          ??? 從Oracle查詢數(shù)據(jù)
          ??? SELECT*FROM OPENQUERY( Allies, 'SELECT * FROM OracleTalbe'),或者
          ??? SELECT*FROM Allies..OracleUser.OracleTalbe
          ??? 修改Linked Server的Server Option
          ? ?? sp_serveroption'Allies', 'Option Name', 'Option Value'
          ??? 例如
          ??? sp_serveroption'OraDC', 'rpc out', 'true'
          ??? sp_serveroption'OraDC', 'rpc', 'true'
          ??? 向Oracle插入數(shù)據(jù)(還沒有用過)
          ??? INSERT INTO OPENQUERY(Allies, 'SELECT ... FROM OracleTalbe WHERE 1=2') VALUES ( ... )
          ??? 刪除Linked Server
          ??? sp_dropserver'Allies', 'droplogins'
          ?
          ??? 注意:使用OPENROWSET、OPENQUERY時,SQL Server不對提交的SQL語句做任何檢查,直接將語句提交給Linked Server進(jìn)行處理;使用四部分命名法時,SQL Server可能從Linked Server上讀取被引用表的數(shù)據(jù)到SQL Server,然后在SQL Server上來完成其它操作。
          ?
          ??? 設(shè)置SQL Server到Oracle的Linked Server,可參考以下KB文章:
          ??? How to set up and troubleshoot a linked server to Oracle in SQL Server
          ??? Limitations of Microsoft Oracle ODBC Driver and OLEDB Provider
          ??? Techniques to Debug Connectivity Issues to an Oracle Server Using the ODBC Driver and OLE DB Provider
          ??? Supportability of the Microsoft ODBC Driver/ OLE DB Provider for Oracle w.r.t Oracle 8.x
          ?
          ??? 分布式事務(wù)中的OPENROWSET、OPENQUERY、OPENDATASOURCE
          ??? 如果在事務(wù),或是一些隱含使用事務(wù)的情況下,例如TRIGGER中,使用OPENROWSET、OPENQUERY、OPENDATASOURCE時,就需要使用分布式事務(wù)來處理。
          ??? 在分布式事務(wù)中使用OPENROWSET、OPENQUERY、OPENDATASOURCE或Linked Server時,需要注意:
          ??? 1. 必須啟動MSDTC服務(wù)。
          ????Service Name為Distributed Transaction Coodinator。
          ??? 2. 所涉及的Server之間如果存在網(wǎng)關(guān)、防火墻,需要開啟TCP 135端口。
          ??? 分布式事務(wù)需要使用這個端口通訊。
          ??? 3. 如果Server之間跨網(wǎng)段,則Server之間需要能互相PING到機(jī)器名(而不是IP地址)。
          ??? 如果相互PING機(jī)器名有問題,修改system32/driver/etc目錄下的hosts文件。
          ?
          ??? 上面的設(shè)置不正確時,會出現(xiàn)類似如下的錯誤:
          ??? 該操作未能執(zhí)行,因為 OLE DB 提供程序 'SQLOLEDB' 無法啟動分布式事務(wù)。
          [OLE/DB provider returned message: 新事務(wù)不能登記到指定的事務(wù)處理器中。 ]
          OLE DB 錯誤跟蹤[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
          ?
          ?
          ??? 分布式事務(wù)可以查詢下列KB文章:
          ??? Failed to Enlist on Calling Object's Transaction
          ??? How to troubleshoot MS DTC firewall issues
          ??? You receive error 7391 when you run a distributed transaction against a linked server
          ?
          ??? 使用分布式查詢,可以參考:Chapter 25 - Distributed Queries: OLE DB Connectivity
          ??? 關(guān)于ORAOLEDB提供程序的詳細(xì)說明,可以參考:Oracle Provider for OLE DB Developer's Guide - Release 9.2

          posted on 2006-03-29 16:35 Ben 閱讀(1209) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫相關(guān)

          主站蜘蛛池模板: 辽源市| 如东县| 罗山县| 马公市| 奎屯市| 上虞市| 河南省| 孟村| 中西区| 伊川县| 怀来县| 长宁区| 漯河市| 宜良县| 安顺市| 富蕴县| 门源| 浪卡子县| 佛教| 宁波市| 本溪市| 介休市| 专栏| 牟定县| 德兴市| 安溪县| 青田县| 镇沅| 清丰县| 平谷区| 杂多县| 广饶县| 丰原市| 虎林市| 江达县| 宁晋县| 永和县| 德化县| 滨州市| 长葛市| 富顺县|