次の方法で共有


SQL Server 2005/2008复制可恢复被中断的快照传递

背景

在很多情况下,客户可能会有一个很大的数据库被发布,创建这个大数据库的快照通常会是比较困难的。而且,即使被发布数据库的大小在可管理范围之内,网络的速度和可靠性也可能会使问题变得复杂。

从SQL Server 2005之后,快照传递可以从之前的中断恢复了。这对于前面我们描述的那种情况来说,是一个很大的改进。

SQL Server 2005/2008中新的系统表MSsnapshotdeliverprogess,就是用来跟踪快照传递过程的。该表居于订阅数据库,包含了关于哪些快照文件被应用到订阅方的必要细节信息。对于每个成功传递到订阅方的快照文件,都会通过合并或分发代理向该表中添加一行。(关于MSsnapshotdeliverprogress表的说明,请查阅:https://msdn.microsoft.com/en-us/library/ms187398.aspx

工作机制

当中断的快照传递被重新启动时,复制(分发/合并)代理会像往常一样,在所有需要应用到订阅方的快照文件中迭代;但是有了该恢复机制之后,分发/合并代理将会检查Mssnapshotdeliveryprogress表,查看是否有快照文件已经被中断之前的快照分发转递到了订阅方。如果Mssnapshotdeliveryprogress上记录表明某个文件已经被之前中断的快照分发应用了,分发/合并代理将会跳过这个文件。

表结构(参照联机丛书)

名称

数据类型

描述

session_token

nvarchar(260)

标识从中成功传递文件的快照文件夹的路径。 对于使用参数化筛选器的发布,将在此值后追加字符串 dynsnap。

progress_token_hash

int

根据 progress_token 的值生成的哈希值,用于提高给定 progress_token 值的查找效率。

progress_token

nvarchar(500)

标识已成功传递的文件,其值为文件名和路径的组合。

progress_timestamp

datetime

datetime 值,指示成功传递快照文件的时间。

什么是不可恢复的?

以下快照文件是不可恢复的:

  • 索引创建(.idx)文件
  • 声明引用完整性(.dri)文件——仅在合并复制下
  • 应用到只使用DTS订阅方的.bcp文件
  • 任何用户自定义的脚本

如何复位MSsnapshotdeliveryprogress表

在需要重启整个快照过程时,就有复位Mssnapshotdeliveryprogress表的需要了。

我们可以执行订阅数据库上的sp_resetsnapshotdeliveryprogress存储过程来移除Mssnapshotdeliveryprogress表中所有的行来重置快照传递 (仅适用于请求订阅模式)。