熱點推薦:
您现在的位置: 電腦知識網 >> 電腦常識 >> 正文

數據庫學習-通過作業定時同步兩個數據庫

2013-11-11 14:05:37  來源: 電腦常識 

  定時同步服務器上的數據的例子:
  
  測試環境SQL Server遠程服務器名:xz用戶名為:sa無密碼測試數據庫:test
  服務器上的表(查詢分析器連接到服務器上創建)
  create table [user](id int primary keynumber varchar()name varchar())
  go
  
  以下在局域網(本機操作)
  本機的表state說明:null 表示新增記錄 表示修改過的記錄 表示無變化的記錄
  if exists (select * from dbosysobjects where id = object_id(N[user]) and OBJECTPROPERTY(id NIsUserTable) = )
  drop table [user]
  GO
  create table [user](id int identity()number varchar()name varchar()state bit)
  go
  創建觸發器維護state字段的值
  create trigger t_state on [user]
  after update
  as
  update [user] set state=
  from [user] a join inserted b on aid=bid
  where astate is not null
  go
  為了方便同步處理創建鏈接服務器到要同步的服務器
  這裡的遠程服務器名為:xz用戶名為:sa無密碼
  if exists(select from mastersysservers where srvname=srv_lnk)
  exec sp_dropserver srv_lnkdroplogins
  go
  exec sp_addlinkedserver srv_lnkSQLOLEDBxz
  exec sp_addlinkedsrvlogin srv_lnkfalsenullsa
  go
  
  創建同步處理的存儲過程
  if exists (select * from dbosysobjects where id = object_id(N[dbo][p_synchro]) and OBJECTPROPERTY(id NIsProcedure) = )
  drop procedure [dbo][p_synchro]
  GO
  create proc p_synchro
  as
  set XACT_ABORT on
  啟動遠程服務器的MSDTC服務
  exec masterxp_cmdshell isql /Sxz /Usa /P /qexec masterxp_cmdshell net start msdtcno_outputno_output
  
  啟動本機的MSDTC服務
  exec masterxp_cmdshell net start msdtcno_output
  
  進行分布事務處理如果表用標識列做主鍵用下面的方法
  BEGIN DISTRIBUTED TRANSACTION
  同步刪除的數據
  delete from srv_lnktestdbo[user]
  where id not in(select id from [user])
  
  同步新增的數據
  insert into srv_lnktestdbo[user]
  select idnumbername from [user] where state is null
  
  同步修改的數據
  update srv_lnktestdbo[user] set
  number=bnumbername=bname
  from srv_lnktestdbo[user] a
  join [user] b on aid=bid
  where bstate=
  
  同步後更新本機的標志
  update [user] set state= where isnull(state)=
  COMMIT TRAN
  go
  
  創建作業定時執行數據同步的存儲過程
  if exists(SELECT from msdbsysjobs where name=數據處理)
  EXECUTE msdbdbosp_delete_job @job_name=數據處理
  exec msdbsp_add_job @job_name=數據處理
  
  創建作業步驟
  declare @sql varchar()@dbname varchar()
  select @sql=exec p_synchro 數據處理的命令
  @dbname=db_name() 執行數據處理的數據庫名
  
  exec msdbsp_add_jobstep @job_name=數據處理
  @step_name = 數據同步
  @subsystem = TSQL
  @database_name=@dbname
  @command = @sql
  @retry_attempts = 重試次數
  @retry_interval = 重試間隔
  
  創建調度
  EXEC msdbsp_add_jobschedule @job_name = 數據處理
  @name = 時間安排
  @freq_type = 每天
  @freq_interval = 每天執行一次
  @active_start_time = 點執行
From:http://tw.wingwit.com/Article/Common/201311/5104.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.