مدتها است که دارای یک فایل پایگاه داده هستیم که حجم خود فایل دادهها (mdf) حدود ۴۵۰ مگابایت است، این در حالی است که حجم فایل log آن حدود ۱۲.۵ گیگابایت است. این حجم زیاد مشکلاتی برای ما ایجاد کرده بود از جمله از بین بردن فضای هارددیسک سرورمان و بالا بودن حجم آن برای ارسال ازطریق اینترنت.
همانطور که میدانید هر پایگاه داده شامل ۲ فایل میباشد، فایل اول، فایل اصلی است که اصل دادهها روی آن نگهداری میشوند (فایلی با پسوند mdf) و حجم آن عددی کاملا متعارف است. دومین فایل مربوط به ثبت وقایع اتفاق افتاده روی پایگاه داده است و هر تراکنشی که روی پایگاه داده انجام میشود روی این فایل ذخیره میشود (فایلی با پسوند ldf)، به همین دلیل حجم این فایل به سرعت در حال زیاد شدن است و زمانی که کل فضای هارددیسک را اشغال کند، عملا دیگر هیچ عملیاتی روی پایگاه داده انجام نمیشود. لازم به ذکر است که ابزارهایی برای بازیابی دادهها از روی این فایل وجود دارد.
فکر میکردم که با یک Shrink ساده از طریق خود SQL Server میتوانم این فضا را آزاد کنم ولی وقتی این کار را انجام دادم دیدم که فقط حدود یک گیگابایت از حجم آن کم شده که اصلا برای من قابل قبول نبود. به همین منظور کمی در این زمینه مطالعه کردم و به جاهای خوبی رسیدم.
یادمه که در نسخه ۲۰۰۰ میتوانستیم یک پایگاه داده را Detach کنیم و فایل ldf مربوط به آن را حذف کنیم، زمانیکه دوباره پایگاه داده را attach میکردیم یک فایل ldf جدید ساخته میشد اما در نسخههای بعد از آن چنین امکانی وجود ندارد.
در نسخههای جدید برای shrink کردن ابتدا باید عملیات log truncation را انجام دهیم. این عملیات در دو حالت اتفاق میافتد:
۱- در مدل بازیابی ساده (simple recovery model) بعد از یک checkpoint اتفاق میافتد.
۲- در مدل بازیابی کامل (full recovery model) و مدل بازیابی bulked-log ، پس از پشتیبانگیری از log .
هر فایل log دارای یک بخش غیرفعال است که در عملیات truncate کردن فقط این بخش از پایگاه داده آزاد میشود. بخش غیر فعال به بخشی گفته میشود که مربوط به اتفاقاتی است که commit شدهاند و عملا بودن یا نبودن آنها هیچ مزیتی برای ما ندارند.
طبق مواردی که در بالا بیان شد برای اینکه بتوانیم حجم این فایل را کم کنیم باید ابتدا عملیات truncation را انجام دهیم و سپس آن را shrink کنیم. برای truncate کردن باید از فایل log پشتیبان بگیریم. برای انجام این کار از طریق SQL Server Management Studio کاری شبیه به پشتیبانگیری معمولی انجام میشود، فقط باید نوع پشتیبانگیری را از نوع Transaction Log انتخاب کرد. زمانی که این نوع انتخاب شود میتوان از بخش Options تعیین کرد که آیا عملیات truncate کردن انجام شود یا خیر. از این بخش مقدار پیشفرض را تغییر ندهید. زمانیکه محل مورد نظر برای پشتیبانگیری را انتخاب کردید روی دکمه OK کلیک کنید تا پشتیبانگیری انجام شود.
بعد از این مرحله برای shrink کردن پایگاه داده روی نام پایگاه داده کلیک راست ماوس را زده و از بخش Tasks گزینه Shrink و سپس Database را انتخاب نمایید و روی دکمه OK در صفحه جدید کلیک نمایید. با این کار حجم فایل من که حدود ۱۲.۵ گیگابایت بود به حدود ۱۶۰ مگابایت رسید!!!؟؟!!
منبع :
http://ramezani.wordpress.com/2010/09/25/shrink-log-files/Linkback: https://irmeta.com/meta/b1419/t4639/