コンテキスト
下部に大規模なデータベースを持つシステムを開発しています。これは、SQL Server 2008 R2で実行されているMS SQLデータベースです。データベースの合計サイズは約12 GBです。
これらのうち、約8.5 GBが単一のテーブルにありますBinaryContent
。名前が示すように、これは、あらゆる種類の単純なファイルをBLOBとしてテーブルに直接格納するテーブルです。最近、FILESTREAMを使用して、これらすべてのファイルをデータベースからファイルシステムに移動する可能性をテストしています。
データベースに必要な変更を問題なく行いましたが、移行後もシステムは正常に動作しています。BinaryContent
テーブルは次のように大まかになります。
CREATE TABLE [dbo].[BinaryContent](
[BinaryContentID] [int] IDENTITY(1,1) NOT NULL,
[FileName] [varchar](50) NOT NULL,
[BinaryContentRowGUID] [uniqueidentifier] ROWGUIDCOL NOT NULL
) ON [PRIMARY] FILESTREAM_ON [FileStreamContentFG]
ALTER TABLE [dbo].[BinaryContent] ADD [FileContentBinary] [varbinary](max) FILESTREAM NULL
ALTER TABLE [dbo].[BinaryContent] ADD CONSTRAINT [DFBinaryContentRowGUID] DEFAULT (newsequentialid()) FOR [BinaryContentRowGUID]
別のファイルグループにあるPRIMARY
フィールドFileBinaryContent
を除く、すべてがファイルグループに存在しますFileStreamContentFG
。
シナリオ
開発者の観点からは、最新のデータを処理できるように、運用環境からのデータベースの新しいコピーが必要になることがよくあります。そのような場合、BinaryContentに格納されているファイルにほとんど関心がありません(現在はFILESTREAMを使用しています)。
これはほぼ希望どおりに機能しています。次のようなファイルストリームなしで、データベースをバックアップします。
BACKUP DATABASE FileStreamDB
FILEGROUP = 'PRIMARY'
TO DISK = 'c:\backup\FileStreamDB_WithoutFS.bak' WITH INIT
そして、次のように復元します。
RESTORE DATABASE FileStreamDB
FROM DISK = 'c:\backup\FileStreamDB_WithoutFS.bak'
これは問題なく機能しているようで、システムはFileBinaryContent
フィールドを使用する部品を避けている限り機能します。たとえば、次のクエリを問題なく実行できます。
SELECT TOP 10 [BinaryContentID],[FileName],[BinaryContentRowGUID]
--,[FileContentBinary]
FROM [dbo].[BinaryContent]
当然、FileContentBinary
クエリを含む上記の行のコメントを外すと、エラーが発生します。
テーブル "dbo.BinaryContent"のラージオブジェクト(LOB)データは、アクセスできないオフラインファイルグループ( "FileStreamContentFG")にあります。
私たちのシステムハンドルコンテンツがに設定されているファイルをnull
、私はどうなるかので、好き行うには、次のようなものです:
UPDATE [dbo].[BinaryContent]
SET [FileContentBinary] = null
しかし、これはもちろん上記と同じエラーを私に与えます。この時点で立ち往生しています。
質問ファイルグループ
からすべてを復元せずにデータベースを復元する方法はありFileStreamContentFG
ますか?上記のように値をnullに更新するか、ファイルが見つからないか何かがデフォルトのときにnullになりますか?
または、私はおそらく間違った方法で問題に近づいていますか?
私は本質的に開発者であり、DBAとしての知識はあまりないので、ここで些細なことを見落としているのであれば、すみません。