خاطرات فنی من

یادداشتهایی در مورد تجربیات فنی من به عنوان یک مهندس نرم افزار برای مراجعه بعدی خودم و احتمالا دیگران.

سعی می کنم مطالب برای دیگران هم قابل استفاده باشند اما به دلیل کمی وقت نمی توانم زیاد نگران نگارش و چینش متن باشم

وقتی دیتابیس ها روی AlwaysOn Availability Group می گذارید باید Recovery Model  آنها را Full بگذارید. و طبیعی است که این یعنی افزوده شدن مداوم حجم Log File ها.

اما گویا Log Backup هم که راه حل منطقی این موضوع است اینجا جواب نمی دهد. 



در واقع موضوع این است که در تنظیمات AlwaysOn شما مشخص می کنید که  Backup از کدام سرور گرفته شود



گزینه اول یعنی که حتی المقدور سعی کند backupها را از secondary بگیرد. خب وقتی مثلا با maintenance plan شما backup را اجرا می کنید بطور اتوماتیک یک IF به دستور backup شما اضافه می شود که روی primary اجرا نمی شود و نتیجه هم successfull است. چیزی شبیه به این

DECLARE @preferredReplica int

SET @preferredReplica = (SELECT [master].sys.fn_hadr_backup_is_preferred_replica('TestDB'))

IF (@preferredReplica = 1)
BEGIN
...
END
واضح است که این دستور بررسی می کند که سرور ترجیح داده شده برای تهیه Backup کدام است. حالا دیگر بسته به تنظیمات شماست که Primary را برای Backup ترجیج داده باشید یا Secondary را یا حالات دیگر.
از طرف دیگر یک دیتابیس 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 ها را زیاد کردم و از همه مهمتر شرایط را رصد می کنم تا ببینم آیا مشکلی رخ می دهد یا نه
موافقین ۰ مخالفین ۰ ۹۶/۰۸/۰۷
محسن

AlwaysOn

SQL Server

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی