تكرار مفتاح الصفوف من الجدول sys.syscommittab في SQL Server

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

اضغط هنا لرابط المقالة باللغة الانجليزية3083381
الأعراض
عند مقارنة سيسكوميتابل في الذاكرة وملف sys.syscommittab على القرص في Microsoft SQL Server، قد تشاهد الصفوف الرئيسية المكررة. قد يؤدي هذه القيم المكررة عمليات النسخ الاحتياطي، وفشل.

السبب
تحدث هذه المشكلة بسبب مشكلة غير معروفة في تعقب التغييرات SQL Server.
الحل
لحل العوامل المسببة مفاتيح مكررة، تطبيق الإصلاحات التالية وفق ما يناسب الموقف لديك:

إصلاح: فشل عملية النسخ احتياطي على قاعدة بيانات SQL Server 2008 أو SQL Server 2008 R2 إذا قمت بتمكين تعقب التغييرات على قاعدة البيانات هذه
http://support.microsoft.com/kb/2522893

إصلاح: فشل النسخ الاحتياطي في SQL Server 2008 أو SQL Server 2008 R2 2012 ملقم SQL إذا قمت بتمكين تعقب التغييرات على قاعدة البيانات
http://support.microsoft.com/kb/2603910

تصحيح: عملية النسخ الاحتياطي فشل في قاعدة بيانات SQL Server 2008 أو SQL Server 2008 R2 أو SQL Server 2012 بعد تمكين تعقب التغييرات
http://support.microsoft.com/kb/2682488

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

لإزالة الصفوف المكررة، استخدم إحدى الطرق التالية.

الطريقة الأولى: تعطيل وتمكين تعقب التغييرات

  1. تعطيل تعقب التغييرات على الجداول المتأثرة وقاعدة البيانات.
  2. إصدار قاعدة بيانات نقطة التفتيش يدوي.
  3. تمكين تعقب التغييرات على قاعدة البيانات المتأثرة والجداول.

لمزيد من المعلومات حول تعقب التغييرات، راجعتمكين وتعطيل تعقب التغييرات.

لمزيد من المعلومات حول كيفية إصدار نقطة اختبار يدوي، راجع حاجز (Transact SQL)

الطريقة الثانية: حذف الصفوف المكررة يدوياً

  1. نسخ برنامج نصي SQL للعمليات في نهاية القسم "حل المشكلة" في محرر نص.
  2. تحديد موقع <AFFECTED_DB>النائب في البرنامج النصي، واستبدالها باسم قاعدة البيانات المتأثرة.</AFFECTED_DB>
  3. حفظ البرنامج النصي المعدلة إلى القرص الثابت الخاص بك كملف.sql. على سبيل المثال:
    C:\temp\remove_duplicates.sql
إذا كنت تستخدم SQL Server 2014، يجب منح كل خدمة SID التحكم الكامل للملفات mssqlsystemresource.ldf و mssqlsystemresource.mdf. للقيام ذلك، اتبع الخطوات التالية:
  1. انتقل إلى الدليل بين يتوافق مع معرف المثيل الخاص بك "." على سبيل المثال:

    مايكروسوفت SQL من C:\Program Server\<Instance id="">\MSSQL\Binn</Instance>
  2. فتح خصائص mssqlsystemresource.ldf و mssqlsystemresource.mdf، ومن ثم انقر فوق علامة التبويب أمان .
  3. حدد موقع SID كل خدمة خدمة SQL Server، ثم لاحظ الأذونات الافتراضية:

    * قراءة آند التنفيذ
    * القراءة
  4. خدمة SQL Server منح التحكم الكامل SID كل خدمة ثم قم بإغلاق مربع حوار الأذونات.
  5. بدء تشغيل SQL Server في وضع المستخدم المفرد. لمزيد من المعلومات، راجعبدء تشغيل SQL Server في وضع المستخدم المفرد.
  6. Usea sqlcmdسطر الأوامر للاتصال بخادم SQL ضمن اتصال مسؤول مخصص (DAC). على سبيل المثال:

    sqlcmd-S PRODSERV1\MSSQLSERVER--E-i c:\temp\remove_duplicates.sql
    ثم، تنفيذ البرنامج النصي SQL لتعديله.
  7. بدء تشغيل ملقم SQL في وضع متعدد المستخدمين، والتأكد من أن النسخ الاحتياطي وعمليات تفتيش مقابل قاعدة البيانات المتأثرة بنجاح. إذا تم استخدام الخطوة 4، يعود الأذونات إلى القيم الافتراضية.

البرنامج النصي SQL للعمليات

--Create a temporary database to store the necessary rows required to remove the duplicate dataif exists(select 1 from sys.databases where name = 'dbChangeTrackingMetadata')begindrop database dbChangeTrackingMetadataendgocreate database dbChangeTrackingMetadatago --Table to store the contents of the SYSCOMMITTABLEuse dbChangeTrackingMetadatagocreate table dbo.t_SYSCOMMITTABLE (commit_ts bigint,xdes_id bigint,commit_lbn bigint,commit_csn bigint,commit_time datetime)go --Table to store the duplicate rows to be removed from the sys.syscommittab tablecreate table dbo.t_syscommittab (commit_ts bigint,xdes_id bigint,commit_lbn bigint,commit_csn bigint,commit_time datetime,dbfragid int)go --Enable the usage of OPENROWSETexec sys.sp_setbuildresource 1go --Change <AFFECTED_DB> to the database that contains the duplicate valuesUSE <AFFECTED DB>godeclare @rowcount bigintSET @rowcount = 0 --Copy all rows from the SYSCOMMITTABLE into the temporary databaseinsert into dbChangeTrackingMetadata.dbo.t_SYSCOMMITTABLESELECT commit_ts, xdes_id, commit_lbn, commit_csn, commit_timeFROM OpenRowset (table SYSCOMMITTABLE, db_id (), 0, 0) --Save the duplicate values into the temporary databaseinsert into dbChangeTrackingMetadata.dbo.t_syscommittabselect ondisk_ct.* from sys.syscommittab as ondisk_ctjoin dbChangeTrackingMetadata.dbo.t_SYSCOMMITTABLE as inmem_cton ondisk_ct.xdes_id = inmem_ct.xdes_id --Delete the duplicate valuesdelete from sys.syscommittabwhere xdes_id in ( select xdes_id from dbChangeTrackingMetadata.dbo.t_syscommittab )set @rowcount = @@rowcountif (@rowcount > 0)beginprint ''print 'DELETED '+CAST(@rowcount as NVARCHAR(10))+' rows from sys.syscommittab that were also stored in SYSCOMMITTABLE'print ''endelsebeginprint ''print 'Failed to DELETE DUP rows from sys.syscommittab'print ''endexec sys.sp_setbuildresource 0go

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 3083381 - آخر مراجعة: 09/25/2015 15:27:00 - المراجعة: 2.0

Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Workgroup, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Web

  • kbmt KB3083381 KbMtar
تعليقات