环境:windowsserver2012+ sqlserver2014

发布机       192.168.1.43    KC-DB01      

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

订阅机       192.168.1.218    DB-Sync

 

SqlServer发布订阅

基础知识

经验建议:

1.在装系统后先把机器主机名、用户名修改好(装完数据库后修改会严重影响发布订阅),然后再安装数据库;ps:血与泪的教训!

2.多个需要设置发布订阅的的数据库的sa用户名密码设置相同;(后来推送订阅测试不需要)

 

一、准备工作

1.确保发布机、订阅机器 Sql Server 代理 已经在运行并设置为自启动;

 

2.保证 SqlServer的主机名和物理机的主机名相同;若不同请看后面问题记录

3.确保发布机、订阅机1433端口能相互连接(互通);

4.添加域名解析,一般配置文件在C:\Windows\System32\drivers\etc 在最后面添加解析,两台机器都需要添加同样的解析

192.168.1.43    KC-DB01

192.168.1.218    DB-Sync

最后通过ping KC-DB01测试是否能正常解析到前面的43IP;

 

二、创建发布

建立测试表

CREATE TABLE TB_1(Id int primary key,Name char(200),InsertTime datetime default getdate())

insert into TB_1 select isnull(max(id),0)+1,'a'+ltrim(isnull(max(id),0)+1),getdate() from TB_1

select * from TB_1

发布数据库表增加sa权限

USE [KCMirrorDB]

GO

sp_changedbowner 'sa'

 

1、发布

 sqlserver 发布与订阅 随笔 第1张

sqlserver 发布与订阅 随笔 第2张

选择发布类型,自行选择,区别下面有介绍,我们这里选择“事物发布”

 sqlserver 发布与订阅 随笔 第3张

 

选择要发布的项目

 sqlserver 发布与订阅 随笔 第4张

 

可以勾选一些表,也可以发布存储过程视图等,但是下面的这些不能发布,原因也有说明

sqlserver 发布与订阅 随笔 第5张

右键表格属性

sqlserver 发布与订阅 随笔 第6张

sqlserver 发布与订阅 随笔 第7张

其他选项默认

根据情况,勾选自己要发布的部分表后执行下一步,进入筛选表行选项,可以筛选以上选择的表中不想同步的一些列,这里我们不筛选,直接下一步

 取消立即创建快照并使用快照对订阅进行初始化

sqlserver 发布与订阅 随笔 第8张

 

 sqlserver 发布与订阅 随笔 第9张

这里先进入“快照代理-安全设置”按如下设置账号密码,然后同样的设置日志读取器代理

sqlserver 发布与订阅 随笔 第10张

sqlserver 发布与订阅 随笔 第11张

sqlserver 发布与订阅 随笔 第12张

sqlserver 发布与订阅 随笔 第13张

 

最后更改快照的存储位置

右键刚创建的发布-属性

sqlserver 发布与订阅 随笔 第14张

 

 sqlserver 发布与订阅 随笔 第15张

自此sqlserver的发布完成

 

验证发布正确性

发布完成后,查看发布是否成功、是否有错误;先确保发布成功,便于后面有问题时分析;

sqlserver 发布与订阅 随笔 第16张

sqlserver 发布与订阅 随笔 第17张

正在生成快照,说明发布没有问题,等待快照生成完成;

 

 

2、订阅

订阅的形式可以选择推送订阅或者请求订阅,请求订阅降低分发服务器处理工作的开销。只有在有很多订阅服务器的时候才比较明显,推送订阅与请求订阅更大的区别是在管理方面的不同;

这里推荐使用“推送订阅”

2.1、请求订阅

注意:请求订阅,需要订阅服务器有访问发布服务器快照目录的权限;

远程登录192.168.1.91机器

创建一个数据库,用于订阅同步到这个库里;

 sqlserver 发布与订阅 随笔 第18张

sqlserver 发布与订阅 随笔 第19张

 

 sqlserver 发布与订阅 随笔 第20张

sqlserver 发布与订阅 随笔 第21张

 

 选择同步类型,(经过测试两次使用请求订阅都不成功,问题多多)

 sqlserver 发布与订阅 随笔 第22张

选择同步到本地的数据库(这个库可以是个空库,但若不是同库,里面不能有和要同步的表相同的表)

sqlserver 发布与订阅 随笔 第23张

sqlserver 发布与订阅 随笔 第24张

sqlserver 发布与订阅 随笔 第25张

然后没啥重要步骤 下一步默认“连续运行” 下一步默认初始化时间“立即” 下一步 点击完成

sqlserver 发布与订阅 随笔 第26张

右键订阅---查看同步状态:

sqlserver 发布与订阅 随笔 第27张

