Luben Park

          Java Ben 成長之路

          [轉帖]SQL Server - [分布式查詢/事務]

          分布式查詢
          ??? OPENROWSET
          ??? 從Excel取數據
          ??? SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=d:\1.xls',[Sheet1$])
          ??? 從Oracle取數據
          ??? 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查詢數據
          ??? 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插入數據(還沒有用過)
          ??? INSERT INTO OPENQUERY(Allies, 'SELECT ... FROM OracleTalbe WHERE 1=2') VALUES ( ... )
          ??? 刪除Linked Server
          ??? sp_dropserver'Allies', 'droplogins'
          ?
          ??? 注意:使用OPENROWSET、OPENQUERY時,SQL Server不對提交的SQL語句做任何檢查,直接將語句提交給Linked Server進行處理;使用四部分命名法時,SQL Server可能從Linked Server上讀取被引用表的數據到SQL Server,然后在SQL Server上來完成其它操作。
          ?
          ??? 設置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
          ?
          ??? 分布式事務中的OPENROWSET、OPENQUERY、OPENDATASOURCE
          ??? 如果在事務,或是一些隱含使用事務的情況下,例如TRIGGER中,使用OPENROWSET、OPENQUERY、OPENDATASOURCE時,就需要使用分布式事務來處理。
          ??? 在分布式事務中使用OPENROWSET、OPENQUERY、OPENDATASOURCE或Linked Server時,需要注意:
          ??? 1. 必須啟動MSDTC服務。
          ????Service Name為Distributed Transaction Coodinator。
          ??? 2. 所涉及的Server之間如果存在網關、防火墻,需要開啟TCP 135端口。
          ??? 分布式事務需要使用這個端口通訊。
          ??? 3. 如果Server之間跨網段,則Server之間需要能互相PING到機器名(而不是IP地址)。
          ??? 如果相互PING機器名有問題,修改system32/driver/etc目錄下的hosts文件。
          ?
          ??? 上面的設置不正確時,會出現類似如下的錯誤:
          ??? 該操作未能執行,因為 OLE DB 提供程序 'SQLOLEDB' 無法啟動分布式事務。
          [OLE/DB provider returned message: 新事務不能登記到指定的事務處理器中。 ]
          OLE DB 錯誤跟蹤[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
          ?
          ?
          ??? 分布式事務可以查詢下列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
          ??? 關于ORAOLEDB提供程序的詳細說明,可以參考:Oracle Provider for OLE DB Developer's Guide - Release 9.2

          posted on 2006-03-29 16:35 Ben 閱讀(1206) 評論(0)  編輯  收藏 所屬分類: 數據庫相關

          主站蜘蛛池模板: 通海县| 安义县| 武威市| 铁力市| 澳门| 平舆县| 和顺县| 鹤岗市| 定陶县| 治县。| 县级市| 洛浦县| 和政县| 景洪市| 洪雅县| 阿拉善右旗| 石楼县| 华阴市| 襄樊市| 东山县| 临安市| 汉阴县| 新田县| 新和县| 南康市| 安多县| 福鼎市| 冕宁县| 广灵县| 若尔盖县| 博客| 颍上县| 泰安市| 策勒县| 卓尼县| 乐东| 凉山| 阿图什市| 手游| 皋兰县| 贵阳市|