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

问题描述 投票:0回答:2

我有来自数据库的 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

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

sql-server sql-server-2008-r2 sqlfilestream
2个回答
1
投票

据我所知,无法通过附加来做到这一点(因为附加要求所有文件都存在)。另请查看这个答案

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

示例命令:

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

0
投票

这个问题有没有解决办法?我有 .mdf 和 .ldf 文件,但丢失了 filestream.hdr 并且无法重新附加数据库。我能做什么?

© www.soinside.com 2019 - 2024. All rights reserved.