SQL 编写器服务
适用于 SQL Server - 仅限 Windows
SQL 编写器服务通过卷影复制服务框架,提供用来备份和还原 SQL Server 的附加功能。
SQL 编写器服务是自动安装的。 在卷影复制服务 (VSS) 应用程序请求备份或还原时,必须运行该服务。 若要配置该服务,请使用 Microsoft Windows 服务小程序。 SQL 编写器服务可安装在所有 Windows 操作系统上。
目的
数据库引擎可锁定数据库文件并具有独占访问权限。 如果 SQL 编写器服务没有运行,Windows 中运行的备份程序将不能访问数据文件,而且必须使用本机 SQL Server 备份功能才能进行备份。 使用 SQL 编写器服务,可以使 Windows 备份程序在 SQL Server 正在运行并维护这些文件的排他锁时复制 SQL Server 数据库文件。
卷影复制服务
VSS 是实现某一框架的一组 COM API,能够在应用程序继续写入卷的同时进行卷备份。 VSS 可帮助在将数据写入磁盘的用户应用程序(编写器)和备份该数据的应用程序(请求程序)之间协同工作。
VSS 可捕获和复制正在运行的系统(尤其是服务器)的稳定映像以进行备份,而且不会过度降低它们所提供服务的性能和稳定性。 有关 VSS 的详细信息,请参阅 Windows 文档。
备注
若要使用 VSS 来备份托管基本可用性组的虚拟机,且虚拟机当前托管的数据库处于次要状态,那么自 SQL Server 2016 (13.x) SP2 CU2 和 SQL Server 2017 (14.x) CU9 起,这些数据库不会与虚拟机一起备份。 这是因为,基本可用性组不支持在次要副本上备份数据库。 如果低于 SQL Server 的这些版本,不仅无法备份,还会看到错误消息。
虚拟备份设备接口 (VDI)
SQL Server 提供称为虚拟备份设备接口 (VDI) 的 API,使独立软件供应商能够将 SQL Server 集成到他们的备份和还原产品中。 这些 API 能够提供非常高的可靠性和极佳的性能,并支持 SQL Server 的所有备份与还原功能,包括所有的热备份和快照备份功能。 如果第三方供应商应用程序请求快照 (VSS) 备份,则 SQL 编写器服务将调入 VDI API 函数以执行实际备份。 VDI API 独立于 VSS,并经常用于不使用 VSS API 的软件解决方案中。
权限
SQL 编写器服务必须以 Local System 帐户运行。 SQL 编写器服务使用 NT Service\SQLWriter 登录以连接到 SQL Server。 使用 NT Service\SQLWriter 登录可使 SQL 编写器进程以较低的特权等级(指定为 no login的帐户)运行,以提高安全性。 如果禁用 SQL 编写器服务,则依赖 VSS 快照的所有实用工具可能会中断,并且获得的可能是不一致的数据库备份。 示例包括 System Center Data Protection Manager 以及其他一些第三方产品。
如果运行 SQL Server的系统及主机系统(在运行虚拟机的情况下)均无需使用 Transact-SQL 以外的任何备份,则可安全地禁用 SQL 编写器服务并移除其登录项。 SQL 编写器服务可能会被系统或卷级备份(无论该备份是否直接基于快照)调用。 某些系统备份产品使用 VSS 来避免被已打开或已锁定的文件阻止访问。 SQL 编写器服务需要 SQL Server 中的 sysadmin 权限,这是因为,在活动期间,它会简单地冻结 SQL Server 实例的所有 I/O。
功能
SQL 编写器支持:
- 完整数据库备份和还原,包括全文目录
- 差异备份和还原
- 移动式还原
- 数据库重命名
- 仅复制备份
- 自动恢复数据库快照
SQL 编写器不支持:
- 日志备份
- 文件和文件组备份
- 页面还原
服务升级和维护
SQL 编写器服务是独立于 SQL Server 数据库引擎的服务,由不同版本的 SQL Server 和同一台服务器上的不同 SQL Server 实例共同使用。 SQL 编写器服务文件随附在 SQL Server 安装包中,并标有与所随附 SQL Server 引擎相同的版本号。
如果服务器上安装了 SQL Server 的新实例或现有实例已升级,且安装或升级的实例的版本号高于服务器上现有 SQL 编写器服务的版本号,这个文件就会替换安装包中的现有文件。
如果 SQL 编写器服务已通过 Service Pack 或累积更新进行更新,且安装的是新版 SQL Server,便可将新版 SQL 编写器服务替换为旧版服务,前提是安装文件的主版本号更高。 例如,SQL 编写器服务在 SQL Server 2016 (13.x) SP2 CU2 中进行了更新。 如果此实例升级到 SQL Server 2017 (14.x) RTM,那么已更新的 SQL 编写器服务就会替换为旧版服务。 在此示例中,必须将最新 CU 应用于新实例,才能获取新版 SQL 编写器服务。