需求描述: SQL Server資料庫連接Oracle資料庫 條件準備: SQL Server資料庫,SQL Server 2008R2 Oracle資料庫,Oracle 12.2.0.1.0 Oracle客戶端,Oracle 11g Client或Oracle 12c Client 必須在SQL ...
需求描述: 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''');
參考: https://docs.microsoft.com/en-us/sql/t-sql/functions/rowset-functions-transact-sql?view=sql-server-2017 https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addlinkedserver-transact-sql?view=sql-server-2017 https://www.cnblogs.com/chinhr/archive/2009/03/10/1408033.html