PDA

View Full Version : استفاده از دستور ShrinkDatabase



hamid-nic
چهارشنبه 10 آبان 1391, 21:23 عصر
سلام دوستان
استفاده از دستور ShrinkDatabase آیا مناسب و صحیح است یا نه ؟
آقای ثباتی جایی در همین سایت دیدم که اکیداً توصیه کرده بودند که از این دستور استفاده نکنن .

فرض کنید یه دیتابیسی داریم که قبلا روی اون اطلاعات بوده ولی الان قراره برای جایی دیگه استفاده بشه اگر فقط اطلاعات اون بانک را پاک کنیم فکر نکنم زیاد صحیح باشه به نظرتون برای تبدیل اون به همون دیتابیس اولیه باید چه کرد ؟ یعنی مثل روز اولش که هیج اطلاعاتی هنوز در اون وارد نشده بشه ؟

ممنون از راهنمایی تون

حمیدرضاصادقیان
دوشنبه 15 آبان 1391, 10:08 صبح
سلام.
بحث Shrink که اقای ثباتی گفتند برای مواقعی هست که دیتابیس شما مهم هست و مدل دیتابیس شما روی FUll هست که باید قبلش حتما Log Backup تهیه کنید و بعد عملیات Shrink رو انجام بدید که هیچ مشکلی هم نداره.
برای ایجاد یک دیتابیس خالی ، بهترین راه این هست که یک Backup از دیتابیس فعلی تهیه کرده و به اسم جدید بازیابی کنید و داده های اونو تخلیه کنید.

hamid-nic
دوشنبه 15 آبان 1391, 10:21 صبح
برای ایجاد یک دیتابیس خالی ، بهترین راه این هست که یک Backup از دیتابیس فعلی تهیه کرده و به اسم جدید بازیابی کنید و داده های اونو تخلیه کنید.
آقای صادقیان عزیز اگه به این شکل اجرا کنم هنوز فضای فایل های MDF و LDF و بعضاً NDF ام سرجاشه حتی با این کار مقدار log یعنی LDF زیادتر هم میشه !

Nima7887
دوشنبه 15 آبان 1391, 12:26 عصر
در مورد شرينك كردن ، شرينك كردن باعث پاك شدن لاگ فايل در حالت فول ريكاوري نخواهد شد بلكه فضاهاي بلا استفاده رو از روي فايلهاي mdf و ldf شما به سيستم بر مي گردونه اين كار هيچ آسيبي در هيچ حالتي به ديتابيس و حتي لاگ فايل اون وارد نمي كنه ؛ايراد شرينك اينه كه چون فضاهاي خالي از بين ميره دوباره نيازه ديتابيس فضاي خالي بگيره تا جا براي كار كردن باشه و اين باعث كاهش سرعت ميشه ( البته اينو بصورت كلي گفتم و وارد جزئيات پيجو و ... نشدم)
در كل به نظر من شرينك كردن هر از چند وقت ايرادي نداره و اگه فضا به اندازه كافي موجوده اصلا نشه بهتره ( سر بي دردو دستمال نمي بندن) و اگه فضا كمه و راه ديگه نيست چرا كه نه , شرينك كنيد.

در مورد ديتابيس براي مشتري جديد اگه قبلا فكر اينجا رو كردين كه بك آپ بايد داشته باشيد
معمولا يه ديتابيس يه سري اطلاعات داره كه سيستمي هست مثل اسامي بانكها البته به عنوان مثال بنابراين نميشه راحت كل ديتابيس رو خالي كرد
ضمنا براي مشتري جديد لزومي نداره لاگ فايل رو حفظ كنيد مي تونيد موقتا ديتابيس خودتون رو سيمپل كنيد بعد شرينك كنيد و دوباره فول كنيد با اين كار كل لاگ فايل از بين ميره و ديتابيس شما كوچك ميشه

حمیدرضاصادقیان
دوشنبه 15 آبان 1391, 13:17 عصر
در مورد شرينك كردن ، شرينك كردن باعث پاك شدن لاگ فايل در حالت فول ريكاوري نخواهد شد
البته وقتی که شما Log Backup تهیه نکرده باشید. اگر Log Backup تهیه کنید اون قسمتهایی از Log File که Backup ازشون تهیه شده حذف شده و فضای اون آزاد میشه.

ايراد شرينك اينه كه چون فضاهاي خالي از بين ميره دوباره نيازه ديتابيس فضاي خالي بگيره تا جا براي كار كردن باشه و اين باعث كاهش سرعت ميشه
این مورد هم در مورد فایلهای MDF صادقه که تاکید شده فایلهای Data رو به هیچ وجهی Shrink نکنید، چون وقتی سیستم عامل نیاز به درج رکورد جدید هست ، میزان I/O شما افزایش پیدا خواهد کرد و این سبب کندی سیستم خواهد شد.


