数据库文件初始化

初始化数据和日志文件时会覆盖以前删除的文件遗留在磁盘上的任何现有数据。执行下列操作之一时,应首先通过用零填充数据和日志文件来初始化这些文件:

  • 创建数据库。

  • 向现有数据库中添加文件、日志或数据。

  • 增大现有文件的大小(包括自动增长操作)。

  • 还原数据库或文件组。

文件初始化会导致这些操作花费更多时间。但是,首次将数据写入文件后,操作系统就不必用零来填充文件。

即时文件初始化

在 SQL Server 中,可以在瞬间对数据文件进行初始化。这样可以快速执行上述文件操作。即时文件初始化将回收已使用的磁盘空间而不使用零来填充该空间。而在向文件中写入新数据时,磁盘内容将被覆盖。日志文件不能立即初始化。

注意注意

只有在 MicrosoftWindows XP Professional、Windows Server 2003 或更高版本中才可以使用即时文件初始化功能。

即时文件初始化功能仅在向 SQL Server (MSSQLSERVER) 服务帐户授予了 SE_MANAGE_VOLUME_NAME 之后才可用。Windows Administrator 组的成员拥有此权限,并可以通过将其他用户添加到执行卷维护任务安全策略中来为其授予此权限。有关分配用户权限的详细信息,请参阅 Windows 文档。

安全注意事项

因为只有在文件中写入新数据时才覆盖删除的磁盘内容,因此,未授权的主体可能会访问删除的内容。当数据库文件附加到 SQL Server 实例之后,可以通过文件中的任意访问控制列表 (DACL) 来降低此信息泄露的风险。此 DACL 仅允许 SQL Server 服务帐户和本地管理员访问文件。但是,当文件分离以后,可以由不具有 SE_MANAGE_VOLUME_NAME 的用户或服务访问。在备份数据库时,也存在类似风险。如果备份文件未使用适当的 DACL 保护,则未授权的用户或服务将可以使用删除的内容。

如果删除的内容存在泄漏的风险,则应同时执行下面的两种操作或只执行其中之一:

  • 请始终确保所有分离的数据文件和备份文件都具有限制性的 DACL。

  • 通过从 SQL Server 服务帐户中撤消 SE_MANAGE_VOLUME_NAME 来禁用 SQL Server 实例的即时文件初始化功能。

注意注意

禁用即时文件初始化功能只会影响在用户权限撤消之后创建的文件或其大小增大的文件。