MSSQL->serverlink[Oracle]

需求描述:
    SQL Server數據庫鏈接Oracle數據庫
 
條件準備:
    SQL Server數據庫,SQL Server 2008R2
    Oracle數據庫,Oracle 12.2.0.1.0
    Oracle客戶端,Oracle 11g Client或Oracle 12c Client
 
    必須在SQL Server數據庫主機安裝Oracle客戶端(ODBC驅動),並配置tnsnames.ora
 
鏈接方式
    使用   linked server 或 rowset function
 
    linked server方式,主要是採用sp函數包進行配置和鏈接Oracle數據庫(其餘數據庫也一樣適用)
 
語法 
sp_addlinkedserver
[ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ] [ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ] [ , [ @catalog= ] 'catalog' ] provider可選值【SQLNCLI | SQLOLEDB】->SQL Server、【OraOLEDB.Oracle】->Oracle、【MSDASQL】->POSTGRESQL、【 Microsoft.Jet.OLEDB.4.0->EXCEL

 

    舉例:
        
--建立連接別名
exec master.dbo.sp_addlinkedserver
@server = 'Oraclelink',--指定連接數據庫的別名
@srvproduct = 'oracle',--連接對象數據庫的產品
@provider = 'OraOLEDB.Oracle',--驅動器
@datasrc = 'HMDB0'--要訪問的服務器,oracle需提供tnsnames.ora配置的別名
go
 
 
--登陸連接數據庫
exec master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = 'Oraclelink',--指定需登陸的數據庫連接別名
@locallogin = NULL,--本地服務器的登陸名,直接訪問Windows Server組成員
@useself = 'false',--關閉本地登陸,true值使用本地帳戶認證,會忽略rmtuser和rmtpassword參數
@rmtuser = 'dbmonitor',--登陸數據庫用戶名
@rmtpassword = 'xxxxxx'--登陸密碼
go
 
--查詢oracle數據庫測試
--數據庫的格式必須是 連接別名..ORACLE用戶名.表名
select * from Oraclelink..DBMONITOR.UNIQUE_T;
go
 
 
--查看當前全部連接列表
exec sp_linkedservers
 
 
--刪除linked server
Exec sp_droplinkedsrvlogin Oraclelink,NULL --刪除連接服務器的登錄賬戶
Exec sp_dropserver Oraclelink --刪除連接數據庫別名

 

 
   
    
    rowset function方式
                 首先圖形界面建立連接數據庫別名
      
                

      

      

                    測試成功
       

      

    
  行集函數返回一個可用替代Transact-SQL語句中表引用的對象
                 OPENQUERY
                      語法: OPENQUERY ( linked_server ,'query' )
 
                        SELECT  * FROM OPENQUERY  ( ORACLELINK,'SELECT * FROM UNIQUE_T');
                        
       
INSERT
   INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')  VALUES ('NewTitle');
UPDATE
   UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101')   SET name = 'ADifferentName';
DELETE
   DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');

 

參考:
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息