--定時同步伺服器上的資料(伺服器上的資料修改同步到本地)
--例子:
--測試環境,sql server2000,遠端伺服器名:rserver,使用者名為:ruser,密碼:rpwd,
測試資料庫:test
--伺服器上的表(查詢分析器連線到伺服器上建立)
--state欄位為輔助更新而設定的附加字段,字段值說明:null 表示新增記錄,1 表示修改過的記錄,0 表示無變化的記錄
if exists (select * from dbo.sysobjects where id = object_id(n』[luser]』) and objectproperty(id, n』isusertable』) = 1)
drop table [luser]
go
create table [luser](id int identity(1,1) primary key,[user] varchar(4),pwd varchar(10),address varchar(50),state bit)
go
--建立觸發器,維護state欄位的值
create trigger t_state on [luser]
after update
as
update [luser] set state=1
from [luser] a join inserted b on a.id=b.id
where a.state is not null
go
----以下在區域網(本機操作)
if exists (select * from dbo.sysobjects where id = object_id(n』[luser]』) and objectproperty(id, n』isusertable』) = 1)
drop table [luser]
create table [luser](id int primary key,[user] varchar(4),pwd varchar(10),address varchar(50))
go
--為了方便同步處理,建立鏈結伺服器到要同步的伺服器
--這裡的遠端伺服器名:rserver,使用者名為:ruser,密碼:rpwd
if exists(select 1 from master..sysservers where srvname=』srv_lnk』)
exec sp_dropserver 』srv_lnk』,』droplogins』
go
exec sp_addlinkedserver 』srv_lnk』,』』,』sqloledb』,』rserver』
exec sp_addlinkedsrvlogin 』srv_lnk』,』false』,null,』ruser』,』rpwd』
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
/*--因為msdtc服務(分布式事務處理需要)工作不穩定,所以下面部分為選用內容
--set xact_abort on
--啟動遠端伺服器的msdtc服務
--exec master..xp_cmdshell 』isql /s"rserver" /u"ruser" /p"rpwd" /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 [luser]
where id not in(select id from srv_lnk.test.dbo.[luser])
--同步新增的資料
insert into [luser]
select id,[user],pwd,address from srv_lnk.test.dbo.[luser]
where state is null
--同步修改的資料
update [luser] set
[user]=b.[user],pwd=b.pwd,address=b.address
from [luser] a
join srv_lnk.test.dbo.[user] b on a.id=b.id
where b.state=1
--同步後更新伺服器上的標誌
update srv_lnk.test.dbo.[luser] 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』,
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重試次數
@retry_interval = 5 --重試間隔
--建立排程
exec msdb..sp_add_jobschedule @job_name = 』資料處理』,
@name = 』時間安排』,
@freq_type=4, --4 每天,8 每週,16 每月
@freq_interval=1, --作業執行的天數
@freq_subday_type=0, --是否重複執行,0x1 在指定的時間, 0x4 分鐘, 0x8 小時
@freq_subday_interval=1, --重複週期
@freq_recurrence_factor=0, --重複執行,則設定為1,否則設定為0
@active_start_time = 00000 --0點開始執行
--新增目標伺服器
exec msdb.dbo.sp_add_jobserver
@job_name = @jobname ,
@server_name = n』(local)』
go
也可以直接建立乙個資料庫的複製。
即,出版伺服器和訂閱伺服器。
連線兩台asterisk伺服器 CTI開發
有兩台asterisk伺服器,需要可以撥打註冊在對方伺服器上的分機號。假設有a b兩台伺服器,a上面分機號都以3開頭,如3000 b上面分機號都以8開頭,如8000。在a上新建iax trunk,命名 interoffice 配置如下 peer detail 項 host b的ip位址 qualif...
兩台windows伺服器 SVN的遷移
兩台伺服器,進行svn的遷移 系統平台 windows server 2003 版本庫 test 源伺服器 192.168.1.14 目標伺服器 192.168.1.12 源svn版本庫的path d svn test 要遷移到的path e svn test 第一種方法 推薦 首先說明 這個目標伺...
兩台Linux伺服器建立信任關係
如果在兩台linux伺服器之間經常需要互相訪問,但是需要經常手動輸入密碼,可以在兩台伺服器之間建立乙個信任連線,然後把鑑權檔案寫到乙個檔案裡 步驟1 先在主機a使用命令建立金鑰 步驟二 在 root ssh目錄裡面看到建立的金鑰 ls root ssh 步驟三 把id rsa.pub檔案複製到主機b...