موقتا ديتابيس خودتون رو سيمپل كنيد بعد شرينك كنيد و دوباره فول كنيد با اين كار كل لاگ فايل از بين ميره و ديتابيس شما كوچك ميشه
کلا جاهایی که نیازی به Log Backup نیست معمولا مدل دیتابیس رو روی Simple میگذارند که نیازی نباشه عملیات Shrink و Backup دائما انجام بشه. ولی جاهایی مثل بانک که اطلاعات لحظه ای اونها از اهمیت زیادی برخورداره مدل رو روی Full قرار میدهند و مرتب ازش Backup تهیه میکنند و بعد از اون فایل LDF رو Shrink میکنند که فضای مناسب برای اینکار داشته باشند.


آقای صادقیان عزیز اگه به این شکل اجرا کنم هنوز فضای فایل های MDF و LDF و بعضاً NDF ام سرجاشه حتی با این کار مقدار log یعنی LDF زیادتر هم میشه !
بعد از اینکار کافیه یک بار دیتابیس رو Shrink کنید.(البته بازم تاکید میکنم که مدل دیتابیس اگر روی Simple باشه راحت Shrinkمیشه در غیر اینصورت حتما باید Log Backup بگیرید بعد Shrink کنید.)

hamid-nic
دوشنبه 15 آبان 1391, 14:33 عصر
قبلا یه جایی دیده بودم که بانک را برای مشتری جدید از اول ایجاد می کردند یعنی از دیتابیسی که در فعلا در دسترس هست script از نوع Create ایجاد می کنند و در سیستم مقصد اجرا می کنند . حالا توی Management Studio جایی هست که بشه script از نوع Create ایجاد کرد البته با یک مرحله که شامل تمام جداول ، sp ها ، فانکشن ها و ویوها و ... بشه .

[روی دیتابیس کلید راست کنیم و script Database AS را و سپس Create را انتخاب کنیم فقط اسکریپ ساختن خود بانک را می دهد نه سایر موارد بالا را ]

hamid-nic
سه شنبه 16 آبان 1391, 13:37 عصر
از طریق کلید راست روی دیتابیس و سپس Tasks و سپس Generate Scripts میشه این کار را کرد .

Nima7887
سه شنبه 16 آبان 1391, 14:41 عصر
جناب صادقيان در مورد اينكه گفتيد كه قسمتهاي بك آپ گرفته شده از لاگ فايل پاك ميشن كه خوب هم هست ؛در مورد كاهش سرعت من هم خب همين رو به عنوان ايراد شرينگ ذكر كردم
اما در مورد اينكه گفتيد

کلا جاهایی که نیازی به Log Backup نیست معمولا مدل دیتابیس رو روی Simple میگذارند که نیازی نباشه عملیات Shrink و Backup دائما انجام بشه. ولی جاهایی مثل بانک که اطلاعات لحظه ای اونها از اهمیت زیادی برخورداره مدل رو روی Full قرار میدهند و مرتب ازش Backup تهیه میکنند و بعد از اون فایل LDF رو Shrink میکنند که فضای مناسب برای اینکار داشته باشند.
بايد بدونيد ابدا Simple بودن باعث شرينك شدن نميشه و اين فكر اشتباهه كه كه فكر كنيد چون ديتابيس شما simple هست ديگه لاگ فايل ايجاد نميشه , اين اشتباه رو خيلي ها انجام مي دن كه وقتي ديتابيس Simple هست ديگه لاگ ايجاد نميشه يا اتوماتيك فضايي كه گرفته پاك ميشه و ديگه شريك كردن بي معناست!!
در واقع تنها دستوري كه فضاي اختصاص داده شده رو به سيستم برمي گردونه شرينكه و Simple كردن جاي شرينكو نمي گيره (ديتابيسي كه فضا گرفته حتي اگر سيمپل باشه فضارو بر نمي گردونه)
البته سيمپل بودن باعث ميشه كه به لاگهاي قديمي كه از آن سشنهاي فعال نيست اهميتي قايل نشه و لاگهاي جديد جاي اونها رو بگيرن

حمیدرضاصادقیان
سه شنبه 16 آبان 1391, 15:14 عصر
بايد بدونيد ابدا Simple بودن باعث شرينك شدن نميشه و اين فكر اشتباهه كه كه فكر كنيد چون ديتابيس شما simple هست ديگه لاگ فايل ايجاد نميشه , اين اشتباه رو خيلي ها انجام مي دن كه وقتي ديتابيس Simple هست ديگه لاگ ايجاد نميشه يا اتوماتيك فضايي كه گرفته پاك ميشه و ديگه شريك كردن بي معناست!!
در واقع تنها دستوري كه فضاي اختصاص داده شده رو به سيستم برمي گردونه شرينكه و Simple كردن جاي شرينكو نمي گيره (ديتابيسي كه فضا گرفته حتي اگر سيمپل باشه فضارو بر نمي گردونه)
البته سيمپل بودن باعث ميشه كه به لاگهاي قديمي كه از آن سشنهاي فعال نيست اهميتي قايل نشه و لاگهاي جديد جاي اونها رو بگيرن
حرف شما صحیحه.منم منظورم این نبود که با Simple کردن خود به خود این فضا برمیگرده. اینجورمواقع گزینه Auto Shrink رو true میکنند که نیازی نباشه Shrink در یک Job اجرا بشه .
ولی در هرصورت عملیات shrink باید صورت بگیره.