حجم log file ها در AlwaysOn زیاد شده و با log backup هم کم نمی شود
يكشنبه, ۷ آبان ۱۳۹۶، ۰۹:۵۲ ق.ظ
وقتی دیتابیس ها روی AlwaysOn Availability Group می گذارید باید Recovery Model آنها را Full بگذارید. و طبیعی است که این یعنی افزوده شدن مداوم حجم Log File ها.
اما گویا Log Backup هم که راه حل منطقی این موضوع است اینجا جواب نمی دهد.
در واقع موضوع این است که در تنظیمات AlwaysOn شما مشخص می کنید که Backup از کدام سرور گرفته شود

گزینه اول یعنی که حتی المقدور سعی کند backupها را از secondary بگیرد. خب وقتی مثلا با maintenance plan شما backup را اجرا می کنید بطور اتوماتیک یک IF به دستور backup شما اضافه می شود که روی primary اجرا نمی شود و نتیجه هم successfull است. چیزی شبیه به این
DECLARE @preferredReplica intواضح است که این دستور بررسی می کند که سرور ترجیح داده شده برای تهیه Backup کدام است. حالا دیگر بسته به تنظیمات شماست که Primary را برای Backup ترجیج داده باشید یا Secondary را یا حالات دیگر.
SET @preferredReplica = (SELECT [master].sys.fn_hadr_backup_is_preferred_replica('TestDB'))
IF (@preferredReplica = 1)
BEGIN
...
END
از طرف دیگر یک دیتابیس readonly را نمی توان shrink کرد. یعنی Secondary را.
اگر بخواهید مشکل را حل کنید باید یک Maintenance Plan بنویسید که اول log backup بگیرد. (طبق چیزهایی که بالا گفتم با تنظیمات default، فقط روی secondary اجرا خواهد شد) و بعد یک قسمت Execute T-SQL برای انجام shrink اضافه کنید با یک IF شبیه بالا. اما این بار باید روی Primary اجرا شود.
چیزی شبیه به این
if sys.fn_hadr_backup_is_preferred_replica('WSS_Content') = 0
begin
DBCC SHRINKDATABASE(N'DB1', 10, TRUNCATEONLY);
DBCC SHRINKDATABASE(N'DB2', 10, TRUNCATEONLY)
DBCC SHRINKDATABASE(N'DB3', 10, TRUNCATEONLY)
end
بعد از اجرا شدن این maintenance plan روی Secondary، نسخه های پشتیبان گرفته می شوند و بعد از اجرای آن روی primary دیتابیس ها shrink می شوند.
ممکن است برای رسیدن به نتیجه نیاز به دو سه بار اجرا داشته باشید
پی نوشت:
پی نوشت:
با این تنظیمات ما چند بار به مشکل برخورد کردیم. یعنی بعد از چند ماه، به دلیلی که هنوز نمی دانم Log backup ها درست کار نمی کنند و حجم log file ها رشد می کند.
اولا که در چنین شرایطی، می توانید اول بطور دستی یک log backup بگیرید و بعد database را shrink کنید تا حجم فایلها کم شود
ثانیا برای جلوگیری از این ماجرا فعلا راهی که در پیش گرفتم این است: log backup را از primary می گیرم، shrink کردن هرباره را کنار گذاشتم، تعداد log backup ها را زیاد کردم و از همه مهمتر شرایط را رصد می کنم تا ببینم آیا مشکلی رخ می دهد یا نه
۹۶/۰۸/۰۷