الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تقليص حجم قاعدة البيانات

بدأه تيجر 2000 في 22 فبراير 2014 · 34 رد · 4,181 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

قمت بعمليه مسح للداتا من جداول قاعده البيانات فى سيكوال سيرفر 2008

ولكن بعد عمليه المسح هذه ظل حجم قاعده البيانات بالجيجا كما هو

ويظهر فقط صغر حجمها او اثر عمليه المسح عند عمل باك اب لقاعده البيانات وضغطه

فهل يوجد ما يسمى بـ compact فى السيكوال سيرفر 2008 مثلما هو موجود فى الاكسيس

 

وجزاكم الله خيرا

#2

السلام عليكم ...

يسمى Shrink  ...

راجع الموضوع :

ملف الــ log  .

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

0c31424f63f507.jpg


تم تعديل هذه المشاركة بواسطة تيجر 2000 في 23 فبراير 2014 في 13:51

#4

السلام عليكم و رحمة الله ..

بارك الله بك أخي ...

حجم قاعدة البيانات حاليا عندك هو 56887.19 ميغا بايت ...

يمكن تخفيضه إلى 30424 ميغا بايت ..

الخيار يقول لك (Shrink file To)  أي قم بتخفض الحجم إلى (القيمة المحددة) ..الآن .إذا تركته بنفس القيمة الموجودة 56,887   يعني نفس الحجم الأصلي .. يعني لن يقوم بأي تخفيض .. (الفاصلة هنا في الرقم ليست فاصلة عشرية)

يمكن اختيار أي قيمة بين 30424 و 56887 ... حسب ما تريد ... مثلا  35000 أو ي رقم أقل قليلا أو أكثر قليلا ..

ملاحظة : في الصورة تم تحديد الخيار release unused space  أي سقوم بتحرير  كل المساحة الغير مستخدمة ..أي سيجعل  حجم القاعدة 30424 ميغا بايت تقريبا .

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

الف شكر وجزاك الله خيرا

#6

بارك الله بك .. و جزاك خيرا ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#7

 السلام عليكم أ- حسام

هل اجد لديك كورس سيكوال سيرفر 2008  ادمن 
باللغه العربيه ؟؟
وجزاك الله خيرا

#8

للأسف ... لا يوجد ... :)

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9

0c31424c65f107.jpg


 


وماذا يحدث اذا عملنا الشرنك لقاعده البيانات كما هو فى الصوره التاليه


 


0c31424c65f10d.jpg


تم تعديل هذه المشاركة بواسطة تيجر 2000 في 23 فبراير 2014 في 18:29

#10

السلام عليكم ..

  1. الــ Shrink  يمكن إنجازه على الــ Data  و على الــ Log  .. حسب الذي تختاره من القائمة , في حال أخذت الخيار Shrink Files  من القائمة اليمينية .
  2. في الصورة المرسلة , بعكس ما تقول , الفارق كبير جدا ..حيث أن 99% من الملف يمكن تحريره .أي يحصل تخفيض كبير في الحجم ..
  3. سؤالك بخصوص الــ Simple recovery  مهم , و نحن نؤكد على الأعضاء بضرورة فهم كل خيار و تأثيره على القاعدة و عملها ,, حتى لا يقعوا في مشاكل ... ببساطة ... عندما تختار Simple  فإنك لن تستطيع إستعادة القاعدة إلا إلى لحظة آخذ الــ backup  ..مثال :  يعني لو عملت نسخة احتياطية (backup)  عند الساعة الواحدة , ثم  تم إجراء تعديل على البيانات , ثم أخذت نسخة احتياطية عند الساعة الثانية , ثم تم إجراء تعديل على البيانات , ثم طلب منك إعادة قاعدة البيانات كما كانت عند الساعة الواحدة و أربعين دقيقة فإنك لن تستطيع فعل ذلك (في حال الــ simple)  فإما تعيدها إلى حالتها كما كانت عند الساعة الواحدة , أو إلى حالتها كما كانت عند الساعة الثانية أي فقط عند لحظة أخذ نسخ احتياطية من القاعدة .. أما لوكنت تستخدم الــ Full recovery  فإنه يمكن إعادتها إلى أي لحظة تريدها (طبعا بين عمليتي باك آب) ..  (يتم تحديد الوقت المطلوب في الخيار To a point in time في مربع الحوار restore database )
  4. لا يفضل إجراء الكثير من عمليات الــ Shrink , فهذه المساحة , ليست مهدورة , بل يتم استخدامها عندما يزداد حجم البيانات في القاعدة . و أنا أرى أنه من الأفضل أن يكون هناك مساحة فارغة داخل القاعدة بشكل كافي, حتى تكون القاعدة مخزنة بشكل متسلسل على الهارد ديسك بدلا من ان يزداد حجمها بشكل تدريجي , فيقوم نظام التشغيل بتجزئة الملف بشكل غير متسلسل ,بسبب وجود ملفات جديدة للمستخدم ... مما يجعله بطيئا (إلى حد ما) ... لاحظ في الموضوع السابق كان بإمكاننا تقليص  الحجم حتى 30424 و لكن اقترحت التقليص إلى 35000 بحيث يبقى هناك مساحة كافية محجوزة للاستخدام :)
  5. الــ Shrink database  يعني عمل Shrink  على كل ملفات القاعدة سواء أكانت log  أو data  .. أما Shrink Files  فانت تحدد الملف المطلوب  (log  أو data)..
  6. How to Restore a Microsoft SQL Database to a Point-in-Time رابط .
  7. A Quick Script for Point in Time Recovery رابط .

