শ্রিনকফিল ব্যর্থতা - ফাইলের আকার বাড়ানো কেন এটি সমাধান করে?


10

আমি SHRINKFILEএকটি ফাইলগোষ্ঠীতে ক্ষুদ্র, অপ্রয়োজনীয় ফাইলগুলির একগুচ্ছ পরিষ্কার করতে কিছু অপারেশন চালিয়ে যাচ্ছি। সঙ্কুচিত একটির জন্য, নীচের কমান্ডটি একটি ত্রুটিতে ফলাফল দেয়:

DBCC SHRINKFILE (N'myfile' , EMPTYFILE)'

ডাটাবেস আইডি এক্স এর ফাইল আইডি এক্স সঙ্কুচিত হতে পারে না কারণ এটি হয় অন্য কোনও প্রক্রিয়া দ্বারা সঙ্কুচিত হয়ে গেছে বা খালি রয়েছে

এটি খালি নয় বা সঙ্কুচিত হচ্ছে না। এটি বর্তমানে এমন একটি ডাটাবেসে চালিত হচ্ছে যা আমি ছাড়া অন্য কারও দ্বারা ব্যবহৃত হয় না। স্বয়ংক্রিয় সঙ্কুচিত সক্ষম নেই এবং কখনও ছিল না। যাইহোক, আমার পক্ষে এটির আগে আমার আগে নিয়মিতভাবে এই ডাটাবেসে সঞ্চালিত ম্যানুয়াল সঙ্কুচিত ঘটনা ছিল , যদি তা মোটেই গুরুত্বপূর্ণ।

চালু SQLServerCentral , এক দশক আগে ফাইল করতে কয়েক মেগাবাইট জোড়ার পরামর্শ দেয় থেকে একটি থ্রেড কারণ যে "রিসেট একটি অভ্যন্তরীণ কাউন্টার বা সুইচ এটি বলে এটি একটি সঙ্কুচিত মাঝখানে এখন নয়।"

এটি কাজ করেছে - দুর্দান্ত। তবে এসকিউএল সার্ভার ইন্টার্নালগুলির ক্ষেত্রে এটি কীভাবে / কেন কাজ করে তা আরও বিশদ দিয়ে ব্যাখ্যা করতে পারে?


1
উত্তরটি আপনাকে জানাতে পারেনি, তবে ভবিষ্যতে আমি কখনও এই পরিস্থিতিতে পড়ছি কিনা তা জানার জন্য এটি একটি সহজ কৌশল v
জন আইজব্রেনার

যদি আপনি ফাইল শিরোলেখ পৃষ্ঠায় কিছু পতাকা লাগাতে পারেন যা একটি সঙ্কুচিত হওয়ার সময় সেট হয়ে যায়?
মার্টিন স্মিথ

হ্যাঁ আমি এটি একটি পরীক্ষার নজরে শট দিতে পারি, তবে এটি এতক্ষণে উত্থাপিত হয়েছিল যাতে অবশ্যই এটি পুনরুত্পাদন করার চেষ্টা করার বিলাসিতা নেই।
লোলিডিবিএ

উত্তর:


5

মন্তব্যে মার্টিন স্মিথের পরামর্শ অনুসারে আমি ফাইলের শিরোনামের পৃষ্ঠায় ঘুরে দেখলাম। আমি মনে করি এটি উত্তরের একটি অংশ, তবে এটি বেশিরভাগই অনুমান করা হয় যে ফাইল সংশোধনকারী এবং অন্যান্য ক্রিয়াকলাপগুলির মধ্যে ফাইল শিরোনাম পৃষ্ঠার পতাকা মানগুলিতে পরিবর্তনগুলি পর্যবেক্ষণ করে।


প্রথম আমি একটি গৌণ ফাইলগ্রুপ সহ পরীক্ষার জন্য একটি ডাটাবেস তৈরি করেছি:

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)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.