广告
返回顶部
首页 > 资讯 > 数据库 >SQL Server中怎么实时同步更新远程数据库
  • 513
分享到

SQL Server中怎么实时同步更新远程数据库

2024-04-02 19:04:59 513人浏览 泡泡鱼
摘要

SQL Server中怎么实时同步更新远程数据库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 访问异地数据库在Serve

SQL Server中怎么实时同步更新远程数据库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1. 访问异地数据库

在ServerA 中创建指向ServerB的链接服务器,并做好账号映射。addlinkedserver存储过程创建一个链接服务器,参数详情参见官方文档。第1个参数LNK_ServerA是自定义的名称;第2参数产品名称,如果是sql Server不用提供;第3个参数是驱动类型;第4个参数是数据源,这里写SQL Server服务器地址

exec sp_addlinkedserver 'LNK_ServerB_DatabaseB','','SQLNCLI','172.16.8.101'

配置链接服务器后,默认使用同一本地账号登陆远程数据库,如果账号有不同,还需要进行账号映射。sp_addlinkedsrvlogin参数详情参见官方文档。第1个参数同上;第2个参数false即使用后面参数提供的用户密码登陆;第3个参数null使所有本地账号都可以使用后面的用户密码来登陆链接服务器,如果第3个参数设置为一个本地SQL Server登陆用户名,那么只有这个用户才可以使用远程账号登陆链接服务器;最后两个是登录远程服务器的用户和密码。

exec sp_addlinkedsrvlogin 'LNK_ServerB_DatabaseB','false',null,'user','passWord'

如果要删除以上配置可以如下

exec sp_droplinkedsrvlogin 'LNK_ServerB_DatabaseB',nullexec sp_dropserver 'LNK_ServerB_DatabaseB','droplogins'

上面的配置在SQL Server Management Studio管理器里Server Objects下LinkedServers可以查询到,如果一切链接正常,可以直接打开链接服务器上的库表

值得注意的是以上两个存储过程不能出现在触发器代码中,而是事先在服务器ServerA中运行完成配置,否则触发器隐式事务的要求会报错“The procedure 'sys.sp_addlinkedserver' cannot be executed within a transaction.”

2. 配置分布式事务

SQL Server的触发器是隐式使用事务的,链接服务器是远程服务器,需要在本地服务器和远程服务器之间开启分布式事务处理,否则会报“The partner transaction manager has disabled its support for remote/network transactions”的错误。我在ServerA和ServerB中都开启分布式事务协调器,并进行适当配置,以支持分布式事务。ServerA和ServerB都是windows Server 2012 R2,其他版本服务器类似。

(1)首先在Services.msc中确认Distributed Transaction Coordinator已经开启,其他版本的服务器不一定默认安装,需要安装windows features的方式先进行该特性的安装。

(2)在服务器管理工具Administrative Tools中找到Component Services,在Local DTC中属性Security选项卡中配置如下,打开相关安全设置,完成后会重启服务,也有文档称需要重启服务器,但是至少2012 R2不用。

(3)配置防火墙,Inbound和Outbound都打开

3. 数据库字段text, ntext的处理

业务中表TableA中有一个Content字段是text类型,同步到TableB时需要对内容做一些替换处理。对于text类型是一个过时的类型,微软官方建议用(N)VARCHAR(MAX)替换,可查阅这里。今后设计时可以考虑,这里我们考虑对text进行处理。

但是在触发器中,inserted和deleted表都是不允许对text/ntext/image类型进行处理的,这里我们采用一个曲线救国的办法,从数据库中把记录读取到临时表中,然后通过textptr和patindex函数和updatetext命令完成字符串替换处理

if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#temp_tablea'))  drop table #temp_tableaselect * into #temp_tablea from TableA where ID = @IDdeclare @s varchar(200),@d varchar(200)select @s='="/_target/',@d='="/_replacement/'declare @p varbinary(16),@postion int,@l intselect @p=textptr(Content),@l=len(@s),@postion=patindex('%'+@s+'%',Content)+1 from #temp_tableawhile @postion>1begin updatetext #temp_tablea.Content @p @postion @l @d select @postion=patindex('%'+@s+'%',Content)+1 from #temp_tableaend

4. 执行远程数据库操作

当配置链接服务器时,我们可以直接访问远程数据库表了,如下

insert into LNK_ServerB_DatabaseB.DatabaseB.dbo.TableB ...update LNK_ServerB_DatabaseB.DatabaseB.dbo.TableB set ...

但简陋的SQL编辑器往往会对语法报错,另外为方便编程,我们希望通过exec sp_executesql的方式获得更多的灵活性。其实exec就可以直接执行sql语句,但如果有返回值就比较困难了。如下,从远程服务器上通过ID查询表TableB后返回Name,sp_executesql存储过程可以使用output关键字定义变量为返回变量,其中@Name output为返回变量,@ID则是传入变量。

declare @sql nvarchar(500), @Name nvarchar(50),@ID nvarchar(40)set @SQL=N'select @Name=Name from LNK_ServerB_DatabaseB.DatabaseB.dbo.TableB where ID=@ID'exec sp_executesql @SQL,N'@Name nvarchar(50) output,@ID nvarchar(40)',@Name output,@ID

另外exec直接执行sql语句,本质上是执行拼接后的sql字符串,有时将变量拼接进字符串会困难的多(到底需要几个单引号),而sp_executesql则清晰多了