تم تعديل هذه المشاركة بواسطة حسام الشامي في 23 فبراير 2014 في 22:56

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#11

احسنت ا- حسام


ولكنك لم ترد على الصوره الاخيره


ماذا يحدث اذا عملنا الشرنك من


task - shrink- database


بدلا من اختيار File


#12
تيجر 2000 كتب:

 

احسنت ا- حسام

ولكنك لم ترد على الصوره الاخيره

ماذا يحدث اذا عملنا الشرنك من

task - shrink- database

بدلا من اختيار File

 

أجبت عليه في البند الخامس من المشاركة السابقة :)

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#13

يعنى ممكن اريح دماغى واختار شرنك داتابيز والسيكوال يتصرف ;)


ولا الافضل اعمل كل ملف على حدا :rolleyes:


#14
تيجر 2000 كتب:

 

يعنى ممكن اريح دماغى واختار شرنك داتابيز والسيكوال يتصرف ;)

ولا الافضل اعمل كل ملف على حدا :rolleyes:

 

أنا أفضل كل ملف على حدا .. بحيث تعرف بالتفصيل كل ملف كم حجمه قبل و بعد التقليص .. و تحديد الحجم المطلوب للتقليص حسب الخيارات المتاحة لنا ..

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#15

0c31424c61fb02.gif


#16

بارك الله بك أخي ..

:)

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#17

السلام عليكم اخى حسام


 


عند عمل الشرنك عن طريق query


فأنه يتم تقليل حجم قاعده البيانات بالفعل على الهارد ديسك


ولكن تظهر هذه الرساله الملونه باللون الاصفر فما معنى ذلك ؟


 


0c31424d66fb03.jpg


تم تعديل هذه المشاركة بواسطة تيجر 2000 في 24 فبراير 2014 في 10:11

#18

السلام عليكم ...

  1. انت تستخدم الـــ Full recovery model  و يوجد بعض السجلات في الــ log لم تتم إنشاء backup  لها أي أنه تم إدخال بيانات للقاعدة بعد آخر عملية backup .. لذلك سيكوال سيرفر لن يحذفها لانه ربما يستخدمها في عمليات الاستعادة في حال حصول مشاكل عنده..
  2. نفذ الأمر التالي :
    SELECT log_reuse_wait_desc FROM sys.databases WHERE NAME = N'DB02';

    مع إدخال اسم قاعدة البيانات بدلا من DB02  كي يعطيك حالة الــ log  للقاعدة .. فلو أعطى NOTHING  هذا يعني أنه لا سجلات في الــ Log  قيد الاستخدام و بالتالي يمكن تنفيذ الأمر (DBCC SHRINKFILE) و يقوم بعمله بشكل كامل .. أما لو أعطى (LOG_BACKUP) فهذا يعني ان الــ log  بحاجة ان تعمل له backup  لأنه يحوي سجلات جديدة و لم يتم إنشاء backup  لها ..

  3. الحل الأول : إما نجعل الــ recovery model  بالقيمة simple  و هذا كما ذكرنا له سيئاته , حيث لا يمكننا التراجع إلى نقطة زمنية معينة (to point of time)  ثم نعمل Shrink  ..

  4. الحل الثاني : نعمل backup  للــ log بحيث أن السجلات في الــ Log  تصبح متاحة للحذف لان سيكوال سيرفر يحددها أنه تم عمل backup  لها و بالتالي يمكن حذفها بأمان ... يجب استخدام الأمرين معا (back up + Shrink):

    SELECT log_reuse_wait_desc FROM sys.databases WHERE NAME = N'DB02';
    GO
    BACKUP LOG DB02 TO DISK = 'd:\Db02_log_.bak'
    GO
    DBCC SHRINKFILE (N'DB02_Log',0)
    GO
    SELECT log_reuse_wait_desc FROM sys.databases WHERE NAME = N'DB02';
    GO
  5. الحل الثالث : و هو الأفضل ..  إبقاء هذه السجلات في الــ log  فلا مشكلة في ذلك و بالمناسبة حجمها ليس كبير  .. لأنه ستنشأ سجلات جديدة في الــ log  عند تعديل البيانات في القاعدة ... و بالتالي لا فائدة من الاستمرار بحذفها ...  فهي تشبه الــ cache  في مستعرض الانترتنت , لو قمت بتفريغ الكاش , ثم فتحت بعض الصفحات , ستجد أن الكاش أصبح فيها ملفات جديدة , فلا فائدة من الاستمرار بحذفها بشكل دائم ..

  6. How to shrink the transaction log file in SQL Server 2005  رابط .

  7. أما رسالة (If DBCC printed error messages, contact your system administrator.) فهي تظهر دائما عند تنفيذ الأمر (DBCC) تفيد أنه لو ظهر لك رسالة خطأ , راجع مدير النظام .. :)

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#19

