首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

以連結伺服器取代訂閱發布:整合多個 SQL Server Express 資料庫的輕量級方案

     編輯:關於SqlServer

問題背景

擁有 N 個結構相同的 SQL Server Express 資料庫,資料庫數量持續增長。需整合查詢,原有兩種方案缺點明顯:

  • 應用層逐一連線:程式複雜、維護困難
  • 訂閱/發布複寫:設定繁瑣,每新增一個 Express 都要重新配置

解決方案:連結伺服器 + 視圖整合

1. 在中心資料庫建立連結伺服器與登入

EXEC sp_addlinkedserver '12.34.56.41', 'SQL Server';
EXEC sp_addlinkedsrvlogin '12.34.56.41', 'false', NULL, 'dbUser', 'p@ssw0rd';
EXEC sp_addlinkedserver '12.34.56.42', 'SQL Server';
EXEC sp_addlinkedsrvlogin '12.34.56.42', 'false', NULL, 'dbUser', 'p@ssw0rd';
-- 依此類推至 12.34.56.48

語句規律性強,可用工具批量產生,新增資料庫只需執行同樣兩行指令。

2. 跨伺服器查詢語法

SELECT e.ID AS VMID, e.NAME, v.ip_address AS vm_ip, v.power_state, v.guest_state, h.ip_address AS host_ip
FROM [12.34.56.41].VIM_VCDB.dbo.VPX_ENTITY e
JOIN [12.34.56.41].VIM_VCDB.dbo.VPX_VM v ON e.ID = v.ID
JOIN [12.34.56.41].VIM_VCDB.dbo.vpx_host h ON v.host_id = h.id;

3. 建立整合視圖(UNION ALL)

CREATE VIEW view_vm_info AS
SELECT ... FROM [12.34.56.41].VIM_VCDB.dbo.VPX_ENTITY e ...
UNION ALL
SELECT ... FROM [12.34.56.42].VIM_VCDB.dbo.VPX_ENTITY e ...
-- 依序 UNION ALL 至 12.34.56.47
UNION ALL
SELECT ... FROM [12.34.56.47].VIM_VCDB.dbo.VPX_ENTITY e ...;

4. 效能優化:建立本地快取表

連結伺服器查詢延遲較高,建立結構相同的本地表,定期(如每小時)由 Agent 作業將視圖資料 TRUNCATE + INSERT 同步至本地表,應用端改查本地表,查詢速度提升數量級。

優缺點總結

優點缺點
設定簡單、無需複寫拓撲 跨伺服器查詢延遲較高(故需快取表)
新增 Express 只需兩行指令 非即時資料(視同步頻率)
應用端只連一個資料庫 需管理連結伺服器認證安全性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved