【问题标题】:Incremental backup of FILESTREAM data?FILESTREAM 数据的增量备份?
【发布时间】:2013-11-06 10:02:52
【问题描述】:

正在运行SQL Server 2012。考虑下面的数据库。

[Document] 表包含数以千计的大文件,并且已经变成了大约 100 GB。数据库必须定期备份。

现在,假设我运行了一个完整备份我的数据库。然后我添加 一个 1 MB 的文档。当安排下一次备份时,将创建一个新的 100+ GB 备份文件。显然,这不是很划算。据我了解,SQL Server 不支持开箱即用的增量备份,但我觉得应该可以手动执行此操作。特别是对于FILESTREAM 数据,数据驻留在文件系统中。

问:如何对 FILESTREAM 数据进行增量备份?

CREATE DATABASE [FSTest]
GO

USE [FSTest]
GO

ALTER DATABASE [FSTest] ADD FILEGROUP [Document_FileStream] CONTAINS FILESTREAM
GO

ALTER DATABASE [FSTest] ADD FILE
    (NAME = 'Document_FileStream', FILENAME = 'C:\FSTest')
    TO FILEGROUP [Document_FileStream]
GO

CREATE TABLE [dbo].[Document](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Data] [varbinary](max) FILESTREAM NOT NULL,
    [Guid] [uniqueidentifier] ROWGUIDCOL DEFAULT NEWSEQUENTIALID() NOT NULL UNIQUE,
CONSTRAINT [PK_Document] PRIMARY KEY CLUSTERED ([ID] ASC)) ON [PRIMARY]
GO

【问题讨论】:

    标签: sql-server backup filestream


    【解决方案1】:

    听起来您每次进行备份时都会进行完整备份。在我的环境中,我通常每周进行一次完整备份,其他天进行差异备份。差异备份备份自上次完整备份以来的更改(而不是像某些人认为的那样,自上次差异备份!)。为了进行差异备份,您只需将with differential 子句添加到您的正常备份中。所以像:

    backup [myDB] to disk 'c:\temp\myDB.bak' with init --full backup
    backup [myDB] to disk 'c:\temp\myDB_diff.bak' with init, differential --diff backup
    

    我应该注意,为了在这种情况下恢复,您需要使用with norecovery 子句恢复完整备份,然后恢复您的差异。所以像:

    restore [myDB] from disk 'c:\temp\myDB.bak' with norecovery --full backup
    restore [myDB] from disk 'c:\temp\myDB_diff.bak' with recovery --diff backup
    

    【讨论】:

    • 谢谢。增量备份和差异备份有什么区别?
    • 大多数人认为的“增量”是“自上次增量备份以来发生的变化”。在 SQL Server 中,该功能更多地由事务日志备份提供。差异备份是“自上次完整备份以来发生的变化”。因此,如果您采用昨天和今天的差异,今天的将包括昨天和今天的所有变化。 HTH。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多