国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

兩臺SqlServer數據同步解決方案

2024-07-21 02:05:41
字體:
來源:轉載
供稿:網友
,歡迎訪問網頁設計愛好者web開發。前些天遇到特殊需求,兩臺sqlserver服務器天隔一方,需要實效性很高的數據同步。     大家知道通過internet網,要高準確性和高實效性的實現兩臺數據庫數據同步是個棘手的問題。     網絡上找了些資料,有一篇文章可供參考http://www.sxsoft.com/technology_test/show_news.asp?id=450,文章中介紹了sqlserver的出版和訂閱方法來同步數據。根據文章做了下試驗,是可以的,有以下一些心得:     1)internet中使用合并復制比較好。快照復制適合數據變化不大的場合,而事務復制適合長期連接。     2)發布服務器使用ftp來發布。這樣會避免很多配置導致的問題。就是配置發布服務器時候注意,從“ftp根到該文件夾的客戶機路徑”欄要輸入“/ftp/”,因為這個“/ftp/”文件夾是系統自動創建的,而訂閱服務器是自己找不到的。          我想可能還有其他一些辦法數據同步,期望和大家探討。
         [文章轉載]http://www.sxsoft.com/technology_test/show_news.asp?id=450 利用數據庫復制技術 實現數據同步更新   作者:lobeben  來源:lobeben 的 blog 利用數據庫復制技術 實現數據同步更新 復制的概念 復制是將一組數據從一個數據源拷貝到多個數據源的技術,是將一份數據發布到多個存儲站點上的有效方式。使用復制技術,用戶可以將一份數據發布到多臺服務器上,從而使不同的服務器用戶都可以在權限的許可的范圍內共享這份數據。復制技術可以確保分布在不同地點的數據自動同步更新,從而保證數據的一致性。 sql復制的基本元素包括 出版服務器、訂閱服務器、分發服務器、出版物、文章 sql復制的工作原理 sql server 主要采用出版物、訂閱的方式來處理復制。源數據所在的服務器是出版服務器,負責發表數據。出版服務器把要發表的數據的所有改變情況的拷貝復制到分發服務器,分發服務器包含有一個分發數據庫,可接收數據的所有改變,并保存這些改變,再把這些改變分發給訂閱服務器 sql server復制技術類型 sql server提供了三種復制技術,分別是: 1、快照復制(呆會我們就使用這個) 2、事務復制 3、合并復制 只要把上面這些概念弄清楚了那么對復制也就有了一定的理解。接下來我們就一步一步來實現復制的步驟。 第一先來配置出版服務器 (1)選中指定[服務器]節點 (2)從[工具]下拉菜單的[復制]子菜單中選擇[發布、訂閱服務器和分發]命令 (3)系統彈出一個對話框點[下一步]然后看著提示一直操作到完成。 (4)當完成了出版服務器的設置以后系統會為該服務器的樹形結構中添加一個復制監視器。同時也生成一個分發數據庫(distribution) 第二創建出版物 (1)選中指定的服務器 (2)從[工具]菜單的[復制]子菜單中選擇[創建和管理發布]命令。此時系統會彈出一個對話框 (3)選擇要創建出版物的數據庫,然后單擊[創建發布] (4)在[創建發布向導]的提示對話框中單擊[下一步]系統就會彈出一個對話框。對話框上的內容是復制的三個類型。我們現在選第一個也就是默認的快照發布(其他兩個大家可以去看看幫助) (5)單擊[下一步]系統要求指定可以訂閱該發布的數據庫服務器類型,sqlserver允許在不同的數據庫如 oracle或access之間進行數據復制。但是在這里我們選擇運行"sql server 2000"的數據庫服務器 (6)單擊[下一步]系統就彈出一個定義文章的對話框也就是選擇要出版的表 (7)然后[下一步]直到操作完成。當完成出版物的創建后創建出版物的數據庫也就變成了一個共享數據庫。 第三設計訂閱 (1)選中指定的訂閱服務器 (2)從[工具]下拉菜單中選擇[復制]子菜單的[請求訂閱] (3)按照單擊[下一步]操作直到系統會提示檢查sql server代理服務的運行狀態,執行復制操作的前提條件是sql server代理服務必須已經啟動。 (4)單擊[完成]。完成訂閱操作。 完成上面的步驟其實復制也就是成功了。但是如何來知道復制是否成功了呢?這里可以通過這種方法來快速看是否成功。展開出版服務器下面的復制——發布內容——右鍵發布內容——屬性——擊活——狀態然后點立即運行代理程序接著點代理程序屬性擊活調度把調度設置為每一天發生,每一分鐘,在0:00:00和23:59:59之間。接下來就是判斷復制是否成功了打開c:/program files/microsoft sql server/mssql/repldata/unc/xiaowangzi_database_database下面看是不是有一些以時間做為文件名的文件夾差不多一分中就產生一個。要是你還不信的話就打開你的數據庫看在訂閱的服務器的指定訂閱數據庫下看是不是看到了你剛才所發布的表— 一個手工同步的方案 --定時同步服務器上的數據 --例子: --測試環境,sql server2000,遠程服務器名:xz,用戶名為:sa,無密碼,測試數據庫:test --服務器上的表(查詢分析器連接到服務器上創建) create table [user](id int primary key,number varchar(4),name varchar(10)) go --以下在局域網(本機操作) --本機的表,state說明:null 表示新增記錄,1 表示修改過的記錄,0 表示無變化的記錄 if exists (select * from dbo.sysobjects where id = object_id(n'[user]') and objectproperty(id, n'isusertable') = 1) drop table [user] go create table [user](id int identity(1,1),number varchar(4),name varchar(10),state bit) go --創建觸發器,維護state字段的值 create trigger t_state on [user] after update as update [user] set state=1 from [user] a join inserted b on a.id=b.id where a.state is not null go --為了方便同步處理,創建鏈接服務器到要同步的服務器 --這里的遠程服務器名為:xz,用戶名為:sa,無密碼 if exists(select 1 from master..sysservers where srvname='srv_lnk') exec sp_dropserver 'srv_lnk','droplogins' go exec sp_addlinkedserver 'srv_lnk','','sqloledb','xz' exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa' go --創建同步處理的存儲過程 if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[p_synchro]') and objectproperty(id, n'isprocedure') = 1) drop procedure [dbo].[p_synchro] go create proc p_synchro as --set xact_abort on --啟動遠程服務器的msdtc服務 --exec master..xp_cmdshell 'isql /s"xz" /u"sa" /p"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output --啟動本機的msdtc服務 --exec master..xp_cmdshell 'net start msdtc',no_output --進行分布事務處理,如果表用標識列做主鍵,用下面的方法 --begin distributed transaction --同步刪除的數據 delete from srv_lnk.test.dbo.[user] where id not in(select id from [user]) --同步新增的數據 insert into srv_lnk.test.dbo.[user] select id,number,name from [user] where state is null --同步修改的數據 update srv_lnk.test.dbo.[user] set number=b.number,name=b.name from srv_lnk.test.dbo.[user] a join [user] b on a.id=b.id where b.state=1 --同步后更新本機的標志 update [user] set state=0 where isnull(state,1)=1 --commit tran go --創建作業,定時執行數據同步的存儲過程 if exists(select 1 from msdb..sysjobs where name='數據處理') execute msdb.dbo.sp_delete_job @job_name='數據處理' exec msdb..sp_add_job @job_name='數據處理' --創建作業步驟 declare @sql varchar(800),@dbname varchar(250) select @sql='exec p_synchro' --數據處理的命令 ,@dbname=db_name() --執行數據處理的數據庫名 exec msdb..sp_add_jobstep @job_name='數據處理', @step_name = '數據同步', @subsystem = 'tsql', @[email protected], @command = @sql, @retry_attempts = 5, --重試次數 @retry_interval = 5 --重試間隔 --創建調度 exec msdb..sp_add_jobschedule @job_name = '數據處理', @name = '時間安排', @freq_type = 4, --每天 @freq_interval = 1, --每天執行一次 @active_start_time = 00000 --0點執行 go
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浑源县| 金寨县| 库车县| 涿州市| 福州市| 道孚县| 兰西县| 黄石市| 临夏市| 岢岚县| 凤翔县| 始兴县| 青田县| 化隆| 永福县| 乳山市| 沛县| 武冈市| 山西省| 航空| 盐池县| 逊克县| 郎溪县| 靖边县| 唐河县| 江北区| 旬阳县| 海兴县| 合川市| 清镇市| 南和县| 海宁市| 蓬安县| 永善县| 图木舒克市| 隆德县| 永和县| 嘉义市| 郎溪县| 明溪县| 琼海市|