الصفحة الرئيسية » howto » دفعة البرنامج النصي لجعل صيانة قاعدة بيانات خادم SQL بسيطة

    دفعة البرنامج النصي لجعل صيانة قاعدة بيانات خادم SQL بسيطة

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

    Compacting / Shrinking a Database [/ Compact]

    هناك العديد من العوامل التي تساهم في مساحة القرص الفعلية يستخدم قاعدة بيانات SQL Server. على سبيل المثال لا الحصر:

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

    سيؤدي ضغط (أو تقليص) قاعدة البيانات إلى استعادة مساحة القرص غير المستخدمة. بالنسبة لقواعد البيانات الصغيرة (200 ميغابايت أو أقل) ، لن يكون ذلك عادة كثيرًا ، ولكن بالنسبة لقواعد البيانات الكبيرة (1 غيغابايت أو أكثر) قد تكون المساحة المستعادة كبيرة.

    إعادة فهرسة قاعدة بيانات [/ Reindex]

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

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

    التحقق من السلامة [/ تحقق]

    من أجل أن تظل قاعدة البيانات وظيفية وتنتج نتائج دقيقة ، هناك العديد من عناصر السلامة التي يجب أن تكون في مكانها الصحيح. لحسن الحظ ، ليست مشاكل السلامة البدنية و / أو المنطقية شائعة جدًا ، ولكن من الممارسات الجيدة أن تقوم أحيانًا بتشغيل عملية التحقق من التكامل في قواعد البيانات ومراجعة النتائج.

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

    باستخدام البرنامج النصي

    البرنامج النصي SQLMaint الدفعي متوافق مع SQL 2005 وأعلى ويجب تشغيلها على جهاز يحتوي على أداة SQLCMD مثبتة (مثبتة كجزء من تثبيت SQL Server). من المستحسن إسقاط هذا البرنامج النصي في موقع معين في متغير PATH الخاص بـ Windows (أي C: Windows) بحيث يمكن بسهولة استدعاء مثل أي تطبيق آخر من سطر الأوامر.

    لعرض معلومات المساعدة ، ما عليك سوى إدخال:

    SQLMaint /?

    أمثلة

    لتشغيل مضغوط ثم التحقق من قاعدة البيانات "MyDB" باستخدام اتصال موثوق به:

    SQLMaint MyDB / ضغط / تحقق

    لتشغيل reindex ثم ضغط على "MyDB" على سبيل المثال اسمه "خاص" باستخدام "سا" المستخدم مع كلمة مرور "123456":

    SQLMaint MyDB /S:.Special / U: sa / P: 123456 / Reindex / Compact

    استخدام من داخل من البرنامج النصي الدفعي

    بينما يمكن استخدام البرنامج النصي الدفعي SQLMaint مثل تطبيق من سطر الأوامر ، عند استخدامه داخل برنامج نصي دفعي آخر ، يجب أن يكون مسبوقاً مع الكلمة CALL.

    على سبيل المثال ، يقوم هذا البرنامج النصي بتشغيل كافة مهام الصيانة على كل قاعدة بيانات غير خاصة بالنظام على تثبيت SQL Server افتراضي باستخدام المصادقة الموثوقة:

    @صدى خارج
    SETLOCAL EnableExtensions
    SET DBList = "٪ TEMP٪ DBList.txt"
    SqlCmd -E -h-1 -w 300 -Q “SET NoCount ON؛ SELECT Name FROM master.dbo.sysDatabases WHERE Name Not IN ('master'، 'model'، 'msdb'، 'tempdb') ”>٪ DBList٪
    FOR / F "usebackq tokens = 1" ٪٪ i IN (٪ DBList٪) DO (
    CALL SQLMaint "٪٪ i" / Compact / Reindex / Verify
    صدى صوت +++++++++++
    )
    إذا كان EXIST٪ DBList٪ DEL / F / Q٪ DBList٪
    ENDLOCAL

    قم بتنزيل SQLMaint Batch Script من SysadminGeek.com