declare @SQL nvarchar(500),@Name nvarchar(50),@Count int,@ID nvarchar(40)set @Name=N'Cat'set @Count=0set @ID=N'{00000000-0000-0000-0000-000000000000}'set @SQL=N'update TableA set Name='''+@Name+''', Count='+@Count+' where ID='''+@ID+''''exec(@SQL)set @SQL=N'update TableA set Name=@Name,Count=@Count where ID=@ID'exec sp_executesql @SQL, N'@Name nvarchar(50),@Count int,@ID nvarchar(40)',@Name,@Count,@ID

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: SQL Server中怎么实时同步更新远程数据库

本文链接: https://www.lsjlt.com/news/57053.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL Server中怎么实时同步更新远程数据库
    SQL Server中怎么实时同步更新远程数据库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 访问异地数据库在Serve...
    99+
    2022-10-18
  • SQL Server实时同步更新远程数据库遇到的问题
    工作中遇到这样的情况,需要在更新表TableA(位于服务器ServerA 172.16.8.100中的库DatabaseA)同时更新TableB(位于服务器ServerB 172.16.8.101中的库Da...
    99+
    2022-10-18
  • SQL Server中怎么实现远程定时备份数据库
    这篇文章将为大家详细讲解有关SQL Server中怎么实现远程定时备份数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。创建网络映射(Y是盘符;IP地址后...
    99+
    2022-10-18
  • SQL Server 中怎么定时访问url激活数据同步
    SQL Server 中怎么定时访问url激活数据同步,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。创建作业,执行以下命令 e...
    99+
    2022-10-18
  • SQL Server中怎么远程备份数据库到本地
    这篇文章将为大家详细讲解有关SQL Server中怎么远程备份数据库到本地,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、首先启用xp_cmdshellU...
    99+
    2022-10-18
  • Canal中怎么实现MySQL数据库实时数据同步
    这期内容当中小编将会给大家带来有关Canal中怎么实现MySQL数据库实时数据同步,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.1 canal介绍Canal是一个基于...
    99+
    2022-10-18
  • Python实现MySQL更新操作,让你的数据库与程序同步更新
    MySQL是一款广泛使用的关系型数据库管理系统,而Python是一种简单易学、高效的编程语言。两者结合起来可以实现更加强大的数据处理能力。本文将介绍如何在Python中使用MySQL Connector / Python模块来实现MySQL...
    99+
    2023-09-07
    数据库 python mysql
  • SQL Server 数据库中怎么新建维护计划
    这期内容当中小编将会给大家带来有关SQL Server 数据库中怎么新建维护计划,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.打开SQL Server 2008管理界...
    99+
    2022-10-18
  • 使用Python怎么实现SQL Server数据库的对象同步轻量级
    这期内容当中小编将会给大家带来有关使用Python怎么实现SQL Server数据库的对象同步轻量级,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1,表的存在依赖于sch...
    99+
    2022-10-18
  • SQL server中怎么定时自动备份数据库
    本篇文章给大家分享的是有关SQL server中怎么定时自动备份数据库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SQL2000版本用JOB...
    99+
    2022-10-18
  • 怎么异地远程访问本地SQL Server数据库
    这篇文章主要介绍“怎么异地远程访问本地SQL Server数据库”,在日常操作中,相信很多人在怎么异地远程访问本地SQL Server数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎...
    99+
    2023-07-06
  • Linux怎么实现本、异地远程数据实时同步功能
    这期内容当中小编将会给大家带来有关Linux怎么实现本、异地远程数据实时同步功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。0x0 测试环境总部生产服务器与分部备份服务器要求实现异地数据备份,环境如下*...
    99+
    2023-06-05
  • SQL Server数据库中怎么实现重命名
    这篇文章将为大家详细讲解有关SQL Server数据库中怎么实现重命名,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 代码如下: create p...
    99+
    2022-10-18
  • Mysql数据库中怎么实现数据同步
    Mysql数据库中怎么实现数据同步,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 安装配置两台服务器,分别安装好Mysql,都安装在 /u...
    99+
    2022-10-18
  • SQL Server中怎么实现数据库恢复备份
    今天就跟大家聊聊有关SQL Server中怎么实现数据库恢复备份,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一种方法:通常我们采用恢复备份的方式...
    99+
    2022-10-18
  • SQL Server中怎么实现数据库链接查询
    本篇文章给大家分享的是有关SQL Server中怎么实现数据库链接查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SQL Server数据库...
    99+
    2022-10-18
  • MySQL数据库中怎么实现同步
    本篇文章给大家分享的是有关MySQL数据库中怎么实现同步,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1.修改 master 端的my.c...
    99+
    2022-10-18
  • SQL Server中怎么通过扩展存储过程实现数据库远程备份与恢复
    这篇文章将为大家详细讲解有关SQL Server中怎么通过扩展存储过程实现数据库远程备份与恢复,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。实现远程备份与恢...
    99+
    2022-10-18
  • SQL Server数据库中怎么实现备份和还原
    这期内容当中小编将会给大家带来有关SQL Server数据库中怎么实现备份和还原,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、数据库的备份1、选择要备份的数据库“ac...
    99+
    2022-10-18
  • SQL Server中怎么实现分布式数据库系统
    今天就跟大家聊聊有关SQL Server中怎么实现分布式数据库系统,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。   ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作