我有来自数据库的 mdf 和 ldf 文件,原则上也有文件流数据。
由于我需要调试仅与关系表相关的问题,并且文件流文件夹太大,我想知道是否有一种方法可以仅从 mdf 和 ldf 附加数据库并以某种方式跳过文件流
这是一个典型的附加查询,取自这个问题:
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
由于我没有文件流数据,我该怎么办?
据我所知,无法通过附加来做到这一点(因为附加要求所有文件都存在)。另请查看这个答案。
不过还有其他选择。如果您的数据库处于完全恢复模式,您可以在没有文件流组的情况下进行部分备份。然后,您可以从该备份进行恢复,任何丢失的文件组都将处于脱机模式并且无法访问。任何尝试使用丢失文件组中的对象的查询都将失败。
示例命令:
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
这个问题有没有解决办法?我有 .mdf 和 .ldf 文件,但丢失了 filestream.hdr 并且无法重新附加数据库。我能做什么?