บริบท
เรากำลังพัฒนาระบบที่มีฐานข้อมูลขนาดใหญ่ที่ด้านล่าง มันเป็นฐานข้อมูล MS SQL ที่ทำงานบน SQL Server 2008 R2 ขนาดทั้งหมดของฐานข้อมูลประมาณ 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
ในแบบสอบถามฉันได้รับข้อผิดพลาด:
ข้อมูลวัตถุขนาดใหญ่ (LOB) สำหรับตาราง "dbo.BinaryContent" ตั้งอยู่ในกลุ่มออฟไลน์ไฟล์ ("FileStreamContentFG") ที่ไม่สามารถเข้าถึงได้
ไฟล์ที่มีเนื้อหาถูกตั้งค่าให้จับระบบของเราnull
ดังนั้นสิ่งที่ผมจะชอบที่จะทำคืออะไรเช่นนี้
UPDATE [dbo].[BinaryContent]
SET [FileContentBinary] = null
แต่แน่นอนว่านี่ทำให้ฉันมีข้อผิดพลาดเหมือนข้างต้น ณ จุดนี้ฉันติดอยู่
คำถาม
มีวิธีใดบ้างที่ฉันสามารถกู้คืนฐานข้อมูลโดยไม่ต้องกู้คืนทุกอย่างจากFileStreamContentFG
กลุ่มไฟล์ได้ อย่างใดอย่างหนึ่งโดยการปรับปรุงค่าเป็นโมฆะในขณะที่ฉันพยายามด้านบนหรือเริ่มต้นที่โมฆะเมื่อไฟล์หายไปหรืออะไร
หรือฉันกำลังเข้าใกล้ปัญหาในทางที่ผิด?
ฉันเป็นนักพัฒนาโดยธรรมชาติและไม่มีความรู้ในฐานะ DBA มากนักดังนั้นขอยกโทษให้ฉันถ้าฉันมองไปที่สิ่งเล็ก ๆ น้อย ๆ ที่นี่