一
(一) 在发布服务器中增加或减少表 (注意: 不能有订阅)
企业管理器->工具-> 复制->创建和管理发布->选择发布的数据库->属性和订阅->项目中可以添加表
T-SQL语句可以用下面两个过程:
sp_addarticle, sp_droparticle
(二) 增加或删除一列
企业管理器->工具-> 复制->创建和管理发布->选择发布的数据库->属性和订阅->筛选列
T-SQL语句可以用下面两个过程:
sp_repladdcolumn, sp_repldropcolumn
(三) 改变列的数据类型 int->varchar
这个需要重建发布,可以在企业管理器中用向导重新配置,也可用下面的方法:
1 生成删除和创建发布与订阅的脚本
2 修改创建订阅的存储过程 sp_addsubscription @sync_type=none
注解: @sync_type是订阅同步类型. 可以是 automatic 或 none. 默认设置为 automatic.
如果是 automatic,则表示首先将已发布表的架构和初始数据传输到订阅服务器.
如果是 none,则假定订阅服务器已有已发布表的架构和初始数据.始终传输系统表和数据
3 语句改变列的数据类型
4 停止各种活动后运行脚本重建发布
(四) 以下改变,需要重新运行快照及重新初始化订阅
筛选
订阅服务器上表的拥有者/名称
调用格式
快照选择项
二 如何复制标识列
(一) 把标识列的属性改为: 标识 是(不用于复制)
(二) 在发布方和订阅方设置标识的范围
1 队列更新支持自动标识范围
2 双向事务复制要求手动设置标识的范围
(1)用DBCC CHECKIDENT RESEED在发布方和订阅方设置标识的范围
用法
DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value)
当前值设置为 new_reseed_value,如果自创建表后没有将行插入该表,
则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识.
否则,下一个插入的行将使用 new_reseed_value + 1.
如果 new_reseed_value 的值小于标识列中的最大值,以后引用该表时将产生 2627 号错误信息。
比如设定id要从1000开始: DBCC CHECKIDENT ('table_name', RESEED, 1000)
(2)你必须用手动方式在订阅服务器设置标识和不用于复制属性
订阅服务器一般地说是瓶颈
100-1000 cmds/sec吞吐量
按如下假设延迟量应该是几秒钟:
Cmds/sec < 最大吞吐量
事务量小
要使延迟量减到最小
设分发代理程序和日志读取器代理程序的PollingInterval 参数为1秒
发布
用默认调用格式
写存储过程来完成批处理作业
把存储过程的运行作为项目来发布(很大的增进!)
建立多个发布和用独立分发代理程序--但发布间不要有事务关联
订阅器
减少分发代理程序与用户和应用程序间的争夺
去掉没有必要的索引
复制标识列
设置列的 NFR (Not For Replication) 属性
在发布方和订阅方设置标识的范围
队列更新支持自动标识范围
双向事务复制要求手动设置标识的范围
用 DBCC CHECKIDENT RESEED 来在发布方和订阅方设置标识的范围
你必须用手动方式在订阅服务器设置标识和NFR属性
三 尽量减少代理程序的重新启动
(一)因为网络错误,代理程序在10次失败的尝试后会停下
解决方法:在代理程序作业中加一步骤来继续再试
(二)数据的一致性错误,代理程序在遇到重复或遗漏行时会停下
解决方法:企业管理器->工具->复制->配置发布订阅服务器和分发服务器的属性
->代理程序配置->遇到数据一致性错误时继续
更改初始发布设置