sqlserver对等发布,将两个或多个数据库进行实施同步,主要功能:
比如 db_a 和 db_b ,
1、db_a上的crud,db_b也会同步操作,反之亦然;
2、其中一个数据库当机重启以后,也能同步另一个数据库在当机期间的操作。
以下是准备工作,请严格参考每一个步骤:
1、两台服务器:HK1 和 HK2,必须在同一个局域网中。
1)我是通过一个电脑上的两个虚拟机来实现的,系统是 win7 64,虚拟机中,网络连接模式需要设置为桥接模式
2)HK1 和 HK2 除了相互能ping通,还必须保证在网络中可以看到相互的计算机名。
3) 如非必要,不建议更改计算机名。
2、HK1 和 HK2 分别设置管理员账户密码,建议使用系统默认的 administrator 帐号。
1)非必要,不建议使用其他的管理员账户;
2)给 administrator 设置密码后,如有需要,可以设置为开机自动登录(首先同时按下“Windows+R”快捷键调出运行命令窗口,然后在窗口中输入“control userpasswords2”后回车,取消勾选 必须使用账户密码登录系统,点应用,在弹出的对话框里输入默认的账户和密码即可。)
3)建议关闭账户密码策略(非必须),操作位置如下图。
3、HK1 和 HK2 分别安装sqlserver(对应 sql_a 和 sql_b),版本要求sqlserver2005企业版以上的版本,我用的是 2014企业版,如果版本不支持,在发布数据库的时候,会有提示。
1)安装的时候,登录模式选择混合模式,并给sa设置一个至少6位的密码,建议给 sql_a 和 sql_b 设置相同的 sa 密码。
2)如果修改过计算机名,请确认 安装后的 sqlserver,主机服务器名,是否和当前的计算机名一致。
select @@servername 查看服务器名是否和现在服务器名一致
不一致执行:
sp_dropserver '旧服务器名'
sp_addserver '新服务器名','LOCAL'
表结构必须相同,数据也必须相同,否则在对等同步时,主键会出现错误导致同步失败。
1)数据表必须要有主键
如果数据表中没有主键,如果没有的话,可以通过以下命令,批量生成 设置主键 的脚本命令:
SELECT 'alter table ' + TABLE_NAME + ' add constraint PK_'+TABLE_NAME +'_'+ COLUMN_NAME +
' primary key ('+COLUMN_NAME+') ;'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='keyId' order by TABLE_NAME;
生成以后,复制粘贴再执行。
2)附加数据库时,请修改 被附加文件 的操作权限,增加 everyone ,完全控制
3)如果是附加的数据库,请检查数据库 dbo 的登录名是否是sa,如下图:
如果不是sa,使用以下脚本修改:
USE [CDYTSS_Y]
GO
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
GO
5、开启 sql server 代理
1)打开 sql server 配置管理器,选中 sql server 服务,双击右侧 sql server 代理,选择 开始设置过密码 的管理员账户,并输入密码,点应用,弹出窗口别关,看下一步
2)打开弹出窗口的第二个选项卡,服务,把启动模式改为自动:
请注意,以上操作,在 HK1 和 HK2,或者在 sql_a 和 sql_b ,都需要进行操作,并且是相同的操作。
准备工作已完成,下一节详细介绍如何配置。