程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 事務日志傳送這個功能有點像Oracle的DataGuard,具體介紹就不在這裡廢話了,本文主要記錄我在實施過程中所遇到的問題以及解決方法。

事務日志傳送這個功能有點像Oracle的DataGuard,具體介紹就不在這裡廢話了,本文主要記錄我在實施過程中所遇到的問題以及解決方法。

編輯:關於SqlServer

先說一下我遇到的環境,我手上有N個SQL Server Express Edition的數據庫,他們的結構都是一樣的,只是存放的數據不一樣,數據庫的個數將會增長。現在我希望能查詢這些數據,其中比較笨的方法是,每個數據庫都連接一下,執行SQL,示意圖如下:

image

這種做法的缺點是:應用程序相對復雜,如果弄不好,後期的可維護性不好。

第二種方法是使用SQL Server的訂閱發布功能,定時從各個數據庫導出需要的數據到一個“中心數據庫”,應用程序就比較簡單,畢竟只是鏈接一個SQL Server啊,示意圖如下:

image

但是配置SQL Server的訂閱發布還是比較麻煩,而且SQL Server Express Edition的數據庫的個數還會增長,每個都這樣配置一下,工作量很大。

綜合考慮以上兩種方案的優缺點,使用SQL Server的鏈接服務器功能可以很容易地解決這個問題。

在中心數據庫上,執行如下語句,建立“鏈接服務器”和“鏈接服務器登錄”,語句如下:

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'
..........
..........
..........
..........
..........
exec sp_addlinkedserver '12.34.56.47','SQL Server';
exec sp_addlinkedsrvlogin '12.34.56.47','false',null,'dbUser','p@ssw0rd'
exec sp_addlinkedserver '12.34.56.48','SQL Server';
exec sp_addlinkedsrvlogin '12.34.56.48','false',null,'dbUser','p@ssw0rd'

雖然語句比較多,但是不難發現完全可以找個“工具”生成一下,新增的數據庫只需要執行類似的語句就可以了。

查詢語句要加上服務器名,如下:

select e.ID as VMID, e.NAME, 
	   v.ip_address as vm_ip,
	   v.power_state as power_state,
       v.guest_state as guest_state , 
       h.ip_address as host_ip
from 
[12.34.56.41].VIM_VCDB.dbo.VPX_ENTITY e, 
[12.34.56.41].VIM_VCDB.dbo.VPX_VM v  , 
[12.34.56.41].VIM_VCDB.dbo.vpx_host h
where e.ID = v.ID
and v.host_id = h.id 

為了讓數據查詢起來更加方便,我揀了一個視圖,將多個數據庫的數據“集中”起來

 

create view vIEw_vm_info
as 
select e.ID as VMID, e.NAME, 
	   v.ip_address as vm_ip,
	   v.power_state as power_state,
       v.guest_state as guest_state , 
       h.ip_address as host_ip
from 
[12.34.56.41].VIM_VCDB.dbo.VPX_ENTITY e, 
[12.34.56.41].VIM_VCDB.dbo.VPX_VM v  , 
[12.34.56.41].VIM_VCDB.dbo.vpx_host h
where e.ID = v.ID
and v.host_id = h.id 

union all 

....................
....................
....................
....................

union all 

select e.ID as VMID, e.NAME, 
	   v.ip_address as vm_ip,
	   v.power_state as power_state,
       v.guest_state as guest_state , 
       h.ip_address as host_ip
from 
[12.34.56.47].VIM_VCDB.dbo.VPX_ENTITY e, 
[12.34.56.47].VIM_VCDB.dbo.VPX_VM v  , 
[12.34.56.47].VIM_VCDB.dbo.vpx_host h
where e.ID = v.ID
and v.host_id = h.id 

但是查詢鏈接服務器的性能不太好,於是,我在“中心”數據庫建一張表,和視圖的結構一樣,用於存放試圖中的數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved