如何绕过文件流信息附加mdf文件?

时间:2017-09-19 12:11:13

标签: sql-server sql-server-2008-r2 sqlfilestream

我有一个数据库中的mdf和ldf文件,原则上也有文件流数据。

由于我需要调试一个只与关系表相关的问题而且文件流文件夹太大我想知道是否有办法只从mdf和ldf附加数据库并以某种方式跳过文件流

这是从this question获取的典型附加查询:

USE [master]
GO
CREATE DATABASE [AdventureWorks2008] ON 
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLTRAININGKIT\MSSQL\DATA\AdventureWorks2008_Data.mdf' ),
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLTRAININGKIT\MSSQL\DATA\AdventureWorks2008_Log.ldf' ),
FILEGROUP [PRIMARY] CONTAINS FILESTREAM DEFAULT 
( NAME = N'Documents', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLTRAININGKIT\MSSQL\DATA\Documents' )
FOR ATTACH
GO

由于我没有文件流数据,我该怎么办?

1 个答案:

答案 0 :(得分:1)

据我所知,附加无法做到这一点(因为附加需要所有文件都存在)。另请查看this answer

虽然有另类选择。如果数据库处于完全恢复模式,则可以在不使用文件流组的情况下进行部分备份。然后,您可以从该备份还原,任何丢失的文件组将处于脱机模式且无法访问。任何试图使用丢失文件组中的对象的查询都将失败。

示例命令:

BACKUP DATABASE [Demo] 
FILEGROUP = N'PRIMARY'
TO DISK = N'.\MSSQL\Backup\Demo.bak'
WITH  COPY_ONLY, NOFORMAT, NOINIT,  NAME = N'Demo-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

RESTORE DATABASE [OtherDatabase] 
FILE = N'Demo' FROM  DISK = N'.\MSSQL\Backup\Demo.bak' WITH  FILE = 1,  
MOVE N'Demo' TO N'.\MSSQL\DATA\OtherDatabase.mdf', 
MOVE N'Demo_log' TO N'.\MSSQL\DATA\OtherDatabase_Log.ldf',
MOVE N'FStream' TO N'.\MSSQL\DATA\OtherDatabase_Documents',  NOUNLOAD,  STATS = 10
GO

编辑:

有关备份和还原文件/文件组的一些其他有用链接:

编辑2:

如果您的数据库处于简单恢复模式,并且您只想备份特定文件组,则必须使所有其他文件组只读。然后,您可以使用READ_WRITE_FILEGROUPS仅备份R / W文件组。

示例命令:

USE [master]
GO
ALTER DATABASE [Demo] MODIFY FILEGROUP [FilestreamGroup] READONLY
GO

BACKUP DATABASE [Demo] READ_WRITE_FILEGROUPS TO  DISK = N'.\MSSQL\Backup\EFCoreDemo.bak'
WITH COPY_ONLY, NOFORMAT, NOINIT,  NAME = N'Demo-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

ALTER DATABASE [Demo] MODIFY FILEGROUP [FilestreamGroup] READ_WRITE
GO

RESTORE DATABASE [OtherDatabase]
FILE = N'Demo' FROM  DISK = N'.\MSSQL\Backup\EFCoreDemo.bak' WITH FILE = 1,  
MOVE N'Demo' TO N'.\MSSQL\DATA\OtherDatabase.mdf', 
MOVE N'Demo_log' TO N'.\MSSQL\DATA\OtherDatabase_Log.ldf',
MOVE N'FStream' TO N'.\MSSQL\DATA\OtherDatabase_Documents',  NOUNLOAD,  STATS = 10
GO