加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver创建服务器连接,及同构数据库同步问题

发布时间:2020-12-12 14:44:57 所属栏目:MsSql教程 来源:网络整理
导读:创建服务器连接 ?? exec?? sp_addlinkedserver???? 'srv1','','SQLOLEDB','192.168.0.221,7788'?? ?? exec?? sp_addlinkedsrvlogin?? 'srv1','false',null,'userid','pwd' 删除服务器连接 sp_droplinkedsrvlogin ‘srv1',null sp_dropserver 'srv1' 或者 exe

创建服务器连接

?? exec?? sp_addlinkedserver???? 'srv1','','SQLOLEDB','192.168.0.221,7788'??

?? exec?? sp_addlinkedsrvlogin?? 'srv1','false',null,'userid','pwd'


删除服务器连接

sp_droplinkedsrvlogin ‘srv1',null
sp_dropserver 'srv1'

或者 exec sp_dropserver 'srv1','droplogins '

查看服务器连接

select * from master..sysservers


创建存储过程的语法

create ? proc ? p_process ? ?

{

? @in_name varchar(100),

? @int_param2 int,

? @out_param3 int output????? --输出参数

}

as ?
-- content

? return xxx;

end

//////////////////////////////////////////////////////////////////////////////////////////////////

/*--同步两个数据库中两个表的示例 ? ? ? ? 测试环境及同步要求: ? ? ? ? 有数据库服务器srv1和srv2,两台电脑能互相访问,有数据 ? ? srv1.库名..author有字段:id,name,phone,? ? srv2.库名..author有字段:id,telphone,adress ? ? ? ? 要求: ? ? srv1.库名..author增加记录则srv2.库名..author记录增加 ? ? srv1.库名..author的phone字段更新,则srv2.库名..author对应字段telphone更新 ? ? --*/ ? ? ? ? --大致的处理步骤 ? ? --1.在 ? srv1 ? 上创建连接服务器,以便在 ? srv1 ? 中操作 ? srv2,实现同步 ? ? exec ? sp_addlinkedserver ? ? 'srv2','srv2的sql实例名或ip' ? ? exec ? sp_addlinkedsrvlogin ? 'srv2','用户名','密码' ? ? go ? ? ? ? --2.在 ? srv1 ? 和 ? srv2 ? 这两台电脑中,启动 ? msdtc(分布式事务处理服务),并且设置为自动启动 ? ? 我的电脑--控制面板--管理工具--服务--右键 ? Distributed ? Transaction ? Coordinator--属性--启动--并将启动类型设置为自动启动 ? ? go ? ? --3.实现同步处理 ? ? ? ? --a.在srv1..author中创建触发器,实现数据即时同步 ? ? --新增同步 ? ? create ? trigger ? tr_insert_author ? on ? author ? ? for ? insert ? ? as ? ? set ? xact_abort ? on ? --如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。 ? insert ? srv2.库名.dbo.author(id,telphone) ? ? select ? id,telphone ? from ? inserted ? ? go ? ? ? ? --修改同步 ? ? create ? trigger ? tr_update_author ? on ? author ? ? for ? update ? ? as ? ? set ? xact_abort ? on ? ? update ? b ? set ? name=i.name,telphone=i.telphone ? ? from ? srv2.库名.dbo.author ? b,inserted ? i ? ? where ? b.id=i.id ? ? go ? ? ? ? --删除同步 ? ? create ? trigger ? tr_delete_author ? on ? author ? ? for ? delete ? ? as ? ? set ? xact_abort ? on ? ? delete ? b ? ? ? from ? srv2.库名.dbo.author ? b,deleted ? d ? ? where ? b.id=d.id ? ? go ? 上面的触发器是同步更新到链接的同构sql server服务器上的,如果链接服务器不是24小时都可用的,则要定时提交更新 ? ? ? --在srv1中创建如下的同步处理存储过程 ? ? create ? proc ? p_process ? ? ? as ? ? --更新修改过的数据 ? ? update ? b ? set ? name=i.name,author ? i ? ? where ? b.id=i.id ? and ? ? (b.name<>i.name ? or ? b.telphone<>i.telphone) ? ? ? ? --插入新增的数据 ? ? insert ? srv2.库名.dbo.author(id,telphone ? from ? author ? i ? ? where ? not ? exists( ? ? select ? * ? from ? srv2.库名.dbo.author ? where ? id=i.id) ? ? ? ? --删除已经删除的数据(如果需要的话) ? ? delete ? b ? ? ? from ? srv2.库名.dbo.author ? b ? ? where ? not ? exists( ? ? select ? * ? from ? author ? where ? id=b.id) ? ? go ? ? ? ? --然后创建一个作业定时调用上面的同步处理存储过程就行了 ? ? ? ? 企业管理器 ? ? --管理 ? ? --SQL ? Server代理 ? ? --右键作业 ? ? --新建作业 ? ? --"常规"项中输入作业名称 ? ? --"步骤"项 ? ? --新建 ? ? --"步骤名"中输入步骤名 ? ? --"类型"中选择"Transact-SQL ? 脚本(TSQL)" ? ? --"数据库"选择执行命令的数据库 ? ? --"命令"中输入要执行的语句: ? exec ? p_process ? ? ? --确定 ? ? --"调度"项 ? ? --新建调度 ? ? --"名称"中输入调度名称 ? ? --"调度类型"中选择你的作业执行安排 ? ? --如果选择"反复出现" ? ? --点"更改"来设置你的时间安排 ? ? ? ? ? ? 然后将SQL ? Agent服务启动,并设置为自动启动,否则你的作业不会被执行 ? ? ? 总结: 1. 这个是用于同构的sql server服务器之间的同步 2. 没有采用增量同步技术,直接对比两张表找出不同,大数据量下不适用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读