2017-09-19 14 views
1

私は原則としてファイルストリームデータも持っているデータベースからmdfとldfファイルを持っています。ファイルストリーム情報をバイパスしてmdfファイルを添付する方法は?

私は唯一のリレーショナル表に関連する問題をデバッグする必要があるとFileStreamフォルダは、私が唯一のmdfファイルとLDFからDBをアタッチする方法があるかどうかを疑問に思う大きすぎるので何とかスキップFILESTREAM

これは、 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 

私はどのように行うことができますFILESTREAMデータを持っていないので?

答えて

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 

EDIT:

バッキングに関するいくつかの追加の便利なリンクやファイル/ファイルグループのリストア:

EDIT 2:

データベースが単純回復モードで、特定のファイルグループだけをバックアップする場合は、他のすべてのファイルグループを読み取り専用にする必要があります。次に、READ_WRITE_FILEGROUPSを使用してR/Wファイルグループのみをバックアップできます。

サンプルコマンド:私はあまりにもREAD_WRITE_FILEGROUPSを追加するために必要なバックアップを実行するには、答えのための

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

感謝。さらに、それは "データベースは単純な回復モデルを使用していますが、読み取りと書き込みのデータのサブセットを復元することはできません"と書いてありますが、フル回復モードに変更しようとしましたが、エラーは続きます。 – LaBracca

+0

私もこの質問をしましたhttps://stackoverflow.com/questions/46324380/is-it-possible-to-create-a-dummy-filestream-filegroup-to-study-mdf-content-only – LaBracca

+0

バックアップを取る前にデータベースは完全回復モードでなければなりません。 READ_WRITE_FILEGROUPSを指定しません(これはシンプルリカバリモードでのみ必要ですが、filestreamグループがR/Wの場合は必要ありません)。部分バックアップを作成したら、すべてのファイルがリストされた状態で新しいデータベースに復元します。リストアは成功しますが、ファイルストリームグループが存在しないため、オフラインになります。投稿する関連リンクを追加しました。 – nejcs

関連する問題