`

Server SQL2008 链接服务器数据同步

    博客分类:
  • SQL
sql 
阅读更多
/*
--author:Bruce Qin*/

/*--
-- 删除链接和链接服务器
Exec sp_droplinkedsrvlogin syncDB,Null
Exec sp_dropserver syncDB

EXEC sp_addlinkedserver
      @server='syncDB',--被访问的服务器别名
      @srvproduct='',
      @provider='SQLOLEDB',
      @datasrc='202.**.***.43\MSSQLSERVER2008' --要访问的服务器实例名

---- @datasrc='servername\instancename'
---- servername 是运行 SQL Server 的计算机名称(或者IP),instancename 是用户将被连接到的特定 SQL Server 实例的名称
 
EXEC sp_addlinkedsrvlogin
     'syncDB', --被访问的服务器别名
     'false',
     NULL,
     'sa', --帐号
     'sa' --密码
	 
exec sp_serveroption 'syncDB43','rpc out','true';  --允许调用链接服务器上的存储过程
    
-- 在远程服务器43的作业中调用本服务器的存储过程saveSync_process_ON187     
--exec('exec Mydb_sync187.dbo.saveSync_process_ON187') at syncDB43;

**/

/*--链接服务器同步数据示例 

服务器HAI:
       hostname:HAI
	   实例名:HAI\BRUCESERVER	 
	  (测试)数据库名:Mydb_sync187 
	   
服务器CHOW:	   
	   hostname:CHOW
       实例名:CHOW\SQL2008	   
	  (测试)数据库名:Mydb_sync10 

同步要求:
       1、在服务器HAI在的My_sync187数据库出现save、update、delete操作后,将数据同步到服务器CHOW的Mydb_sync10数据库中,保持数据一致性。
	   2、在服务器CHOW在的Mydb_sync10数据库出现save、update、delete操作后,将数据同步到服务器HAI的Mydb_sync187数据库中,保持数据一致性。
--*/ 

/*
-- 在服务器HAI上完成save、update、delete操作后将数据单向同步到服务器CHOW上的设置如下列步骤所示(在服务器CHOW的设置相似)
*/

--步骤1:在服务器HAI上创建链接服务器(链接到服务器CHOW,202.**.***.10): 
-------
Exec sp_droplinkedsrvlogin syncDB10,Null
Exec sp_dropserver syncDB10
EXEC sp_addlinkedserver
      @server='syncDB10',--被访问的服务器别名
      @srvproduct='',
      @provider='SQLOLEDB',
      @datasrc='202.**.***.10\SQL2008' --要访问的服务器
 
EXEC sp_addlinkedsrvlogin
     'syncDB10', --被访问的服务器别名
     'false',
     NULL,
     'sa', --帐号
     'sa' --密码



--步骤2:在服务器HAI上启动 msdtc(分布式事务处理服务),并且设置为自动启动 

--  我的电脑--控制面板--管理工具--服务--右键 Distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动 
--  注:如果在第1步Distributed Transaction Coordinator 无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。重新创建 MSDTC 日志,并重新启动服务的步骤如下:
--    (1) 单击"开始",单击"运行",输入 cmd 后按"确定"。
--    (2) 输入:msdtc -resetlog (注意运行此命令时,不要执行挂起的事务)
--    (3) 最后输入:net start msdtc 回车。


--步骤3: 在服务器HAI上的数据库Mydb_sync187 创建一个作业定时远程调用服务器CHOW数据库Mydb_sync10上的同步处理存储过程。

--  企业管理器 
--  管理 
--  SQL Server代理 
--  右键作业 
--  新建作业 
--  "常规"项中输入作业名称,如 Mydb_sync187_job 
--  "步骤"项 
--   新建 
--  "步骤名"中输入步骤名,如 Mydb_sync187_step 
--  "类型"中选择"Transact-SQL 脚本(TSQL)" 
--  "数据库"选择执行命令的数据库,如 Mydb_sync187 
--  "命令"中输入要执行的语句: 

    EXEC sp_addlinkedserver
      @server='syncDB10',--被访问的服务器别名
      @srvproduct='',
      @provider='SQLOLEDB',
      @datasrc='202.**.***.10\SQL2008'; --要访问的服务器
 
	EXEC sp_addlinkedsrvlogin
     'syncDB10', --被访问的服务器别名
     'false',
      NULL,
     'sa', --帐号
     'sa'; --密码
   
    --允许调用链接服务器syncDB10上的存储过程
	EXEC sp_serveroption 'syncDB10','rpc out','true';  
 
	EXEC('exec Mydb_sync10.dbo.saveSync_process_ON10') at syncDB10;
	EXEC('exec Mydb_sync10.dbo.updateSync_process_ON10') at syncDB10;
	EXEC('exec Mydb_sync10.dbo.deleteSync_process_ON10') at syncDB10;

    Exec sp_droplinkedsrvlogin syncDB10,Null;
    Exec sp_dropserver syncDB10; 
	
--  确定 
--  "调度"项 
--  新建调度 
--  "名称"中输入调度名称 
--  "调度类型"中选择你的作业执行安排 
--  如果选择"反复出现" 
--  点"更改"来设置你的时间安排 (设置合理的时间安排)


--  然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 
--  设置方法: 
--  我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定. 

--步骤4:在服务器HAI上调用服务器CHOW上的实现同步处理的存储过程如下 

--  服务器CHOW上Mydb_sync10数据库中创建如下的同步处理存储过程: 
GO
--新增数据操作存储过程
create proc saveSync_process_ON187 
as
begin tran --开始事物

--将远程服务器新增的数据同步到本服务器中 
insert t_park_account(status,user_id,car_id,cardNo,cardType,cost,lowestBalanceAfterConsume,tollyLowestBalanceAC,noEntryBalance,lowBalanceNotice,openAccountTime,statusUpdateTime,remark,parkNo,balance) 
	select status,user_id,car_id,cardNo,cardType,cost,lowestBalanceAfterConsume,tollyLowestBalanceAC,noEntryBalance,lowBalanceNotice,openAccountTime,statusUpdateTime,remark,parkNo,balance 
	from syncDB187.Mydb_sync187.dbo.t_park_account _account
	where not exists( 
					select * from t_park_account where sys_id=_account.sys_id)
				 
--@@error的值不等于0表示上一条SQL语句执行结果有错,即采取事物回滚措施
if @@ERROR<>0 
begin
	rollback tran
end

insert t_park_user(sys_id,userName,credentialsType,credentialsNo,phone,mobileNumber,address) 
	select sys_id,userName,credentialsType,credentialsNo,phone,mobileNumber,address 
	from syncDB187.Mydb_sync187.dbo.t_park_user _user
	where not exists( 
					select * from t_park_user where sys_id=_user.sys_id)

if @@ERROR<>0 
begin
rollback tran
end

insert t_park_car(vehPlate,carType,carColour) 
	select vehPlate,carType,carColour 
	from syncDB187.Mydb_sync187.dbo.t_park_car _car
	where not exists(
					select * from t_park_car where sys_id=_car.sys_id)
									
if @@ERROR<>0 
begin
rollback tran
end

commit tran --提交事物


GO
--更新数据操作存储过程
create proc updateSync_process_ON187 
as
begin tran --开始事物

--将远程服务器更新的数据更新到本服务器中 
update account 
set status=_account.status,user_id=_account.user_id,car_id=_account.car_id,cardNo=_account.cardNo,cardType=_account.cardType,cost=_account.cost,lowestBalanceAfterConsume=_account.lowestBalanceAfterConsume,tollyLowestBalanceAC=_account.tollyLowestBalanceAC,noEntryBalance=_account.noEntryBalance,lowBalanceNotice=_account.lowBalanceNotice,openAccountTime=_account.openAccountTime,statusUpdateTime=_account.statusUpdateTime,remark=_account.remark,parkNo=_account.parkNo,balance=_account.balance 
from syncDB187.Mydb_sync187.dbo.t_park_account _account,t_park_account account 
where account.sys_id=_account.sys_id 

if @@ERROR<>0 
begin
rollback tran
end

update _user_ 
set sys_id=_user.sys_id,userName=_user.userName,credentialsType=_user.credentialsType,credentialsNo=_user.credentialsNo,phone=_user.phone,mobileNumber=_user.mobileNumber,address=_user.address
from syncDB187.Mydb_sync187.dbo.t_park_user _user,t_park_user _user_ 
where _user_.sys_id=_user.sys_id

if @@ERROR<>0 
begin
rollback tran
end

update car 
set  vehPlate=_car.vehPlate,carType=_car.carType,carColour=_car.carColour
from syncDB187.Mydb_sync187.dbo.t_park_car _car,t_park_car car 
where car.sys_id=_car.sys_id 

if @@ERROR<>0 
begin
rollback tran
end

commit tran --提交事物


GO
--删除数据操作存储过程
create proc deleteSync_process_ON187 
as 
begin tran --开始事物

--删除已删除的数据
delete account 
from t_park_account account
where not exists( 
				select * from syncDB187.Mydb_sync187.dbo.t_park_account where sys_id=account.sys_id) 

if @@ERROR<>0 
begin
rollback tran
end

delete _user_ 
from t_park_user _user_
where not exists( 
				select * from syncDB187.Mydb_sync187.dbo.t_park_user where sys_id=_user_.sys_id)

if @@ERROR<>0 
begin
rollback tran
end

delete car 
from t_park_car car
where not exists( 
				select * from syncDB187.Mydb_sync187.dbo.t_park_car where sys_id=car.sys_id)

if @@ERROR<>0 
begin
rollback tran
end

commit tran --提交事物


分享到:
评论

相关推荐

    SQLServer触发器实现不同服务器数据同步.pdf

    SQL Server 触发器实现不同服务器数据同步 在本文中,我们将探讨如何使用 SQL Server 触发器来实现不同服务器之间的数据同步。该方法可以实现在两个或多个服务器之间实时同步数据,提高数据的一致性和可靠性。 ...

    SQL Server 2008 R2 主从数据库同步

    在从数据库服务器上,SQL Server 2008 R2 会将事务日志应用到从数据库中,从而实现数据同步。 优点 SQL Server 2008 R2 主从数据库同步有以下优点: * 高可用性:SQL Server 2008 R2 主从数据库同步可以实现高...

    如何在两个SQLSERVER之间数据同步

    ### 如何在两个SQLSERVER之间实现数据同步 在IT领域,特别是对于企业级应用而言,数据同步是一项重要的技术,能够确保不同地理位置的数据中心之间数据的一致性和可用性。本文将详细介绍如何通过SQL Server的复制...

    SQL SERVER 发布/订阅 数据同步

    本文档主要介绍了如何在SQL Server 2000与SQL Server 2008之间实现这种数据同步。 #### 环境准备 1. **服务启动与配置**:确保SQL Server服务正常运行,并将SQL Server Agent服务设为自动启动。 - 对于SQL Server ...

    SQL SERVER 2008 数据同步设置指南

    本文将详细介绍如何在SQL Server 2008环境下实现A、B两台服务器间的数据同步备份功能,具体采用的是事务复制的方式。 #### 二、创建发布服务器 1. **打开SQL Server 2008配置管理器**:首先,需要通过“开始”菜单...

    SQLServer2008R2主从数据库同步

    在实现SQL Server 2008 R2的主从数据库同步之前,首先需要确保主从服务器的基本环境配置一致,并创建必要的用户及权限。 **主数据库服务器:** - 操作系统:Windows Server 2008 R2 - 数据库版本:SQL Server 2008 ...

    将SQLSERVER中的数据同步到ORACLE中

    在SQL Server中创建链接服务器是实现数据同步的关键步骤之一。链接服务器允许SQL Server连接到远程数据库服务器(如Oracle)。创建链接服务器的过程如下: 1. **打开SQL Server Management Studio** (SSMS),连接到...

    两台SQL-Server数据同步解决方案

    ### 两台SQL Server数据同步解决方案详解 #### 一、概述 在当今信息化时代,数据同步成为企业级应用中不可或缺的一部分。特别是在分布式环境中,确保不同地理位置的数据库保持一致性和实时性变得尤为重要。本文将...

    利用SQL Server复制技术实现数据同步更新

    在现代企业级应用环境中,为了确保数据的一致性和高效性,SQL Server 复制技术被广泛应用于多站点或多服务器之间的数据同步。本文将详细阐述如何通过SQL Server复制功能来实现数据的发布与订阅过程,帮助读者理解其...

    用链接服务器同步数据sql

    用链接服务器同步数据sql SQL 脚本, 与链接服务器一起使用

    SQLSERVER2000数据双向同步

    SQL Server 2000 数据双向同步是一种技术,它允许两个或多个数据库实例之间的数据保持一致,即使这些实例位于不同的服务器上。这种同步对于确保数据的实时更新和一致性至关重要,尤其是在分布式系统或需要数据灾备的...

    使用flink-connector-sqlserver-cdc 2.3.0把数据从SQL Server实时同步到MySQL中

    本话题将详细讲解如何利用Flink的SQL Server Change Data Capture (CDC) 连接器版本2.3.0,将SQL Server中的数据实时同步到MySQL数据库。 首先,让我们了解什么是CDC。CDC是一种数据库技术,它能够捕获数据库中的...

    SQL SERVER的异地数据同步功能.doc

    ### SQL SERVER的异地数据同步功能解析 #### 一、引言 SQL Server 是一款功能强大的关系型数据库管理系统,广泛应用于企业级数据管理和处理场景。其提供的异地数据同步功能,即数据库复制,是实现多站点数据一致性...

    SQLServer利用SSIS包定时同步新增数据到其它库

    ### SQL Server 利用 SSIS 包定时同步新增数据到其他库 #### 一、概述 随着企业数据量的增长和业务复杂度的提高,数据同步成为了一项重要的工作。SQL Server 的集成服务(SQL Server Integration Services,简称 ...

    SQL Server服务器同步备份

    "SQL Server服务器同步备份"是指在多个服务器之间进行数据同步的过程,确保即使在一个服务器出现故障时,其他服务器也能提供最新、完整的数据服务。这通常涉及到数据库的复制、事务日志传输等技术,以实现高可用性和...

    Navicat 实现同步sqlserver表结构到mysql操作手册1

    本文将详细介绍如何使用Navicat工具实现SQL Server表结构到MySQL的同步操作,这对于那些需要在不同数据库系统间进行数据迁移的开发者来说尤其有用。 Navicat是一款强大的数据库管理工具,支持多种数据库类型,包括...

    在VS2008下,利用c#在SQLSERVER2005实现两个数据库同步

    在开发过程中,有时我们需要在不同的SQL Server 2005数据库之间进行数据同步,例如在测试环境和生产环境之间同步数据,或者在多个分部的数据库间共享信息。本教程将详细讲解如何在Visual Studio 2008(VS2008)环境...

    两台SQL+Server数据同步解决方案

    "两台SQL Server数据同步解决方案" 在本文中,我们将讨论两台SQL Server数据同步解决方案的概念和实现步骤。数据同步是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式...

    两台SQL Server数据同步解决方案

    本文将详细介绍如何实现两台SQL Server服务器之间的数据同步,并探讨其中的关键技术和步骤。 #### 数据同步的重要性 数据同步是指将数据从一个或多个源复制到其他位置的过程,以确保数据的一致性和可用性。对于SQL...

Global site tag (gtag.js) - Google Analytics