لماذا يجب أن أهتم بضغط ملف MS Access .mdb؟

StackOverflow https://stackoverflow.com/questions/74484

  •  09-06-2019
  •  | 
  •  

سؤال

نقوم بتوزيع تطبيق يستخدم ملف MS Access .mdb.لاحظ شخص ما أنه بعد فتح الملف في MS Access، يتقلص حجم الملف كثيرًا.يشير ذلك إلى أن الملف مرشح جيد للضغط، ولكننا لا نوفر الوسائل لمستخدمينا للقيام بذلك.

لذا، سؤالي هو، هل هذا مهم؟هل نهتم؟ما هي الأشياء السيئة التي يمكن أن تحدث إذا لم يقوم مستخدمونا بضغط قاعدة البيانات مطلقًا؟

هل كانت مفيدة؟

المحلول

بالإضافة إلى جعل قاعدة البيانات أصغر حجمًا، فإنها ستعيد حساب الفهارس الموجودة في جداولك وإلغاء تجزئة جداولك مما يجعل الوصول إليها أسرع.كما سيتم العثور على أي تناقضات لا ينبغي أن تحدث أبدًا في قاعدة البيانات الخاصة بك، ولكنها قد تحدث بسبب أخطاء أو أعطال في Access.

لكن الأمر لا يخلو من المخاطر تمامًا -- أ مشكلة في اكسس 2007 قد يقوم أحيانًا بحذف قاعدة البيانات الخاصة بك أثناء العملية.

لذلك يعد هذا أمرًا جيدًا بشكل عام، ولكن قم بإقرانه بروتين احتياطي جيد.مع وجود النسخة الاحتياطية، يمكنك أيضًا التعافي من أي مشكلات مضغوطة "غير قابلة للاسترداد" وإصلاحها بأقل قدر من فقدان البيانات.

نصائح أخرى

تأكد من ضغط قاعدة البيانات وإصلاحها بانتظام، خاصة إذا كان تطبيق قاعدة البيانات يواجه تحديثات متكررة للسجلات وعمليات الحذف والإدراج.لن يؤدي ذلك فقط إلى تقليل حجم ملف قاعدة البيانات إلى الحد الأدنى - مما سيساعد في تسريع عمليات قاعدة البيانات واتصالات الشبكة - بل يؤدي أيضًا إلى إجراء عمليات صيانة لقاعدة البيانات، وهو ما يمثل فائدة أكبر لاستقرار بياناتك.ولكن قبل أن تقوم بضغط قاعدة البيانات، تأكد من عمل نسخة احتياطية من الملف، فقط في حالة حدوث خطأ ما أثناء الضغط.

يقوم Jet بضغط قاعدة بيانات لإعادة تنظيم المحتوى داخل الملف بحيث تكون كل 4 كيلو بايت "صفحة" (2 كيلو بايت لـ Access 95/97) من المساحة المخصصة للبيانات أو الجداول أو الفهارس موجودة في منطقة متجاورة.يستعيد Jet المسافة من السجلات التي تم وضع علامة عليها كمحذوفة ويعيد كتابة السجلات في كل جدول بترتيب المفتاح الأساسي، مثل فهرس متفاوت المسافات.سيؤدي هذا إلى جعل عمليات القراءة/الكتابة في قاعدة بياناتك أسرع.

يقوم Jet أيضًا بتحديث إحصائيات الجدول أثناء الضغط.يتضمن ذلك تحديد عدد السجلات في كل جدول، مما سيسمح لـ Jet باستخدام الطريقة المثلى للبحث عن السجلات، إما باستخدام الفهارس أو باستخدام فحص الجدول الكامل عندما يكون هناك عدد قليل من السجلات.بعد الضغط، قم بتشغيل كل استعلام مخزن بحيث يقوم Jet بإعادة تحسينه باستخدام إحصائيات الجدول المحدثة هذه، والتي يمكنها تحسين أداء الاستعلام.

تجمع إصدارات 2000 و2002 و2003 و2007 بين عملية الضغط وعملية الإصلاح إذا لزم الأمر.عملية الإصلاح:

1 - مسح المعاملات غير المكتملة

2- مقارنة البيانات الموجودة في جداول النظام مع البيانات الموجودة في الجداول الفعلية والاستعلامات والفهارس وإصلاح الأخطاء

3 - إصلاح أخطاء بنية البيانات البسيطة جدًا، مثل المؤشرات المفقودة إلى سجلات متعددة الصفحات (وهو أمر لا ينجح دائمًا ولهذا السبب لا يعمل "الإصلاح" دائمًا لحفظ قاعدة بيانات Access التالفة)

4 - يستبدل المعلومات المفقودة حول بنية مشروع VBA

