我面临上述主题的问题。是否可以仅从 Filestream 数据库中进行数据备份并恢复该备份?
场景:我们将产品图像存储到数据库中,数据库大小现在超过 70 GB。因此,很难每天进行同样的备份,而且也很耗时。我们提供了 BCP 备份工具,但我们不会继续使用相同的工具,因为有时我们在恢复 BCP 备份时注意到表中缺少一些行。同样是客户端,或者我们不关心图像数据,如果发生了什么,那么如果我们只是在启用新文件流的情况下恢复数据备份,我们将再次上传图像文件。
我做过的研发:
1)方法1:
我已经使用以下查询进行了备份,我认为它只会给我数据。
BACKUP DATABASE [DBName]
FILEGROUP = N'PRIMARY' TO DISK = N'E:\SendReceiveData\Test.bak'
WITH NOFORMAT, NOINIT,
NAME = N'DBName-Full Filegroup Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
现在,我想使用以下查询在其他位置恢复相同的备份。(使用 Management Studio 我无法恢复数据库)
RESTORE DATABASE [RestoreDBName]
FILE = N'DBName'
FROM DISK = N'E:\SendReceiveData\Test.bak'
WITH FILE = 1,
MOVE N'DBName' TO N'D:\MyDatabases\RestoreDBName.mdf',
MOVE N'DBName_log' TO N'D:\MyDatabases\RestoreDBName_0.ldf',
NOUNLOAD, REPLACE, STATS = 10
但是当我检查文件组时 FileStream 组已经创建,即使我在恢复查询时没有提到。此外,如果我想删除文件流表,它不允许删除并给我错误。如果我直接尝试删除 FilestreamGroup,那么也会给我错误。我想如果能够删除文件流表和文件组,那么我可以新创建它们并将使用新的文件流,但我不能这样做。
2)方法2:
我如上所示备份数据库。但是在恢复时,我首先使用 Filestream 创建空白数据库并尝试恢复数据库,但这也给了我错误。
3)方法3:
我认为 Filestream 表属于 Primary FileGroup,这就是它包含文件流组的原因。所以我创建了一个临时数据库,其中一个表是我用主文件组创建的,图像表是我用 ImageData 文件组创建的。然后只备份主文件组,并假设如果我恢复数据库,图像表将不会出现。但仍然图像表显示在恢复数据库中。如果我看到文件组,则所有 4 个文件组(Primary、ImageData、Log 和 Filestream)都可用。
那么你能指导我哪里错了或者不可能吗?我正在使用 SQL Server 2008。