تقليص سجل المعاملات لقاعدة بيانات SQL Server 2005 التي لها نسخ متطابقة

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

سؤال

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

أنا لست DBA، لكني فريق واحد يعمل على موقع ويب ضخم بدون تمويل إضافي لهيئات إضافية، لذلك أبذل قصارى جهدي.

خطتنا الاحتياطية سيئة للغاية، وأواجه صعوبة كبيرة في تحسينها.يوجد حاليًا خادمان يعملان بنظام SQL Server 2005.لدي قاعدة بيانات معكوسة (لا يوجد شاهد) ويبدو أنها تعمل بشكل جيد.أقوم بعمل نسخة احتياطية كاملة عند الظهر وعند منتصف الليل.يتم نسخ هذه الملفات احتياطيًا على شريط بواسطة مزود الخدمة الخاص بنا كل ليلة، وأقوم بنسخ ملفات النسخ الاحتياطي على أقراص DVD أسبوعيًا للاحتفاظ بالسجلات القديمة في متناول اليد.في النهاية، أرغب في التبديل إلى شحن السجل، نظرًا لأن النسخ المتطابق يبدو عديم الفائدة نوعًا ما بدون خادم شاهد.

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

مرتكز على صفحة الويب هذه, ، لقد حاولت هذا:

USE dbname
GO
CHECKPOINT
GO
BACKUP LOG dbname TO DISK='NULL' WITH NOFORMAT, INIT, NAME = N'dbnameLog Backup', SKIP, NOREWIND, NOUNLOAD
GO
DBCC SHRINKFILE('dbname_Log', 2048)
GO

لكن هذا لم ينجح.كل شيء آخر وجدته يقول أنني بحاجة إلى تعطيل المرآة قبل تشغيل أمر سجل النسخ الاحتياطي حتى يعمل.

سؤالي (TL;DR)

كيف يمكنني تقليص ملف سجل المعاملات الخاص بي دون تعطيل النسخة المتطابقة؟

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

المحلول 3

اعتقدت أنني يجب أن أجيب على هذا السؤال لأنه تم نسيانه.

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

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

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

نصائح أخرى

حسنا، من الناحية الفنية فإنه من الممكن تقليص LOG نسخ متطابقة. ما تقوم به مشكلة هو سجل النسخ الاحتياطي مع truncate_only. المتطابق لا تقبل ذلك. حتى طريقة واحدة هي لإجراء النسخ الاحتياطي سجل على القرص:

use [DATABASE_NAME]
checkpoint
BACKUP LOG [DATABASE_NAME] TO DISK =  'C:\LOG_BACKUPS\DATABASE_NAME'
dbcc shrinkfile(DATABASE_NAME_Log,1)

وهذا هو جزء من خطة الصيانة الحالية لدينا، وأنه كان يعمل withot مشاكل لمدة 2 سنة.

إذا يسقط مثيل الملقم مرآة وراء مثيل الملقم الرئيسي، ومقدار المساحة سجل نشط سوف تنمو. في هذه الحالة، قد تحتاج إلى التوقف عن قاعدة بيانات النسخ المتطابق، تأخذ نسخة احتياطية السجل الذي باقتطاع السجل، وتطبيق ذلك النسخ الاحتياطي السجل إلى قاعدة بيانات متطابقة وإعادة يعكس، وليس الجواب كنت تأمل، وأنا أعلم = (

لتقليص ملفاتنا قد تتمكن من محاولة البرنامج النصي التالي:

وsp_dboption إكسيك DBNAME، "TRUNC. تسجيل الدخول chkpt. '، صحيح نقطة تفتيش SHRINKFILE DBCC (DBNameFileName، 500)؛ DBNAME sp_dboption إكسيك، "TRUNC. تسجيل الدخول chkpt. '، كاذبة

وآمل أن يساعد هذا.

ومن الممكن تقليص ملف المعاملات لقاعدة بيانات مع مرآة، يجب إجراء النسخ الاحتياطي كما أن هناك نشاطا ملف سجل الظاهري: HTTP: / /www.xoowiki.com/Article/SQL-Server/tronquer-journal-de-log-sur-base-en-miroir-499.aspx

  1. قم بإيقاف تشغيل شريك المرآة باستخدام .. ALTER [DatabaseName] SET PARTNER OFF
  2. خذ نسخة احتياطية من سجل المعاملات على رأس المال.BACKUP LOG [DatabaseName] TO DISK='Drive:\DatabaseName_log_datetime.trn'
  3. انسخ هذا DatabaseName_log_datetime.trn إلى أي مكان على خادم المرآة.
  4. قم باستعادة سجل المعاملات هذا باستخدام NoRecovery الخيار.. على قاعدة بيانات المرآة.RESTORE LOG [DatabaseName] FROM DISK ='Drive:\DatabaseName_log_datetime.trn'
  5. تقليص ملف السجل على الخادم الرئيسي والمرآة.
  6. مرة أخرى، قم بإجراء نسخة احتياطية لسجل المعاملات على أساس المبدأ.. وقم باستعادة سجل المعاملات هذا مع عدم وجود خيار استرداد.. على قاعدة البيانات التي لها نسخ متطابقة على خادم متطابق.
  7. تكوين أمان النسخ المتطابق.

واختبار بعض الاقتراحات في هذا المنصب، وجدت أنه بعد احتياطية كاملة، قيادة نقاط التفتيش، والنسخ الاحتياطي سجل المعاملات، يمكن مقعد والرئيسي حجم سجل المعاملات قاعدة البيانات. ثم تتم مزامنة قاعدة البيانات مرآة حجم سجل المعاملات مع مدير تقلصت الحجم.

USE [DATABASE_NAME];
BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;
CHECKPOINT;
WAITFOR DELAY '00:00:02';
BACKUP LOG [DATABASE_NAME] TO DISK = 'E:\Backup\DATABASE_NAME_TL.trn';
WAITFOR DELAY '00:00:02';
DBCC SHRINKFILE('DATABASE_NAME_log', 500);

استخدم OSQL يمكن تشغيل أوامر SQL المذكورة أعلاه دفعة واحدة DOS، وWAITFOR تأخير أمر لا بد منه إذا تشغيل دفعة واحدة، منها مثلا.

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe -E -S "DATABASE_SERVER" -Q "USE [DATABASE_NAME]; BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;"

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

BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_DIFF.bak' WITH DIFFERENTIAL;

والسبيل الوحيد: 1) وقف يعكس 2) تقليص الملفات على مدير المدرسة 3) كاملة احتياطية من مدير المدرسة، + jrnl المعاملة 4) الخادم توقف مرآة، حذف يمول وLDF من mirrorDatabase 5) بدء mirrorser وحذف mirrorDatabase 6) استعادة النسخ الاحتياطي مع عدم وجود انتعاش 3) على mirroServer 7) إعادة يعكس عوف!

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

وبعد ذلك كل ما عليك القيام به هو حذف بانتظام ملف النسخ الاحتياطي. على سبيل المثال يمكن القيام بذلك:

USE your_database
GO
BACKUP LOG your_database TO DISK = 'x:\your_backup_filepath\your_database.tlog'
GO

هل لأنها خارج ساعات رغم ذلك إذا كنت تستطيع.

وأنا لا أعرف لماذا هذا يعمل، إلا أنه لا يعمل في الواقع. I تشغيل هذا ككتلة في إطار الاستعلام. استخدام في التحفظ الخاصة بك. سيكون بالتأكيد سيكون من الرائع إذا كان microsoftie أن يعلق.

use my_database
dbcc shrinkfile ( my_database_log, 1000 )
use my_database
dbcc shrinkfile ( my_database_log, 1000 )
alter database my_database
  modify file ( 
    name = my_database_log, 
    size = 1000MB
  )

وأنت لا يمكن حقا أن تفعل أي شيء لقاعدة بيانات متطابقة من دون إخراجها من المرآة، وطالما انها ليست قاعدة البيانات الرئيسية.

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

إذا كنت تريد أن تجعل من يتقلص أن ينكمش ملف الصفقة يمكنك استخدام T-SQL التالية فقط:

USE [your_db_name]
GO
DBCC SHRINKFILE (N'your_db_name_logfile' , 0, TRUNCATEONLY)
GO

وبعد ذلك يمكنك فقط استخدام هذا مقتطف لكل قاعدة البيانات وتشغيلها الحق بعد تشغيل النسخ الاحتياطي.

وهذا يجب أن نضع ملف السجل صغيرة على الخادم الرئيسي، وبالتالي على ملقم ثانوي / مرآة.

وآمل أن يساعد هذا.

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

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

و** يمكن القيام به تقلص في النسخ المتطابق، ما لا نستطيع فعله هو اقتطاع السجل، وسجل هو ما يتم شحنها إلى خادم مرآة ثم مدير ينتظر الإقرار.

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

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