sqlserver 发布与订阅

环境:windowsserver2012+ sqlserver2014

发布机       192.168.1.43    KC-DB01      

订阅机       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的发布完成

验证发布正确性

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

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

2、订阅

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

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

2.1、请求订阅

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

远程登录192.168.1.91机器

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

 

 

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

 

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

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

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

2.2、推送订阅

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

验证订阅是否成功

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

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

问题记录

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

数据库与主机名不一致

第一种情况下:

在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

 

解决办法

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: 系统找不到指定的路径。

 

解决办法

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

解决方式:1

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

1)发布服务器设置:

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

2)订阅服务器设置:

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

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

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

 

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

该方法参考链接: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

猜你喜欢

转载自www.cnblogs.com/xiaoyou2018/p/10817748.html