什么是跨服務(wù)器操作?
跨服務(wù)器操作就是可以在本地連接到遠(yuǎn)程服務(wù)器上的數(shù)據(jù)庫(kù),可以在對(duì)方的數(shù)據(jù)庫(kù)上進(jìn)行相關(guān)的數(shù)據(jù)庫(kù)操作,比如增刪改查。
為什么要進(jìn)行跨服務(wù)器操作
隨著數(shù)據(jù)量的增多,業(yè)務(wù)量的擴(kuò)張,需要在不同的服務(wù)器安裝不同的數(shù)據(jù)庫(kù),有時(shí)候因?yàn)闃I(yè)務(wù)需要,將不同的服務(wù)器中的數(shù)據(jù)進(jìn)行整合,這時(shí)候就需要進(jìn)行跨服務(wù)器操作了。
跨服務(wù)器操作的工具是什么?
DBLINK(數(shù)據(jù)庫(kù)鏈接),顧名思義就是數(shù)據(jù)庫(kù)的鏈接,就像電話線一樣,是一個(gè)通道,當(dāng)我們要跨本地?cái)?shù)據(jù)庫(kù),訪問(wèn)另外一個(gè)數(shù)據(jù)庫(kù)表中的數(shù)據(jù)時(shí),本地?cái)?shù)據(jù)庫(kù)中就必須要?jiǎng)?chuàng)建遠(yuǎn)程數(shù)據(jù)庫(kù)的dblink,通過(guò)dblink本地?cái)?shù)據(jù)庫(kù)可以像訪問(wèn)本地?cái)?shù)據(jù)庫(kù)一樣訪問(wèn)遠(yuǎn)程數(shù)據(jù)庫(kù)表中的數(shù)據(jù)。
用SSMS創(chuàng)建SQL Server遠(yuǎn)程鏈接服務(wù)器(LinkedServer)--簡(jiǎn)單鏈接到遠(yuǎn)程SqlServer
1. 打開(kāi)SSMS -->登錄到本地?cái)?shù)據(jù)庫(kù) --> 服務(wù)器對(duì)象 --> 鏈接服務(wù)器(右鍵) --> 新建鏈接服務(wù)器,如下圖:
2. 在彈出的對(duì)話框中輸入相關(guān)信息
● 在【鏈接服務(wù)器】輸入對(duì)方服務(wù)器的IP地址;
● 在【服務(wù)器類(lèi)型】中選擇【SQL Server】;
3. 點(diǎn)擊左側(cè)的【安全性】,出現(xiàn)如下頁(yè)面,在第3步中輸入對(duì)方數(shù)據(jù)庫(kù)的賬號(hào)密碼即可。
點(diǎn)擊確定按鈕后,鏈接服務(wù)器(LinkedServer)就創(chuàng)建成功了。這時(shí)可以看到創(chuàng)建好的鏈接服務(wù)器:
查看鏈接服務(wù)器的代碼: 在創(chuàng)建好的鏈接服務(wù)器上點(diǎn)右鍵,編寫(xiě)鏈接服務(wù)器腳本為 --> Create到 -->新查詢(xún)編輯器窗口,即可打開(kāi)剛剛創(chuàng)建的鏈接服務(wù)器的腳本。
EXEC master.dbo.sp_addlinkedserver @server = N '192.168.110.189,1433' ,@srvproduct=N 'SQL Server' ;
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N '192.168.110.189' ,@useself=N 'False' ,@locallogin= NULL ,@rmtuser=N 'sa' ,@rmtpassword= '########' ;
|
注意: 這里有一個(gè)弊端,那就是鏈接的是整個(gè)遠(yuǎn)程SqlServer中的所有數(shù)據(jù)庫(kù)(一般只需要一個(gè)特定的數(shù)據(jù)庫(kù)),而且鏈接服務(wù)器的名稱(chēng)是個(gè)IP且無(wú)法自定義! 所以,最好的方式還是通過(guò)代碼直接創(chuàng)建鏈接數(shù)據(jù)庫(kù)。
鏈接服務(wù)器(LinkedServer)就創(chuàng)建成功后,我們就可以用創(chuàng)建好的DBLINK鏈接到遠(yuǎn)程的Linked服務(wù)器了。
下面我們用創(chuàng)建好的試著查詢(xún)對(duì)方服務(wù)器上的表來(lái)驗(yàn)證一下。
-- 查詢(xún)鏈接服務(wù)器(LinkedServer)中數(shù)據(jù)的方法: [DBLINK名].[對(duì)方數(shù)據(jù)庫(kù)名].[對(duì)方數(shù)據(jù)庫(kù)下模式名].[對(duì)方數(shù)據(jù)庫(kù)表名]
SELECT * FROM [192.168.110.189].[erp25new].[dbo].[fee_data]
上面FROM字段后面依此是[DBLINK名].[對(duì)方數(shù)據(jù)庫(kù)名].[對(duì)方數(shù)據(jù)庫(kù)下模式名].[對(duì)方數(shù)據(jù)庫(kù)表名],表名前面的這些內(nèi)容一個(gè)都不能少。
查詢(xún)結(jié)果如下圖:
使用sql腳本來(lái)創(chuàng)建鏈接服務(wù)器(LinkedServer)
A. SSMS鏈接到遠(yuǎn)程SQLServer數(shù)據(jù)庫(kù)
(本地SQLServer數(shù)據(jù)庫(kù)鏈接服務(wù)器(LinkedServer)到遠(yuǎn)程SQLServer數(shù)據(jù)庫(kù)。)
-- LinkedServer鏈接到遠(yuǎn)程SQLServer數(shù)據(jù)庫(kù):
-- 1. 聲明將要鏈接的‘鏈接名稱(chēng)(自定義)’,遠(yuǎn)程數(shù)據(jù)庫(kù)產(chǎn)品名(或別名),(提供商,數(shù)據(jù)庫(kù)服務(wù)器地址及實(shí)例名)
EXEC master.dbo.sp_addlinkedserver @server = N'DBLINK_TO_TESTDB',@srvproduct=N'SQL Server';
-- 2. 聲明‘鏈接名稱(chēng)(自定義)’,@useself=N'False',@locallogin=NULL,將要鏈接的數(shù)據(jù)庫(kù)服務(wù)器的賬號(hào)和密碼
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'192.168.110.189',@useself=N'False',@locallogin=NULL,@rmtuser=N'sa',@rmtpassword='########';
B. SSMS鏈接到遠(yuǎn)程非SQLServer數(shù)據(jù)庫(kù)
(本地SQLServer數(shù)據(jù)庫(kù)鏈接服務(wù)器(LinkedServer)到遠(yuǎn)程非SQLServer的數(shù)據(jù)庫(kù)。如遠(yuǎn)程的MySQL、Oracle等數(shù)據(jù)庫(kù)。)
-- 鏈接到遠(yuǎn)程的非SQLServerd數(shù)據(jù)庫(kù)(如鏈接到遠(yuǎn)程MySQL、Oracle等數(shù)據(jù)庫(kù)):
-- 1. 聲明‘自定義的鏈接名稱(chēng)’,遠(yuǎn)程數(shù)據(jù)庫(kù)產(chǎn)品名(或別名),提供商,數(shù)據(jù)庫(kù)服務(wù)器地址及實(shí)例名
EXEC master.dbo.sp_addlinkedserver @server = N'TEST_SQL_SERVER',@srvproduct=N'TEST',@provider=N'SQLNCLI11', @datasrc=N'192.168.110.189';
-- 2. 聲明登錄信息 ‘自定義的鏈接名稱(chēng)’,@useself=N'False',@locallogin=NULL,遠(yuǎn)程數(shù)據(jù)庫(kù)的賬號(hào)和密碼
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'TEST_SQL_SERVER',@useself=N'False',@locallogin=NULL,@rmtuser=N'sa',@rmtpassword='########';
實(shí)際例子-SQL Server通過(guò)Linkserver連接MySql
-- 通過(guò)SSMS鏈接到遠(yuǎn)程MySql數(shù)據(jù)庫(kù)(SQL Server連接MySql)
-- 使用的訪問(wèn)接口為:MySql Provider for OLE DB
EXEC master.dbo.sp_addlinkedserver @server = N'DBLINK_TO_MysqlTESTDB', @srvproduct = N'MySql', @provider = N'MSDASQL', @provstr = N'Driver={MySQL ODBC 5.1 Driver};Server=10.167.69.6,3306/sytv;Database=TESTDB;User=root;Password=root;Option=3' ;
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'DBLINK_TO_MysqlTESTDB', @useself = N'False', @locallogin = N'10.167.69.6,3306/sytv', @rmtuser = N'root', @rmtpassword = N'root';
實(shí)際例子-SQL Server通過(guò)Linkserver連接Oracle
-- 通過(guò)SSMS鏈接到遠(yuǎn)程O(píng)racle數(shù)據(jù)庫(kù)(SQL Server連接Oracle)
-- 使用的訪問(wèn)接口為:Oracle Provider for OLE DB
USE [master]
GO
--Declare Oracle OLEDB 'OraOLEDB.Oracle':
EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1;
--Create the Linked Server to the ECT database in Oracle:
EXEC sp_addlinkedserver 'DBLINK_TO_OraTESTDB', 'Oracle', 'OraOLEDB.Oracle', '10.167.69.6/prt';
--EXEC master.dbo.sp_addlinkedserver @server = N'DBLINK_TO_OraTESTDB', @srvproduct=N'oracle', @provider=N'OraOLEDB.Oracle', @datasrc=N'10.167.69.6/orcl'
--Create the Remote Login for the Oracle Linked Server:
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'DBLINK_TO_OraTESTDB',@useself=N'False',@locallogin=N'apps',@rmtuser=N'SYSTEM',@rmtpassword='######'; --最后可以測(cè)試一下是否連接成功 --select * from openquery(DBLINK_TO_OraTESTDB,'select * from SYSTEM.HELP');
該文章在 2024/11/8 10:41:23 編輯過(guò)