擁有 N 個結構相同的 SQL Server Express 資料庫,資料庫數量持續增長。需整合查詢,原有兩種方案缺點明顯:
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
語句規律性強,可用工具批量產生,新增資料庫只需執行同樣兩行指令。
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;
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 ...;
連結伺服器查詢延遲較高,建立結構相同的本地表,定期(如每小時)由 Agent 作業將視圖資料 TRUNCATE + INSERT 同步至本地表,應用端改查本地表,查詢速度提升數量級。
| 優點 | 缺點 |
|---|---|
| 設定簡單、無需複寫拓撲 | 跨伺服器查詢延遲較高(故需快取表) |
| 新增 Express 只需兩行指令 | 非即時資料(視同步頻率) |
| 應用端只連一個資料庫 | 需管理連結伺服器認證安全性 |