মন্তব্যে মার্টিন স্মিথের পরামর্শ অনুসারে আমি ফাইলের শিরোনামের পৃষ্ঠায় ঘুরে দেখলাম। আমি মনে করি এটি উত্তরের একটি অংশ, তবে এটি বেশিরভাগই অনুমান করা হয় যে ফাইল সংশোধনকারী এবং অন্যান্য ক্রিয়াকলাপগুলির মধ্যে ফাইল শিরোনাম পৃষ্ঠার পতাকা মানগুলিতে পরিবর্তনগুলি পর্যবেক্ষণ করে।
প্রথম আমি একটি গৌণ ফাইলগ্রুপ সহ পরীক্ষার জন্য একটি ডাটাবেস তৈরি করেছি:
CREATE DATABASE [Shrinkfile_Test]
ON PRIMARY
(
NAME = N'Shrinkfile_Test',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\Shrinkfile_Test.mdf',
SIZE = 8192KB,
FILEGROWTH = 65536KB
),
FILEGROUP [SECONDARY]
(
NAME = N'ShrinkFile_Test_Secondary',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\ShrinkFile_Test_Secondary.ndf',
SIZE = 1024KB,
FILEGROWTH = 65536KB
)
LOG ON
(
NAME = N'Shrinkfile_Test_log',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\Shrinkfile_Test_log.ldf',
SIZE = 73728KB,
FILEGROWTH = 65536KB
)
GO
USE Shrinkfile_Test;
GO
আমি মাধ্যমিক ফাইলটির জন্য "পৃষ্ঠা 0" এর দিকে চেয়েছিলাম, যা ফাইল_আইড 3:
DBCC TRACEON (3604);
GO
DBCC PAGE (N'Shrinkfile_Test', 3, 0, 3);
এমন একটি ক্ষেত্র রয়েছে যার m_flagBitsমান রয়েছে0x208 ।
যদি আমি এই ফাইলটি খালি করি:
DBCC SHRINKFILE (N'ShrinkFile_Test_Secondary' , EMPTYFILE);
যে m_flagbitsফিল্ড একই থাকে ( 0x208)। এটি আকর্ষণীয় নয়, তবে এখন আপনি যে পরিস্থিতিতে রিপোর্ট করেছেন আমি এখন সে অবস্থায় আছি: আমি যদি ফাইলটি আবার খালি করার চেষ্টা করি তবে আমি এই ত্রুটিটি পেয়েছি:
ডাটাবেস আইডি 19 এর ফাইল আইডি 3 সঙ্কুচিত করা যায় না কারণ এটি হয় অন্য কোনও প্রক্রিয়া দ্বারা সঙ্কুচিত হয়ে গেছে বা খালি রয়েছে।
আমি ফাইলটি বাড়ানোর চেষ্টা করব (যে সমাধানটি আপনার পক্ষে কাজ করেছে):
ALTER DATABASE ShrinkFile_Test
MODIFY FILE
(
NAME = ShrinkFile_Test_Secondary,
SIZE = 1025KB
);
GO
এখন m_flagbitsহয়0x8 !
এই মুহুর্তে, ফাইলটি আবার খালি করা সফলভাবে মানটি দেয় 0x208 হয় আপনার প্রত্যাশা অনুযায়ী ।
যে জিনিসটি আমি আকর্ষণীয় মনে করি তা হ'ল আমি যদি ফাইলটি বাড়ানোর পরে এই কাজটি করি তবে (একে একে ফ্ল্যাগবাইটের মান হ'ল 0x8):
USE [master]
GO
ALTER DATABASE [Shrinkfile_Test] MODIFY FILEGROUP [SECONDARY] READONLY
GO
ফাইলটি টেবিলের মতো চিহ্নিত করা is_read_onlyহয়েছে sys.databasesএবং এতে m_flagbitsআবার সেট করা আছে 0x208। সুতরাং এটি উপস্থিত রয়েছে যখন কোনও ফাইল সঙ্কুচিত করার সময় এবং কেবল এটি পড়ার জন্য সেট করার সময় কিছু অনুরূপ ফাইল-স্তরের পতাকা সেট রয়েছে।
আমার সর্বোত্তম অনুমান যে কোনও ফাইল সঙ্কুচিত হওয়ার যোগ্য কিনা তা বোঝাতে এই মানটি কিছু অন্যান্য (অভ্যন্তরীণ) পতাকা সহ ব্যবহৃত হয়। ফাইলটি বাড়ানোর সাথে সাথে সেই পতাকাটি আন-সেট করা হবে বলে মনে হচ্ছে (কমপক্ষে একটি দৃশ্যমান m_flagbits)।