大致流程:
1、分发服务器的快照代理作业,将发布服务器的发布库生成快照(快照生成时,会对发布库加锁,是不是?),并将快照保存在分发服务器所指定的磁盘位置
2、分发服务器的日志读取器代理作业,将发布服务器的发布库的事务日志读取出来,保存在分发服务器上
3、订阅服务器用第1步的快照,去初始化自己
4、分发服务器的分发作业,将第2步所获得的事务日志,分发给每一个订阅服务器
流程理解正确吗?存在疑问:
1、是不是分发库记录了每个快照的日志点啊???否则你用任何一个快照去初始化订阅库,分发怎么知道从哪个事务日志开始分发给从库啊???
2、快照生成时,会对发布库加锁,是不是?
3、用主库的快照,去初始化从库的时候。推送模式,快照保存在分发服务器本地磁盘,没事的。请求模式,必须放在从库能访问的位置(ftp,或共享目录,或copy到从库服务器本地磁盘)。是不是与分发代理(分发代理程序在分发服务器上运行,即为推模式,在订阅服务器运行,即为拉模式)位置有关?
1、分发服务器的快照代理作业,将发布服务器的发布库生成快照(快照生成时,会对发布库加锁,是不是?),并将快照保存在分发服务器所指定的磁盘位置
2、分发服务器的日志读取器代理作业,将发布服务器的发布库的事务日志读取出来,保存在分发服务器上
3、订阅服务器用第1步的快照,去初始化自己
4、分发服务器的分发作业,将第2步所获得的事务日志,分发给每一个订阅服务器
流程理解正确吗?存在疑问:
1、是不是分发库记录了每个快照的日志点啊???否则你用任何一个快照去初始化订阅库,分发怎么知道从哪个事务日志开始分发给从库啊???
2、快照生成时,会对发布库加锁,是不是?
3、用主库的快照,去初始化从库的时候。推送模式,快照保存在分发服务器本地磁盘,没事的。请求模式,必须放在从库能访问的位置(ftp,或共享目录,或copy到从库服务器本地磁盘)。是不是与分发代理(分发代理程序在分发服务器上运行,即为推模式,在订阅服务器运行,即为拉模式)位置有关?
解决方案 »
- 这句sql语句怎么错了,在线等答案
- SQL SERVER 数据库 如何全文查找全部用户表的内容
- 三表关联数据更新
- 求解:sqlserver2005集群下复制,发布执行时说系统用户名权限不够
- 关于两台机器数据库备份的问题,跟大家讨论一下!
- sql 计算字段问题
- alter table TEST alter column aaa varchar(2) bbb varchar(2)
- 新手求一个简单的的表达式(在线等,马上结贴送分)
- sql server 是一个傻b数据库?
- sql7.0+vb如何找到满足条件的第一条记录(有多条满足记录)并将指针移到此记录上(用ado)
- 能否有这样的查询?
- 有谁能看懂
1.初始化。快照生成初始阶段使用锁,同时记录日志起始点。保存快照文件。
2.日志读取器监控数据变化。
3.分发代理,应用1中的快照文件到订阅服务器;在订阅服务器上应该发布服务器的增量更改。
#2.疑问解答:
#1.是的,记录了日志点。记录在这个字段:distribution.dbo.MSdistribution_history.timestamp
#2.会在快照初始化阶段加锁,同时记录日志起始点。(快照复制是整个生成快照阶段都加锁)
#3.推送订阅:快照代理和分发代理都运行在分发服务器,所以快照文件夹保存在分发服务器上,两个代理访问一般没问题;请求订阅,快照代理运行在分发服务器,分发代理运行在订阅服务器,所以分发代理要想访问得对分发服务器上的快照文件夹有远程访问权限才行。
SELECT * FROM dbo.MSrepl_commands --command字段是具体命令的二进制代码,用16进制表示
SELECT * FROM dbo.MSdistribution_history --每个agent_id最大timestamp的记录的xact_seqno就是当前已经进行到的复制点
谢谢你,但我不明白xact是什么意思,能解答吗?
#2.每个同步事务所对应的同步命令(快照初始化和日志读取器产生的同步命令[其实就是带数据的INSERT,UPDATE,DELETE语句]),都会存储在MSrepl_commands表;
#3.而MSdistribution_history表记录每个分发代理最后成功同步的那个xact_seqno。
请参考复制相关的所有表:
http://technet.microsoft.com/zh-cn/library/ms179855%28v=sql.90%29.aspx
发布时,所有表项目的属性,是什么意思啊?是不是指,复制到从库时,勾选的(外键约束、触发器...)都会自动复制过去?我将前10项都勾选了,但确定后,回头来看,又是原状(未勾选状态),反反复复试过很多次,msdn也没说这个地方有何作用?
我遇到一个新问题了。
A(发布) -> B(分发+订阅),
在没有删除复制关系之前,B重装后(旧的distribute库没有了),A上的发布都删除不了?提示:未将‘发布A’定义为‘B’的订阅服务器。
无法更新分发数据库订阅表。无法更改订阅状态。我遇到了新问题,和这个类似http://bbs.csdn.net/topics/330160766
怎么办?
#6楼没有什么好办法。只能手动清除发布服务器上相关的复制系统表数据。楼主可创建一个复制法,用sql server profile工具抓一下相关存储过程,再看一下都涉及到哪些系统表,清除一下里面的数据。这些系统表,一般都存储在发布数据库的系统表下面,参考:
TRUNCATE TABLE dbo.syspublications --发布
TRUNCATE TABLE dbo.sysarticles --发布项目
TRUNCATE TABLE dbo.sysschemaarticles --纯架构发布项目
TRUNCATE TABLE dbo.sysarticlecolumns --发布列
TRUNCATE TABLE dbo.syssubscriptions --订阅项目
TRUNCATE TABLE dbo.systranschemas --项目架构更改
GOSELECT TOP 100
CONVERT(nvarchar(1024),
CASE
WHEN type = 30 THEN SUBSTRING(command, 17, 1024)
ELSE command
END)
FROM MSrepl_commands