تجربه ترکیدن SQL Server (شاید یه روز به کارتون بیاد)

سلام علیکم آقا داستان از اینجا شروع شد که ما چهارشنبه شب آخرین آپدیت های ویندوز رو گرفتیم که از قضا آپدیت SQL Server هم داشت،ما خیلی خوشحال و خندون وقتی نصب شد دیگه چک نکردیم چی شد بعد از نصب، سرویس ها همه بالان یا نه!!(این خودش شد یه تجربه) خلاصه پنجشنبه جمعه هم اصلا کاری به کارش نداشتیم فرضمونم این بود که اگه چیزی بشه مشتریا خودشون جیغ میزنن ما هم میفهمیم گند زدیم :)آقا ما شنبه اومدیم سر کار دیدیم power bi دیتا نمیده، اومدیم کانکت بشیم به دیتابیس دیدیم اوه! سرویس mssqlserver استپ شده گفتم حتما بعد از ریست شدن سرور سرویس بالا نیومده زیاد چیز غریبی نیست پیش میاد گاهی، خلاصه چشمتون روز بد نبینه سرویس قصد بالا اومدن نداشت. رفتم تو لاگ دیدم میگه دیتابیس master ترکیده!! اول شوک بودم که چرا اینجوری شده خلاصه فهمیدم آپدیتی که گرفتم باعثش بوده دقیق ترش میشه آپدیت Db Engine ناقص انجام شده بود. اولین کاری که کردم این بود که با trace flag 902 سرویس را بالا آوردم بهش کانکت شدم بعد یه نفس راحت کشیدم دیدم در بدترین حالت میتونم از همه چی بکاپ بگیرم و دیتالاست ندارم. خب گفتم برم دیتابیس master سرور secondary رو جای این یکی ریستور کنم(سوتی وحشتناک) برای ریستور کردن دیتابیس master باید sql server بره در حالت single_user برای این کار باید سرویس را با پارامتر -m بالا بیاریم اما نکته این داستا چیه؟ اولین یوزر با دسترسی ادمین که کانکت بشه sql در رو قفل میکنه!! ظاهرا یکی از اپلیکیشن ها با دسترسی ادمین مدام در حال ریکوئست فرستادن بود و رقابت رو برای کانکت شدن میبرد. خلاصه رفتم همه یوزر ها رو غیر فعال کردم پسورد sa هم عوض کردم یا cmd لاگین کردم به دیتابیس و همونجا ریستور کردم بعد از حالت single خارج کردم دیتابیس رو. خوشحال و خندون لاگین کردم دیدم لیست دیتابیسامون عوض شده وحواسم به این قسمتش نبود!! دیگه دسترسی به دیتابیسام نداشتم و شدیدا در خطر دیتا لاست بودمو اولین کاری که کردم گفتم بذار دیتابیس master قبلیمو برگردونم حداقل با trace flag 902 میارمش بالا از db ها بکاپ میگیرم سری یه instance دیگه میارم و زندگی دوباره شیرین میشه! چشمتون روز بد نبینه دیتابیس master جدیدی که ریستور کردم ورژن engine رو downgrade کرده بود و دیگه من امکان ریستور master قبلیمو نداشتم!!!(دوباره گند زدم) گفتم به جهنم بذار از job هام بکاپ بگیرم دیدم agent حالا بالا نمیاد(خدایا بسه دیگه) سرتون و درد نیارم نمیدون به چه علتی(شاید اینم به خاطر آپدیت باشه) دیتابیس msdb هم ترکیده بود و به طرز عجیبی یکی از تیبل ها به نام msdb..syssubsystems پاک شده بود و چون این نبود agent استپ میشد. خلاصه من سریع یه instance جدید آوردم بالا دیتابیسام و اتچ کردم (استثناعا اینجا بدشناسی نیاوردم و مثل بچه آدم اتچ شد) از دیتابیس msdb قبلیه در اوج نا امیدی بکاپ گرفته بودم گفتم شاید job هام برگشت. اینم بگم برای من از دست رفتن job هام کم از دیتالاست نداشت چون بیشتر ETL هام و ترتیبشون و ساعت اجراشون و خیلی چیزای مهم دیگه اونجان و از بد قضیه داکیومنتی نداشتم.آقا ما msdb رو ریستور کردیم دیدم لیست job ها برگشتن به طور وصف نشدنی خوشحال شد سریع به همکارم گفتم از job ها فعلا یه اسکریپت بگیر داشته باشیم، 2 دقیقه نشده بود که گفت باز نمیشن هیچ کدوم(خدایا بسه دیگه) دیدم باز داره به نبودن همون تیبل اشاره میکنه گفتم بذار تیر آخر رو بزنم نشد فوقش تا صبح میشنیم همه جاب ها رو درست میکنیم، حالا چی بود تو ذهنم گفتم برم از یه دیتابیس دیگه اسکریپت ساخت جدولmsdb..syssubsystems بردارم اینجا ران کنم قبلش خونده بود با یک SP میشه تمام SUBSYSTEM ها رو بارگذاری کرد در همون جدول "exec msdb.dbo.sp_verify_subsystems 1" خلاصه اسکریپت ران شد خوشبختانه SP هم ران شد و همه JOB ها مثل روز اول برگشت و من دوباره به طرز عجیبی به هوا پریدم :)تجربه ایکه اتفاق برام داشت این بود که بکاپ گرفتن از تمام دیتابیس های سیستمی از نون شب واجب تره!بخوام خیلی ایده آل گرایانه به داستان نگاه کنم قشنگ میشد از تمامی روال ها هم داکیومنت میداشتیم که اگر نشد دیتابیس رو به حالت اول برگردانیم حداقل نگران لاجیک ETL ها نمیبودیمببخشد طولانی شد :))مخلص