sql发布订阅
1、事务发布,效率还不错,对网络稳定性要求较高,带宽使用较少
2、快照发布,其实相当于给现在的数据拍了张照片,然后拷贝走,再在其他服务器上恢复,适合使用移动硬盘拷贝
3、具有可更新订阅的事务发布,效率最高,对网络稳定性要求较高,带宽使用较少。
4、合并发布,性能在1和2的之间
② sqlserver2008在创建发布订阅的时候,执行间隔为什么最小10秒
发布订阅默认最小时间间隔就是10秒,即使你选择的时间是实时,但其实也不会是实时。你可以将发布订阅看成是由sqlserver建立的一系列job,在这些job里自动完成你需要的数据同步工作。想要真正理解这个10秒间隔,理解整个发布订阅的数据流程,你就会非常清楚。
首先发布库做自己的事务,完成后写到自己的日志;
然后在分发服务器上有个日志读取器,它会隔一会就来读取一下有没有新日志,有就进行分发工作,没有就继续等待;
订阅收到日志,然后进行重建工作,让订阅端也能看到对应的数据。
可能你会觉得为什么日志读取器不一直standby,因为这需要成本,而数据库是非常在意成本的,所以不会一直读取,而是隔一个很小的间隔读取一次。
③ SQL数据库自带的(发布,订阅)数据同步问题
回答1:再次同步只会同步变化的数据。因此不必担心数据量大的问题
回答2:可以测试一次发布/订阅所需要的总体时间,建议同步时间比这个总时间略大
回答3:发布订阅无法做到实时同步。如需实时同步,可尝试做日志传送、镜像,这两种可以达到用户感官上的实时同步
④ sql srver怎么取消发布和订阅
以下方法均为
事务复制
--PUSH方式
1、删除单个的发布
:
复制-->
本地发布-->
右击-->
删除,如下图,然后再把对应的知裂订阅服务器删除掉,或者等待执行:sp_MSdistribution_cleanup
的JOB(分发清除:
distribution)默认订阅72小时失效之后自动删除。
2、删除全部的发布:
复制-->
右击
-->
禁用发布和分发,如下图,这个会同时的把分发服务器的配置清掉,需要重新配置的哦。。
其实只是谨伏执行了一个脚本
use
[master]
exec
sp_dropdistributor
@no_checks
=
1
GO
/*
[
@no_checks=]
no_checks
指示在删除分发服务器之前是否检查有无依赖对象。no_checks
的数据类型为
bit,默认值为
0。
如果为
0,则
sp_dropdistributor
将执搭晌闭行检查,以确保除分发服务器以外的所有发布和分发对象都已删除。
如果为
1,则
sp_dropdistributor
将在卸载分发服务器之前删除所有发布和分发对象。
[
@ignore_distributor=]
ignore_distributor
指示是否在未连接到分发服务器的情况下执行此存储过程。ignore_distributor
的数据类型为
bit,默认值为
0。
如果为
0,则
sp_dropdistributor
将连接到分发服务器,并删除所有复制对象。
如果
sp_dropdistributor
无法连接到分发服务器,则存储过程将失败。
如果为
1,则不与分发服务器建立连接,并且不删除复制对象。
如果分发服务器正在卸载或持久脱机,才使用它。
直到分发服务器在未来某个时间重新安装之后,才会删除分发服务器中的该发布服务器的对象。
*/
--注意:
sp_dropdistributor
用于所有类型的复制。
不过不是建议直接的界面操作。
3、对于某些时候可能删除不掉,这个时候可以直接trace一下,然后把进程杀掉
4、或者对于附加的数据库不注意可能会出现发布的错误,你也删除不掉。会报下面的错误。
无法作为数据库主体执行,因为主体
"dbo"
不存在、无法模拟这种类型的主体,或您没有所需的权限。
已将数据库上下文更改为
'AdventureWorks2008'。
(Microsoft
SQL
Server,错误:
15517)
这个时候可以查一下数据库属性->文件->所有者如果没有话,填个sa再试一次就可以。