প্রসঙ্গ
আমরা নীচে একটি বৃহত-ইশ ডাটাবেস সহ একটি সিস্টেম বিকাশ করছি। এটি একটি এমএস এসকিউএল ডাটাবেস যা এসকিউএল সার্ভার ২০০৮ আর 2 এ চলছে। ডাটাবেসের মোট আকার প্রায় 12 জিবি।
এর মধ্যে প্রায় 8.5 জিবি একটি একক টেবিলে রয়েছে BinaryContent
। নামটি যেমন বোঝায়, এটি একটি টেবিল যেখানে আমরা সরল ফাইলগুলি যে কোনও প্রকারের সরাসরি টেবিলটিতে একটি বিএলএলবি হিসাবে সংরক্ষণ করি। সম্প্রতি আমরা 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
।
পরিস্থিতি
বিকাশকারীর দৃষ্টিকোণ থেকে, আমরা প্রায়শই আমাদের উত্পাদন পরিবেশ থেকে ডেটাবেজের একটি নতুন কপি চাই, যাতে সর্বশেষতম ডেটা কাজ করতে সক্ষম হয়। এই ক্ষেত্রে, আমরা খুব সহজেই বাইনারি কনটেন্টে সঞ্চিত ফাইলগুলিতে আগ্রহী (এখন 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) ডেটা অফলাইন ফাইলগ্রুপ ("ফাইলস্ট্রিমসন্টেন্টজিজি") এ থাকে যা অ্যাক্সেস করা যায় না।
আমাদের সিস্টেম হ্যান্ডলগুলি ফাইল কোন সামগ্রীর সেট করা হয় null
, তাই কি আমি চাই চাই না ভালো কিছু হল:
UPDATE [dbo].[BinaryContent]
SET [FileContentBinary] = null
তবে এটি অবশ্যই আমাকে উপরের মতো ত্রুটি দেয়। এই সময়ে আমি আটকে আছি।
প্রশ্ন ফাইল গ্রুপ
থেকে সবকিছু পুনরুদ্ধার না করেই আমি কি ডাটাবেস পুনরুদ্ধার করতে পারি FileStreamContentFG
? হয় উপরে আপডেট করার সাথে সাথে মানগুলি নালিতে আপডেট করে, অথবা ফাইলটি অনুপস্থিত বা কিছু হারিয়ে যাওয়ার পরে ডিফল্ট হয়ে যায়?
বা আমি সম্ভবত ভুল উপায়ে সমস্যার দিকে এগিয়ে যাচ্ছি?
আমি প্রকৃতির দ্বারা বিকাশকারী এবং ডিবিএ হিসাবে বেশি জ্ঞান নেই, তাই যদি আমি এখানে কিছু তুচ্ছ জিনিস উপেক্ষা করছি তবে আমাকে ক্ষমা করবেন।