程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> WebService同步兩台遠程SQLSERVER2000數據庫

WebService同步兩台遠程SQLSERVER2000數據庫

編輯:.NET實例教程

 WebService同步兩台遠程SQLSERVER2000數據庫
徐龍 2007-12-13

Sqlserver2000對於數據庫的同步內部提供了多種方法,但是由於兩台服務器分別在中國和美國.
如果直接運用SqlServer2000的內建同步機制,勢必要將兩台服務器暴露在internet之下,出於對網絡安全和網絡帶寬的考慮,首先否定此種辦法。
我采用的方法是通過在源服務器裡加入 trace ,將源服務器中對數據庫內容變動的所有sql語句都統一記錄下來。然後在WEB服務器上部署webservice,目標服務器端可以通過一個winform程序調用(按同步要求定時執行)webservice取得所有sql語句,然後在目的服務器中將sql回放執行,從而達到兩端數據庫同步的功能.(如下圖)

如此以來不必暴露sqlserver,提高了數據的發全性,采用webservice 可以工作在80端口,對防火牆沒有特殊要求,同步設置上更加靈活(當然對於webservice要采取適當保護措施,傳輸過程中數據要全程加密。)。

OK,現在的問題是如何在源服務器裡加入 trace ,得到服務器所有執行過的sql語句,我們都知道SQLSERVER 有個工具 profiler,我們經常都會使用它觀察sql執行情況,做性能調校等。通過對它的研究我找到了幾個內部函數打破難題,成功實現了這個方案.
sp_trace_create  //建立一個跟蹤,並能設置選項,但是它保存在一個文件裡
::fn_trace_gettable //通過這個方法可以解析跟蹤保存的文件
::fn_trace_getinfo   //獲取服務器中的trace資料
sp_procoption     //注冊函數能在數據庫服務器啟動時就運行

下面我貼出完整的跟蹤記錄的SQL代碼,至於webservice和winform的程序我就不詳細介紹了,基
本上比較容易實現

以下代碼在sql2000運行正常
------------------------------------------------------------------------------------------------------------

 


Use master
/*
功能:結束之前已有的追蹤
author: 徐龍
Date: 2005/07/09
Email:  [email protected]
*/
Declare @tmpTraceId int
Declare @i int
set @i=1
while @i<10
begin
set @tmpTraceId=@i
exec sp_trace_setstatus @tmpTraceId,

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