位置: 编程技术 - 正文

SQL Server实时同步更新远程数据库遇到的问题小结

编辑:rootadmin

推荐整理分享SQL Server实时同步更新远程数据库遇到的问题小结,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

工作中遇到这样的情况,需要在更新表TableA(位于服务器ServerA ..8.中的库DatabaseA)同时更新TableB(位于服务器ServerB ..8.中的库DatabaseB)。

TableA与TableB结构相同,但数据数量不一定相同,应为有可能TableC也在更新TableB。由于数据更新不频繁,为简单起见想到使用了触发器Tirgger。记录一下遇到的一些问题:

1. 访问异地数据库

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

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

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

上面的配置在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 R2,其他版本服务器类似。

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

SQL Server实时同步更新远程数据库遇到的问题小结

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

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

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

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

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

4. 执行远程数据库操作

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

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

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

以上所述是小编给大家介绍的SQL Server实时同步更新远程数据库遇到的问题小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对积木网网站的支持!

SQL Server 使用触发器(trigger)发送电子邮件步骤详解 sql使用系统存储过程sp_send_dbmail发送电子邮件语法:sp_send_dbmail[[@profile_name=]'profile_name'][,[@recipients=]'recipients[;...n]'][,[@copy_recipients=]'copy_recipient[;...n]'][,[@b

SQL 获取所有上级的实现方法 SQL获取所有上级的实现方法说明:(1)可以做成一个函数,直接调用即可;(2)M0Org是数据库存在的表,M0OrgPID为目标表,OrgID为ID字段,PID为上级ID字段DECLARE

sql中的 where 、group by 和 having 用法解析 废话不多说了,直接给大家贴代码了,具体代码如下所示:--sql中的where、groupby和having用法解析--如果要用到groupby一般用到的就是每这个字例如说明现在

标签: SQL Server实时同步更新远程数据库遇到的问题小结

本文链接地址:https://www.jiuchutong.com/biancheng/324386.html 转载请保留说明!

上一篇:MSSQL 2000 使用帮助(sql server简明教程)(mssqlserver怎么用)

下一篇:SQL Server 使用触发器(trigger)发送电子邮件步骤详解(sql server触发器在哪里?)

  • 小规模纳税人减按1%政策文件
  • 进口报关商品的完税价格包含运费吗
  • 申报未抄税
  • 提存金属于职工薪酬吗
  • 业务员报销差旅费会计分录怎么做
  • 事业单位的会计制度是什么
  • 自然人独资企业交哪些税
  • 公司过账什么意思
  • 冲销管理费用如何计算
  • 服务业工资计入成本还是营业费用
  • 利润表要怎么看
  • 离职补偿金个税计算器2022
  • 同一笔销售业务的收入和成本
  • 股东转让股份怎么转让
  • 费用的补提利息怎么计算
  • 股东以车辆出资 涉及哪些税费
  • 利润分配的余额
  • 库存现金盘盈的账务处理中可能涉及的科目有
  • 未代扣代缴个税的滞纳金与处罚规定
  • 1697507802
  • 印花税的购销合同改成买卖合同了吗?
  • 将自产产品用于职工福利的账务处理
  • 公司账外废品收入怎么算
  • 企业筹资付给第三方账户
  • 销项税多了冲销部分的怎么做账
  • 补税后算偷税漏税吗
  • php 用户和密码
  • linux中loop的含义
  • PHP:pg_field_type()的用法_PostgreSQL函数
  • Jetson Xavier NX配置全过程——安装jtop和OpenCV4.5.3(二)
  • syms命令
  • 资产负债表中应交税费包括哪些
  • 机器学习中的隐变量/潜变量和隐藏空间/潜在空间
  • 单图像三维重建
  • 详解Yii2 定制表单输入字段的标签和样式
  • 单目深度估计算法
  • php怎么设置图片的大小
  • 固定资产改造费用化账务处理
  • mysql 数据库
  • mongodb用法
  • 固定资产盘盈属于其他业务收入吗
  • 企业借款利息计入什么科目
  • 资产合计是期末余额吗
  • 无偿调入资产如何做账
  • 其他应收款的账龄如何计算时间
  • 个税申报系统非正常可以改为正常吗?
  • 收取会费
  • 研发费用的核算方法
  • 固定资产全套账务处理2021
  • 连锁零售药房
  • 计提折旧,生成折旧分摊凭证步骤
  • 经营范围之外的业务
  • 长期股权投资出售时其他权益变动
  • 企业一般账户开户申请理由
  • 出租车票没有发票怎么办
  • mac中mysql应该怎么运行
  • windows2003设置自动重启
  • linux系统配置ipv6地址
  • macbook imessage
  • 苹果mac系统怎么更新
  • mac 阿里旺旺怎么使用
  • 如何重置路由器wifi密码
  • WZor曝光Win10专业版升级教育版的密钥 无法激活
  • 什么是血糖
  • 微软最新新闻
  • js explode
  • 手机摇一摇插件
  • Cocos2dx3.2 Crazy Tetris 基本设置及主菜单页面(菜单、按钮)
  • 第四章之BootStrap表单与图片
  • 批量压缩命令
  • Linux 中的通配符详解及实例
  • linux中gzip的用法
  • Python实现定时任务
  • jquery表单事件验证表单
  • jquery mobile app
  • 国家税务总局2018年61号公告
  • 朝阳区地方税务局电话
  • 建筑装饰业发票怎么开
  • 梨树烧烤一条街打人
  • 国办函和国办发
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设