1. 程式人生 > 其它 >連線其他伺服器的資料庫mysql資料庫_SQL Server跨伺服器操作資料庫

連線其他伺服器的資料庫mysql資料庫_SQL Server跨伺服器操作資料庫

SQL Server跨伺服器操作資料庫

通過連結伺服器(LinkedServer)實現SQL Server遠端連結MySql等資料庫

基礎知識介紹

以SQL Server的資料庫管理工具SSMS(SQL Server Management Studio)為平臺進行操作。

SQL Server Management Studio (SSMS) 是用於管理SQL Server 基礎結構的整合環境。 使用 SSMS,可以訪問、配置、管理和開發 SQL Server、Azure SQL 資料庫和 SQL 資料倉庫的所有元件。 SSMS 在一個綜合實用工具中彙集了大量圖形工具和豐富的指令碼編輯器,為各種技能水平的開發者和資料庫管理員提供對 SQL Server 的訪問許可權。

 

 

 

什麼是跨伺服器操作?

跨伺服器操作就是可以在本地連線到遠端伺服器上的資料庫,可以在對方的資料庫上進行相關的資料庫操作,比如增刪改查。

為什麼要進行跨伺服器操作

隨著資料量的增多,業務量的擴張,需要在不同的伺服器安裝不同的資料庫,有時候因為業務需要,將不同的伺服器中的資料進行整合,這時候就需要進行跨伺服器操作了。

跨伺服器操作的工具是什麼?

DBLINK(資料庫連結),顧名思義就是資料庫的連結,就像電話線一樣,是一個通道,當我們要跨本地資料庫,訪問另外一個數據庫表中的資料時,本地資料庫中就必須要建立遠端資料庫的dblink,通過dblink本地資料庫可以像訪問本地資料庫一樣訪問遠端資料庫表中的資料。

方法一:用SSMS建立SQL Server遠端連結伺服器(LinkedServer)--簡單鏈接到遠端SqlServer

1. 開啟SSMS -->登入到本地資料庫 --> 伺服器物件 --> 連結伺服器(右鍵) --> 新建連結伺服器,如下圖:

 

 

 

2. 在彈出的對話方塊中輸入相關資訊

● 在【連結伺服器】輸入對方伺服器的IP地址;

● 在【伺服器型別】中選擇【SQL Server】;

 

 

 

3. 點選左側的【安全性】,出現如下頁面,在第3步中輸入對方資料庫的賬號密碼即可。

 

 

 

點選確定按鈕後,連結伺服器(LinkedServer)就建立成功了。這時可以看到建立好的連結伺服器:

 

 

 

檢視連結伺服器的程式碼: 在建立好的連結伺服器上點右鍵,編寫連結伺服器指令碼為 --> Create到 -->新查詢編輯器視窗,即可開啟剛剛建立的連結伺服器的指令碼。

 

 

 

--連結伺服器(LinkedServer)建立完成後會自動生成相關程式碼 —— 連結到遠端SQLServer資料庫:

EXEC master.dbo.sp_addlinkedserver @server = N'192.168.110.189,1433',@srvproduct=N'SQL Server';

-- @rmtsrvname

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'192.168.110.189',@useself=N'False',@locallogin=NULL,@rmtuser=N'sa',@rmtpassword='########';

注意: 這裡有一個弊端,那就是連結的是整個遠端SqlServer中的所有資料庫(一般只需要一個特定的資料庫),而且連結伺服器的名稱是個IP且無法自定義! 所以,最好的方式還是通過程式碼直接建立連結資料庫(見“三、程式碼詳解”)。

連結伺服器(LinkedServer)就建立成功後,我們就可以用建立好的DBLINK連結到遠端的Linked伺服器了。下面我們用建立好的試著查詢對方伺服器上的表來驗證一下。

--查詢連結伺服器(LinkedServer)中資料的方法: [DBLINK名].[對方資料庫名].[對方資料庫下模式名].[對方資料庫表名]

SELECT * FROM [192.168.110.189].[erp25new].[dbo].[fee_data]

上面FROM欄位後面依此是[DBLINK名].[對方資料庫名].[對方資料庫下模式名].[對方資料庫表名],表名前面的這些內容一個都不能少。

查詢結果如下圖:

 

 

 

方法二:SSMS建立SQLServer連結伺服器(LinkedServer)--自定義連結到SqlServer的其它資料庫

1. 【常規】選擇頁:

 

 

 

2.【安全性】選擇頁:

 

 

 

自定義連結資料庫到SQLServer【新建連結伺服器】對話方塊中需輸入的相關資訊說明:

1.【常規】頁

● 在【連結伺服器】中,輸入 自定義的連結伺服器別名,如:DBLINK_TO_TESTDB

● 在【伺服器型別】中選擇【其他資料來源】;