5 - يستبدل المعلومات المفقودة اللازمة لفتح نموذج وتقرير ووحدة نمطية

6 - إصلاح الأخطاء البسيطة في بنية الكائن في النماذج والتقارير والوحدات النمطية

الأشياء السيئة التي يمكن أن تحدث إذا لم يقوم المستخدمون أبدًا بضغط/إصلاح قاعدة البيانات هي أنها ستصبح بطيئة بسبب الانتفاخ، وقد تصبح غير مستقرة - مما يعني أنها تالفة.

إن ضغط قاعدة بيانات Access (المعروفة أيضًا بقاعدة بيانات MS JET) يشبه إلى حد ما إلغاء تجزئة القرص الصلب.الوصول (أو، بشكل أكثر دقة، محرك قاعدة بيانات MS JET) ليس جيدًا جدًا فيما يتعلق بإعادة استخدام المساحة - لذلك عند تحديث سجل أو إدراجه أو حذفه، لا تتم دائمًا استعادة المساحة - بدلاً من ذلك، تتم إضافة مساحة جديدة إلى نهاية ملف قاعدة البيانات واستخدامه بدلا من ذلك.

القاعدة العامة هي أنه إذا كانت قاعدة بيانات [Access] الخاصة بك ستتم كتابتها (تحديثها أو تغييرها أو إضافتها)، فيجب عليك السماح بضغطها - وإلا فسيتم ذلك سوف تنمو في الحجم (أكثر بكثير من مجرد البيانات التي أضفتها أيضًا).

لذلك، للإجابة على سؤالك (الأسئلة):

  • نعم، لا يهم (ما لم تكن قاعدة البيانات الخاصة بك للقراءة فقط).
  • يجب أن تهتم (إلا إذا كنت لا تهتم بمساحة القرص الخاصة بالمستخدم).
  • إذا لم تقم بضغط قاعدة بيانات Access، فمع مرور الوقت سوف تنمو بشكل أكبر بكثير مما قد توحي به البيانات الموجودة بداخلها، مما يؤدي إلى إبطاء الأداء وزيادة احتمالات الأخطاء والفساد.(باعتبارها قاعدة بيانات قائمة على الملفات، فإن ملفات قاعدة بيانات Access معروفة بالفساد، خاصة عند الوصول إليها عبر الشبكة.)

هذه المقالة على كيفية ضغط قاعدة بيانات Microsoft Access من خلال ADO سيمنحك نقطة بداية جيدة إذا قررت إضافة هذه الوظيفة إلى تطبيقك.

سأقدم للمستخدمين طريقة لضغط قاعدة البيانات.لقد رأيت قواعد البيانات تنمو إلى أكثر من 600 ميغابايت عندما ينخفض ​​الضغط إلى 60-80.

لترديد صدى نيت:في الإصدارات الأقدم، كانت لدي قواعد بيانات تالفة - لذلك يعد نظام النسخ الاحتياطي الجيد أمرًا ضروريًا.لن أقوم بترميز أي شيء في تطبيقك للقيام بذلك تلقائيًا.ومع ذلك، إذا وجد العميل أن قاعدة البيانات الخاصة به تعمل ببطء شديد، فيمكن لموظفي الدعم الفني التحدث معه من خلالها إذا لزم الأمر (مع النسخ الاحتياطية المناسبة بالطبع).

إذا أصبحت قاعدة البيانات الخاصة بهم كبيرة جدًا بحيث أصبح الضغط أمرًا ضروريًا، فربما حان الوقت للانتقال إلى MS-SQL.

إذا كنت لا تقدم للمستخدمين طريقة لفك الضغط ولم يمثل الحجم الأولي مشكلة في البداية، فلا داعي للقلق.

لقد وجدت أن ملفات قاعدة بيانات Access تتلف دائمًا بمرور الوقت.يساعد ضغطها وإصلاحها على إيقاف ذلك لفترة من الوقت.

حسنًا، هذا مهم حقًا!يستمر حجم ملفات mdb في التزايد في كل مرة تقوم فيها بمعالجة بياناتها، حتى تصل إلى حجم لا يطاق.لكن ليس عليك توفير طريقة ضغط من خلال الواجهة الخاصة بك.يمكنك إضافة التعليمة البرمجية التالية في ملف mdb الخاص بك لضغطه في كل مرة يتم فيها إغلاق الملف:

Application.SetOption ("الضغط التلقائي")، 1

وأود أيضا للغاية أوصي بالبحث في VistaDB (http://www.vistadb.net/) أو SQL مضغوط (http://www.microsoft.com/sql/editions/compact/) للتطبيق الخاص بك.قد لا تكون هذه مناسبة لتطبيقك...ولكنها بالتأكيد تستحق نظرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top