时间:2021-07-01 10:21:17 帮助过:3人阅读
因为用户都是操作视图的,所以视图的定义改为到新的数据库表中,用户操作仍正常,数据同步也正常。对新增加的发布,禁止架构同步,发布数据库增加字段时,不会同步到新订阅表中,但是会同步到原订阅表中。待字段同步完成后,视图定义改回原来的表,此时发布和订阅都有新字段了。而作为中介创建的的发布订阅可以删除了!~
主要步骤如下:
1. 确保发布和订阅数据一致
2. 创建1个可更新订阅发布,只发布1张表 (发布数据库执行)
3. 新发布的“冲突解决策略”: 保留订阅服务器更改(发布属性更改)
4. 新发布的“复制架构更改”: false(发布属性更改)
5. 创建订阅(订阅服务器新的数据库)
6. 更改作业所有者;初始化订阅;等待完成…………
7. 发布更改视图定义(会同步到原订阅中),使用另一个数据库的订阅表(发布数据库执行,注意订阅表权限问题)
8. 确定原订阅的队列已经同步完成
9. 发布数据库中对表增加字段(自动同步到原订阅中,新订阅不同步)
10. 订阅队列如无积累,更改发布视图的定义,使用原来数据库的表(发布数据库执行)
11. 最后删除新创建的发布
--1. 确保发布和订阅数据一致 --2. 创建可更新订阅(筛选)发布,只发布1表(发布数据库执行) --3. 新发布的“冲突解决策略”: 保留订阅服务器更改(发布属性) EXEC sp_changepublication @publication = N'temp02', @property = N'conflict_policy', @value = N'sub wins' EXEC sp_changepublication @publication = N'temp03', @property = N'conflict_policy', @value = N'sub wins' --4. 新发布的“复制架构更改”: false(发布属性) EXEC sp_changepublication @publication = N'temp02', @property = N'replicate_ddl', @value = 0 EXEC sp_changepublication @publication = N'temp03', @property = N'replicate_ddl', @value = 0 --5. 创建订阅(订阅服务器新的数据库) --6. 更改作业所有者;初始化4个订阅;等待完成………… --7. 发布更改视图定义,使用另一个数据库的订阅表(发布数据库执行,注意订阅表权限问题) ALTER VIEW [dbo].[VTestTab] as SELECT Identifier,Name,value,info FROM DemoDB.dbo.TestTab --另一个订阅数据库的表 GO --8. 确定原订阅的队列已经同步完成 --9. 发布数据库中对表增加字段(自动同步到原订阅中) ALTER TABLE dbo.TestTab ADD TEST INT --10.订阅队列无太多,则更改发布视图定义,使用原来数据库的表(发布数据库执行) ALTER VIEW [dbo].[VTestTab] as SELECT Identifier,Name,value,info FROM dbo.TestTab GO --11.删除新创建的发布
测试完成!~个人测试正常,还未应用到生产库中。其中最麻烦的是要初始化表数据,这是主要耗时的。
SQLServer 可更新订阅数据在线架构更改(增加字段)方案
标签: