خطة صيانة كاملة لـ SQL Server 2008
تحسين قواعد البيانات
هذا القسم مخصص للحفاظ على قواعد البيانات الأمثل. في هذا المثال ، سنقوم بإعداد الكود للقيام بما يلي (انظر الرسم البياني التقريبي لكيفية اتصال الخوادم) ؛
- قاعدة بيانات النسخ الاحتياطي من الخادم المباشر إلى مجلد النسخ الاحتياطي المشترك
- إعادة فهرسة قاعدة البيانات
- قتل جميع الاتصالات واستعادة قاعدة البيانات على خادم التقارير.
- ستكون الخوادم المرتبطة في مقال منفصل قريبًا
- سيكون سجل الشحن في مقال منفصل قريبًا
عند القيام بذلك عبر الخادم ، ستحتاج إلى السماح للحساب الذي يقوم بتشغيله SQL Server من الوصول إلى نظام ملفات الخوادم الهدف.
يتم تشغيل جميع تعليمات SQL البرمجية من قاعدة بيانات أدوات مساعدة ، ويتم تعيين المخطط على "صيانة"
هناك مجموعة من المقالات الأخرى التي كتبناها أدناه والتي قد تهمك.
خطة الصيانة الكاملة
الآن يمكننا إدارة كل مقاطع الكود المنفصلة هذه بإجراء آخر يستدعيهم بالترتيب الصحيح ، وسيتم وضع هذا في الخادم المباشر. يعمل الكود على النحو التالي ؛
- احسب الوقت
- إذا كان المساء أعد فهرسة قاعدة البيانات
- قم بتشغيل نسخة احتياطية من قاعدة البيانات (أضف المكان الذي تريده)
- إذا كان المساء ، قم بعمل نسخة احتياطية من قواعد البيانات الأخرى (أضف المكان الذي تريده)
- قتل الاتصالات واستعادة قاعدة البيانات (أضف المكان الذي تريده)
تمت تجربة هذا الرمز واختباره وتشغيله لفترات من الأشهر دون أي مشاكل.
يرجى ملاحظة أنه يجب الاحتفاظ بتقليص ملفات السجل وملفات قاعدة البيانات إلى الحد الأدنى ، عن طريق تشغيل نسخة احتياطية فإنك تقوم بإفراغ السجل (على الرغم من أنه سيحتفظ بالمساحة المستخدمة). إذا لزم الأمر ، يجب تشغيله خارج ساعات العمل العادية.
SQL Code
Use [utilities]GOCREATE PROC [maint].MaintenancePlan AS BEGINDECLARE @BackupType VARCHAR(1)='E'IF DATEPART(HOUR,GETDATE()) BETWEEN 5 AND 21 BEGINSET @BackupType='D'END--EXEC ('USE TempDb; DBCC SHRINKFILE(templog, 0)');--This is only needed when space is at a premium!--Re-index LiveIF @BackupType='E' EXEC [maint].DatabaseReIndex 'dbname'--Create BackupBACKUP DATABASE TO DISK=N'{backuplocation}{dbname}.bak'WITH NOFORMAT, INIT, NAME =N'{dbname}', SKIP, NOREWIND, NOUNLOAD, STATS= 10;--EXEC ('USE ; DBCC SHRINKFILE(_log, 0)');--This is only needed when space is at a premium!--Backup Other Files at NightIF @BackupType='E' BEGIN EXEC [maint].DatabaseReIndex 'dbname' --Backup Others BACKUP DATABASE [databasename] TO DISK=N'{backuplocation}{dbname2}.bak' WITH FORMAT,INIT, NAME =N'{dbname2}',SKIP, NOREWIND, NOUNLOAD, STATS= 10END--Restore Backups on other serverEXEC [server].[utilities].[maint].KillConnections 'dbname';EXEC [server].[utilities].[maint].RestoreDatabase_{dbname};--Restore Backups on other server for db_2 etcIF @BackupType='E' BEGIN EXEC [server].[utilities].[maint].KillConnections 'dbname2'; EXEC [server].[utilities].[maint].RestoreDatabase_{dbname2};ENDENDGO
قاعدة بيانات النسخ الاحتياطي
للحصول على الكود الخاص بالنسخ الاحتياطي لقاعدة البيانات الخاصة بك ، من الأسهل كتابة الكود من SSMS.
اتبع العملية التي اعتدت استخدامها ، ثم حدد "Script Action to New Query Window".
انسخ هذا الرمز في خطة الصيانة.
إعادة فهرسة قاعدة البيانات
بعد ذلك يمكننا إضافة بعض التعليمات البرمجية لإعادة فهرسة قاعدة البيانات الخاصة بنا ، وهذا مرة أخرى هو إجراء مخزن للمشاركة حيث تحتاج فقط إلى إخبار النظام بالاسم.
لتجنب تكرار الرمز ، يمكنك القراءة عنه على الرابط أدناه.
اقتل الاتصالات
عند إجراء استعادة لقاعدة البيانات ، لا يمكن أن يكون لديك سوى اتصال واحد بها (العملية التي تقوم بالاستعادة) ، وبالتالي يمكننا إنشاء إجراء مخزن لإغلاق جميع الاتصالات باستثناء العملية الحالية. لقد أنشأنا مرة أخرى مقالة منفصلة لهذا الغرض.
استعادة قاعدة البيانات
يمكن أيضًا كتابة هذا الرمز من SQL Server Management Studio. إذا قمت بإضافة هذا الرمز إلى إجراء مخزن ، فيمكنك تسميته من العمليات الأخرى وحتى من الخوادم الأخرى بسهولة. لقد نقلنا هذا إلى مقال منفصل لتغطية المزيد من الخيارات.