▶[提供程式]中選擇 第一個Microsoft OLE DB Provider for SQL Server

▶[產品名稱]中,可以空白不填,也可以填寫SQL Server { 注意提供程式是OLE DB Provider for SQL Server時產品名稱這裡必須為空白!}

▶[資料來源]中 遠端資料庫的地址,埠\例項名 ,如 10.10.0.73,1433\MSSQLSERVER

▶[訪問介面字串]中,可以空著不填; 也可以填下方的:(注意######是密碼,請換成自己的密碼)

Provider=sqloledb;Data Source=10.10.0.73,1433\MSSQLSERVER;Initial Catalog=TESTDB;User Id=apps;Password=#####;

▶[目錄]就是資料庫名稱,這裡填上我們需要遠端連上的資料庫 TESTDB (可以換成自己實際的)。

2.【安全性】頁

● 選擇【使用此安全上下文建立連線(M)】

▶[遠端登入]: 遠端資料庫的連線賬號

▶[使用密碼]: 遠端資料庫連線賬號的密碼

--連結伺服器(LinkedServer)建立完成後會自動生成相關程式碼 —— 連結到遠端的SQLServer資料庫(自定義):

EXEC master.dbo.sp_addlinkedserver @server = N'DBLINK_TO_TESTDB',@srvproduct=N'',@provider=N'SQLNCLI', @datasrc=N'10.10.0.73';EXEC master.dbo.sp_addlinkedsrvlogin@rmtsrvname=N'DBLINK_TO_TESTDB',@useself=N'False',@locallogin=NULL,@rmtuser=N'apps',@rmtpassword='########';

/****** 實際例子 系統生成的Object: LinkedServer [DBLINK_TO_TESTDB] ******/

USE [master]

GO

EXEC master.dbo.sp_addlinkedserver @server = N'DBLINK_TO_TESTDB', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'10.10.0.73,1433\MSSQLSERVER', @catalog=N'TESTDB'

/*For security reasons the linked server remote logins password is changed with ########*/

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'TEST',@useself=N'False',@locallogin=NULL,@rmtuser=N'apps',@rmtpassword='########'

其他方式: 提供程式換成其它的, 如本機SQL Server Native Client 11.0 (SQL Server Native Client 11.0 不支援連線到SQL Server 2000或更早的版本) 等

 

 

 

方法三:用SSMS建立SQLServer連結伺服器(LinkedServer)--連結到非SqlServer的其它資料庫

 

 

 

四、程式碼詳解:方法一和方法二是通過SSMS直接操作的,下方直接使用sql指令碼來建立連結伺服器(LinkedServer)

A. SSMS連結到遠端SQLServer資料庫

(本地SQLServer資料庫連結伺服器(LinkedServer)到遠端SQLServer資料庫。)

--LinkedServer連結到遠端SQLServer資料庫:

--1. 宣告將要連結的‘連結名稱(自定義)’,遠端資料庫產品名(或別名),(提供商,資料庫伺服器地址及例項名)

EXEC master.dbo.sp_addlinkedserver @server = N'DBLINK_TO_TESTDB',@srvproduct=N'SQL Server';--2. 宣告‘連結名稱(自定義)’,@useself=N'False',@locallogin=NULL,將要連結的資料庫伺服器的賬號和密碼

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'192.168.110.189',@useself=N'False',@locallogin=NULL,@rmtuser=N'sa',@rmtpassword='########';

B. SSMS連結到遠端非SQLServer資料庫

(本地SQLServer資料庫連結伺服器(LinkedServer)到遠端非SQLServer的資料庫。如遠端的MySQL、Oracle等資料庫。)

--連結到遠端的非SQLServerd資料庫(如連結到遠端MySQL、Oracle等資料庫):

--1. 宣告‘自定義的連結名稱’,遠端資料庫產品名(或別名),提供商,資料庫伺服器地址及例項名

EXEC master.dbo.sp_addlinkedserver @server = N'TEST_SQL_SERVER',@srvproduct=N'TEST',@provider=N'SQLNCLI11', @datasrc=N'192.168.110.189';--2. 宣告登入資訊 ‘自定義的連結名稱’,@useself=N'False',@locallogin=NULL,遠端資料庫的賬號和密碼

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'TEST_SQL_SERVER',@useself=N'False',@locallogin=NULL,@rmtuser=N'sa',@rmtpassword='########';

實際例子-SQL Server通過Linkserver連線MySql

--通過SSMS連結到遠端MySql資料庫(SQL Server連線MySql)--使用的訪問介面為: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';

實際例子-SQL Server通過Linkserver連線Oracle

--通過SSMS連結到遠端Oracle資料庫(SQL Server連線Oracle)

--使用的訪問介面為: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='######'; --最後可以測試一下是否連線成功 --select * from openquery(DBLINK_TO_OraTESTDB,'select * from SYSTEM.HELP');