جزاك الله عنى كل خير يا ا- حسام


والله افدتنى كثيرا


 


ولى سؤال اخر


هل من المناسب عمل شرنك لقاعده البيانات كل سنه مع عمليه الاركيف


ام يتم ذلك بشكل دورى كل شهرين مثلا ؟؟


#20

السلام عليكم ....

بارك الله بك اخي و جزاك الله خيرا ....

في الحقيقة , يتم إجراء عمليات الــ Shrink  في حالات محدودة جدا .. مثلا شركة تقوم بإنشاء قاعدة بيانات بشكل سنوي ... مثلا مبيعات2012 - مبيعات2013 .. فعندما ننتقل لسنة جديدة , لن يتم إدخال البيانات في قواعد البيانات السابقة , لذلك نعمل shrink  لها كي نستفيد من المساحة الفارغة داخل القاعدة طالما أن القاعدة تستخدم فقط للقراءة منها ..

أو مثلا لدينا قاعدة بيانات و نريد نقلها لمكان جديد و تم مسح بعض البيانات منها و لكن بقي الحجم كبيرا مثلا (500 جيغا).. فنعمل لها shrink  كي يكون نقلها سهلا ... نقلص حجمها لــ 20 جيغا مثلا ..

 

ما عدا ذلك , كما ذكرت سابقا .. لا يفضل إجراء shrink  .. لان ملفات القاعدة سيزداد حجمها مع الوقت و من مساوئ الــ shrink  أنه يجعل الملف مجزء على الهارديسك ,لأنه لو عملنا شرنك  فيتم تحرير المساحة , فبقوم نظام التشغيل ربما بتخزين ملفات المستخدم في المساحة الفارغة , الآن لو ازداد حجم  ملف القاعدة , سيقوم نظام التشغيل بحجز بلوكات في مكان آخر .. أي أن الملف الواحد أصبح مجزء  (تذكر إلغاء تجزئة القرص) ... و بالتالي بطء في قرائته ...

 

Don’t Touch that Shrink Database Button! رابط .

تم تعديل هذه المشاركة بواسطة حسام الشامي في 24 فبراير 2014 في 23:29

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#21

عفوا اخى حسام لم افهم المقصود بالجمله التاليه :-


 


(من مساوئ الــ shrink  أنه يجعل الملف مجزء على الهارديسك ,لأنه لو عملنا شرنك  فيتم تحرير المساحة , فبقوم نظام التشغيل ربما بتخزين ملفات المستخدم في المساحة الفارغة , الآن لو ازداد حجم  ملف القاعدة , سيقوم نظام التشغيل بحجز بلوكات في مكان آخر .. أي أن الملف الواحد أصبح مجزء  (تذكر إلغاء تجزئة القرص) ... و بالتالي بطء في قرائته ...


 


Don’t Touch that Shrink Database Button! رابط .)


----------------------------------------------------------------------------------------------------------


ويوجد شىء هام حدث اليوم اثناء عمليه الشرنك ونسيت اسالك فيه


هذا الشىء هو :-


انه عند النظر الى ملف الداتا اثناء عمليه الشرنك


وجدت التاريخ الموجود فى الفولدر الخاص بقاعده البيانات ان اخر استخدام لهذا الملف من 15-1-2014 (اى منذ شهر تقريبا)