2.2、推送订阅

sqlserver 发布与订阅 随笔 第28张

推送订阅与请求订阅 下面的选项是不同的,注意

sqlserver 发布与订阅 随笔 第29张

sqlserver 发布与订阅 随笔 第30张

验证订阅是否成功

到发布机上查看发布订阅状态

sqlserver 发布与订阅 随笔 第31张

然后再到订阅机器上就可以看到刚才创建的订阅了

问题记录

同步部分表时,如果同步视图可能会导致同步失败,因为视图中可能有没有同步的表,导致整体同步失败;所以要注意同步视图;

数据库与主机名不一致

 

第一种情况下:

在SQL SERVER里面执行下面语句:

use master

go

select @@servername    --查看数据库里存的主机名

select serverproperty('servername')

使用上面的语句查询服务器的名称和实际计算机的名称,如果两者不一致,就需要修改。

不一致就执行下面的语句:

sp_dropserver 'WIN-43G4DVCEI6E'

go

sp_addserver 'WIN-F5','local'

修改完后,重启SQL SERVER服务。

 

数据库分离报错“该数据库正用于复制,不能删除或不能分离”

解决办法:到该数据库下执行:sp_removedbreplication 'LiaoDB'

LiaoDB为该数据库名;

 

 

发布报错

错误消息

  • 进程无法在“WIN-19G6EV4O1JP”上执行“sp_replcmds”。 (源: MSSQL_REPL,错误号: MSSQL_REPL20011)
    获取帮助: http://help/MSSQL_REPL20011
  • 无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。 (源: MSSQLServer,错误号: 15517)
    获取帮助: http://help/15517

进程无法在“WIN-19G6EV4O1JP”上执行“sp_replcmds”。 (源: MSSQL_REPL,错误号: MSSQL_REPL22037)
获取帮助: http://help/MSSQL_REPL22037

 sqlserver 发布与订阅 随笔 第32张

 

解决办法

https://www.cnblogs.com/gaizai/p/3305879.html

 错误号:15517

进程无法在“WIN-XXX”上执行“sp_replcmds” 无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。 (源: MSSQLServer,错误号: 15517

权限不够,解决方法

  ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [sa]  ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [分发账户]  USE 数据库名  GO  sp_changedbowner '分发账户'
ALTER AUTHORIZATION ON DATABASE::[LiaoDB] TO [sa]

ALTER AUTHORIZATION ON DATABASE::[LiaoDB] TO [fabu]

USE LiaoDB

  GO

  sp_changedbowner 'sa'

 

订阅报错

错误信息

2017-01-04 10:24:44.394 初始化

由于出现操作系统错误 3,进程无法读取文件“E:\data_sync\unc\KC-DB01_KCMAINDB_FABU_KCMAINDB\20170104162525\GetMemberAccou4ce5f23b_109.pre”。

Category:OS

Source: 

Number:  3

Message: 系统找不到指定的路径。

 sqlserver 发布与订阅 随笔 第33张

 

解决办法

主要原因就是订阅服务器访问订阅目录快照"D:\***假装如上报错路径***_109.pre"失败造成的。

解决方式:1

1.将存放快照的目录设置为共享,并设置读取的权限;

1)发布服务器设置:

在发布属性中,点击左侧的快照,在右边页面中的快照文件的位置默认为E:\data_sync\把该文件夹设置为共享,并且在安全项里,设置用户权限(我在系统添加了一个账户,并给这个账户访问该文件夹权限)

2)订阅服务器设置:

在订阅服务器,右击订阅的服务名,选择属性,设置属性参数如下

 a.快照位置修改为备用文件夹

 b.快照文件夹修改为 \\发布服务器的ip\repldata

 sqlserver 发布与订阅 随笔 第34张

 

然后通过命令输入该路径,回车会提示输入账户密码,输入发布机创建的账户,并选择记住密码即可;最后在查看同步状态中 停止同步,然后重新初始化,最后在同步状态中启动同步即可;

该方法参考链接:http://www.cnblogs.com/yf2011/p/5001326.html

 

解决办法2.使用FTP验证传输快照文件,之前步骤都一样只是认证给订阅服务器权限为ftp

参考链接:(测试过不好用,需要自己搭建ftp服务器)

https://help.aliyun.com/knowledge_detail/40772.html?spm=5176.7842542.2.14.Fqg2xX

 

解决方法3.请求订阅改成推送订阅;(该方式不需要订阅机访问发布机权限)

 

参考:

http://www.th7.cn/db/mssql/201802/263764.shtml

https://www.cnblogs.com/TeyGao/p/3521109.html

https://www.cnblogs.com/TeyGao/p/3521109.html

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