这是一篇针对新人的知识普及文章,老人慎入!
在快照发布和事务发布中,SQL Server需要使用快照来将数据库某一时间点的数据传递给订阅,快照使用BCP的机制。
首先我们需要查看和设置快照的生成目录,在发布的属性里可以看到:
订阅方式有两种:请求订阅和推送订阅,两种订阅方式在初始化订阅和同步数据的运作方式不一样。
推送相对简单,订阅作业运行在分发服务器上,在快照生成后,SQL Server会自动访问快照并将BCP命令传递到订阅数据库上,无须额外设置。
推送订阅的属性:
请求订阅的订阅作业运行在订阅服务器上,快照生成后,需要设置订阅属性“快照位置”来指明如何获取快照数据
请求订阅的属性:
快照的位置有三种选项:
1.默认位置
2.备用文件夹
3.FTP 文件夹
要生成快照,选中发布,点击“查看快照代理状态”,然后点击“启动”,等待快照生产
快照生成在分发服务器上,在快照的目录下可以找到快照(快照目录\unc\[InstanceName_[ReplicationDatabaseName]_[ReplicationName]])
--=========================================================
使用"默认位置"来初始化
默认位置指的是快照生成的位置,以下情况下可以使用
1>如果订阅服务器和分发服务服务器是同一台机器
2>快照目录是共享目录,运行代理服务的账户对该共享目录有访问权限
如果满足以上两个条件之一,不需要额外设置便可以完成订阅初始化。
--=========================================================
使用“备用文件夹”来初始化订阅
将生成的快照拷贝到订阅服务器上,拷贝时利用文件夹的名称来区别是那个发布生成的订阅,在使用次级文件夹下的名称来确定快照生成的时间
如果SQLVM6$SQL2_REPDB2_REPDB2_TB1\20140122182502代表
服务器:SQLVM6
实例:SQL2
数据库:REPDB2
发布:REPDB2_TB1
快照时间:2014-01-22 18:25:02
仅拷贝需要的快照,这样可以提高效率
将快照文件拷贝到订阅服务器文件夹下,需主要保留文件夹的层次,SQLVM6$SQL2_REPDB2_REPDB2_TB1\20140122182502 这两层的目录名不能改变,如我将文件拷贝至订阅服务器上的“E:\unc\SQLVM6$SQL2_REPDB2_REPDB2_TB1\20140122182502”目录下(unc目录不可少),在将订阅属性“快照文件夹”设置为"E:\"
注意:SQL SEVER在查找文件时会在快照文件夹的目录下加一层目录"unc",因此只需要设置到"unc"的上级目录就可以
如果快照目录设置错误的话,我们可以可以查看订阅作业的历史记录来获得提示,如我将目录设置为“E:\unc”后的提示错误:
按照提示修改目录结构便可
在目录设置完成后,重启订阅作业,便可以开始初始化。
--==========================================================================
使用“FTP 文件夹”来初始化订阅
该方式需要在分发服务器上设置FTP来使得订阅端可以访问,使用"FTP"来传递快照时,会在快照文件的默认文件夹下生成一个ftp的目录(与unc目录同级)。
配置顺序:
1>在分发服务器上搭建FTP,并将FTP的登录用户的根目录指向快照目录(ftp目录和unc目录的上一级)
2>配置发布属性
如我的FTP路径为:ftp://192.168.1.27:21022/
则配置如下图:
SQL SERVER 访问ftp://192.168.1.27:21022/ftp/SQLVM6$SQL2_REPDB2_REPDB2-TB1/20140122202357/下的BCP文件
--==========================================================================
总结:
1>使用"默认位置"来初始化,简单易用,无须额外配置,但是适用场景有限。
2>使用"备用文件夹"来初始化,略微复杂,但可操作行强,可以使用多种方式将快照复制到订阅服务器,缺点是以后每次初始化都需要拷贝。
3>使用"FTP 文件夹"来初始化,相对复杂,如果FTP 用户的根目录配置不当,就会失败,优点是配置成功后,以后每次重新无须再做修改。
4>由于快照使用BCP文件来存放某一点的数据,因此数据较大时,快照文件会特别大,使用FTP方式不能压缩快照文件,因此会耗时较长,推荐将快照压缩后传递到订阅服务器,再使用"备用文件夹"来初始化。