-
في عملية استخدام SQL Server، غالبًا ما نواجه مواقف يكون فيها سجل قاعدة البيانات كبيرًا جدًا. عند مواجهة هذه المشكلة، نقدم طريقتين لحلها.
الطريقة الأولى
في الظروف العادية، لا يمكن لتقليص قاعدة بيانات SQL تقليل حجم قاعدة البيانات إلى حد كبير، وتتمثل وظيفتها الرئيسية في تقليص حجم السجل، ويجب إجراء هذه العملية بانتظام لمنع سجل قاعدة البيانات من أن يصبح كبيرًا جدًا.
1. قم بتعيين وضع قاعدة البيانات على الوضع البسيط: افتح SQL Enterprise Manager، وانقر فوق Microsoft SQL Server في الدليل الجذر لوحدة التحكم-->مجموعة SQL Server-->انقر نقرًا مزدوجًا لفتح الخادم الخاص بك-->انقر نقرًا مزدوجًا لفتح قاعدة البيانات الدليل-->حدد اسم قاعدة البيانات الخاصة بك (مثل منتدى قاعدة بيانات المنتدى)-->ثم انقر بزر الماوس الأيمن وحدد خصائص-->حدد الخيارات-->حدد "بسيط" في وضع تجاوز الفشل، ثم اضغط على "موافق" للحفظ
2. انقر بزر الماوس الأيمن على قاعدة البيانات الحالية واعرض قاعدة البيانات المتقلصة في كافة المهام. بشكل عام، لا يلزم تعديل الإعدادات الافتراضية، فقط انقر فوق "موافق".
3. بعد تقليص قاعدة البيانات، يوصى بإعادة تعيين خصائص قاعدة البيانات الخاصة بك إلى الوضع القياسي. طريقة التشغيل هي نفس النقطة الأولى، لأن السجل غالبًا ما يكون أساسًا مهمًا لاستعادة قاعدة البيانات في بعض الظروف غير الطبيعية
قم بضبط NOCOUNT على
قم بتعريف @LogicalFileName اسم النظام،
@ماكس مينوتس إنت،
@NewSizeINT
USE tablename - اسم قاعدة البيانات التي سيتم تشغيلها عليها
SELECT @LogicalFileName = 'tablename_log'، - اسم ملف السجل
@MaxMinutes = 10، - الحد الأقصى للوقت المسموح به لالتفاف السجل.
@NewSize = 1 - حجم ملف السجل الذي تريد تعيينه (M)
--الإعداد/التهيئة
أعلن @OriginalSize int
حدد @OriginalSize = size
من ملفات النظام
أين الاسم = @LogicalFileName
حدد "الحجم الأصلي لـ" + db_name() + "السجل هو" +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K صفحة أو ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
من ملفات النظام
أين الاسم = @LogicalFileName
إنشاء جدول DummyTrans
(DummyColumn char (8000) ليس فارغًا)
أعلن @Counter INT،
@StartTime التاريخ والوقت،
@TruncLog VARCHAR(255)
حدد @StartTime = GETDATE()،
@TruncLog = 'سجل النسخ الاحتياطي' + db_name() + 'مع TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
- لف السجل إذا لزم الأمر.
بينما @MaxMinutes > DATEDIFF (mi، @StartTime، GETDATE()) - لم ينته الوقت بعد
AND @OriginalSize = (اختر الحجم من ملفات sys حيث الاسم = @LogicalFileName)
و (@OriginalSize * 8 /1024) > @NewSize
ابدأ--الحلقة الخارجية.
حدد @Counter = 0
بينما ((@Counter < @OriginalSize / 16) و (@Counter <50000))
ابدأ - التحديث
أدخل قيم DummyTrans ("سجل التعبئة")
حذف DummyTrans
حدد @Counter = @Counter + 1
نهاية
EXEC (@TruncLog)
نهاية
حدد "الحجم النهائي لـ" + db_name() + "السجل هو" +
CONVERT(VARCHAR(30),size) + '8K صفحة أو' +
تحويل (VARCHAR(30)،(الحجم*8/1024)) + 'ميجا بايت'
من ملفات النظام
أين الاسم = @LogicalFileName
إسقاط الجدول DummyTrans
قم بإيقاف تشغيل NOCOUNT