مع ان الملف مستخدم حتى يومنا هذا (مرفق صورة للتوضيح)


فما معنى ذلك ؟؟


0c31424267fb0d.jpg


#22

السلام عليكم ...

بالنسبة للملف المجزئ , دعني أوضح التالي :::

  1. يتكون الهاردرديسك من بلوكات متسلسلة , افترض أن لها ارقام متسلسلة ...1 , 2 , 3 , .....
  2. لنفرض اننا قمنا بإنشاء ملف1 , فيتم تخزينة في البلوك1 و البلوك2 ...و البلوك3 ...
  3. ثم قمنا بعدها بإنشاء ملف2 و تم تخزينه في البلوك4 و البلوك5
  4. الآن , رجعنا و فتحنا الملف1 و قمنا بكتابة بيانات جديدة فيه , أي حجمه أصبح أكبر ... البيانات الجديدة يتم تخزينها في البلوك6 و البلوك7 مثلا .. أي أصبح الملف1 مخزن في البلوكات (1-2-3-6-7) .. أي انه أصبح ملفا مجزأ .. غير متسلسل ... هو أبطأ في القراءة لانه يتطلب من رأس الهاردديسك ان يقرأ بلوكات متباعدة عن بعضها .. لذلك في ويندوز يوجد إمكانية لما يسمى (إلغاء تجزئة القرص) و الكل يعرفها و هي تقوم بنقل البلوكات التابعة لملف واحد وجعلها متسلسلة ...
  5. في سيكوال سيرفر .. كي لا يتم تخزين ملف القاعدة بشكل مجزء (كما سبق) .. فإن سيكوال سيرفر يقوم بزيادة حجم القاعدة بحيث يحجز الكثير من البلوكات المتسلسلة  داخل القاعدة ,بحيث تصبج البلوكات محجوزة للقاعدة و لا يقوم نظام التشغيل بتخزين أي ملفات فيها  , و لكنها تبقى فارغة أي لا يضع فيها بيانات ..فعندما نضيف بيانات جديدة ,يتم تخزينها في هذه البلوكات الفارغة ... عندما تنتهي البلوكات الفارغة , يتم زيادة حجم القاعدة من جديد (حسب القيمة المحددة في خصائص القاعدة في الخيار growth by  ) ...
  6. الآن لوقمت بعمل shrink فإن سيكوال سيرفر سيقوم يتحرير البلوكات الفارغة من ملفات القاعدة , و يجعلها متاحة لنظام التشغيل كي يخزن فيها ملفات أخرى ..
  7. الآن .قمنا بإدخال بيانات جديدة في القاعدة . .. و لم يعد لدينا بلوكات فارغة في القاعدة .. سيتم حجز بلوكات جديدة للقاعدة ..لكن لو كان هناك ملف مخزن جانب القاعدة .. فإن نظام التشغيل سيحجز بلوكات منتباعدة للقاعدة ..وبهذا الشكل أصبح ملف القاعدة مجزأ ..أي هناك بطئ قليل في القراءة ...

ارجو أن تكون الفكرة قد توضحت ..

 

بالنسبة لتاريخ التعديل ... حقيقة , يوجد الكثير من المشاركات في المنتديات الاجنبية على ان تاريخ تعديل الملف لا يعطي قيمة صحيحة ... و في سيكوال سيرفر هذا قد يكون صحيح , لان الملف يكون مفتوح (لاحظ انه لا يمكن ان تقوم بنقل الملف إذا كانت القاعدة مربوطة مع سيكوال ). ... جرب ان تقوم بــ deattach  للقاعدة ... المفروض يتغير هذا التاريخ ... او ربما هناك سبب أو مشكلة لا اعرفها ... :)

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#23

الف الف شكر لك ا- حسام


والله ما قصرت


0c31424263f100.gif


#24

بارك الله بك أخي .

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#25

السلام عليكم اخى حسام


كيف يمكن ان استفيد من ملف الـ log اذا كان الـ Recovery model هو Full


وفى نفس الوقت لا اقوم انا كمسئول عن السيستم بعمل باك اب لملف اللوج


0c3142426df504.jpg


 


والسؤال بمعنى اخر هو


هل تنحصر اهميه وجود ملف اللوج فى عمل الباك اب


ام انه يوجد طريقه اخرى يمكن ان استرجع بها البيانات من اللوج ان لم اكن اعمل له باك اب


تم تعديل هذه المشاركة بواسطة تيجر 2000 في 25 فبراير 2014 في 16:39

مواضيع مشابهة