Doppelte Schlüssel Zeilen aus der Tabelle sys.syscommittab in SQL Server

Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 3083381
Problembeschreibung
Beim Vergleichen von SYSCOMMITTABLE im Speicher und die Datei auf dem Datenträger sys.syscommittab in Microsoft SQL Server möglicherweise doppelte Schlüssel Zeilen angezeigt. Diese doppelte Werte möglicherweise Backup- und Checkpoint-Vorgänge fehlschlagen.

Ursache
Dieses Problem tritt aufgrund eines bekannten Problems in SQL Server ändern.
Lösung
Lösen die Faktoren, die dazu führen, doppelte Schlüssel dass Anwenden eines der folgenden Updates, je nach Ihrer Situation:

Update: Ein Sicherungsvorgang auf SQL Server 2008 oder SQL Server 2008 R2-Datenbank schlägt Änderungsprotokoll für diese Datenbank aktivieren
http://support.Microsoft.com/kb/2522893

Update: Sicherung schlägt in SQL Server 2008, SQL Server 2008 R2 und SQL Server 2012 Änderungsprotokoll für die Datenbank aktivieren
http://support.Microsoft.com/kb/2603910

Update: Sicherung durchgeführt in SQL Server 2008, SQL Server 2008 R2 und SQL Server 2012-Datenbank nach dem Änderungsprotokoll aktivieren
http://support.Microsoft.com/kb/2682488

Obwohl diese Updates verhindern, dass der doppelte Schlüssel Zeilen weiterhin angezeigt werden, sie doppelten Zeilen nicht automatisch entfernt. Ohne doppelten Zeilen, die betroffene Datenbank Datenbank-Kontrollpunkte kann nicht abgeschlossen werden, und Backups fehlschlagen.

Um doppelten Zeilen zu entfernen, verwenden Sie eine der folgenden Methoden.

Methode 1: Deaktivieren Sie und aktivieren Sie der Überarbeitung

  1. Deaktivieren Sie auf den betroffenen Tabellen und die Datenbank.
  2. Stellen Sie eine manuelle CHECKPOINT-Datenbank.
  3. Aktivieren Sie auf die betroffene Datenbank sowie Tabellen ändern.

Weitere Informationen zu Überarbeitungen finden Sie unterAktivieren und Deaktivieren der Versionsvergleich.

Informationen zum manuellen Prüfpunkt finden Sie unter CHECKPOINT (Transact-SQL)

Methode 2: Manuelles Löschen Sie doppelten Zeilen

  1. Kopieren Sie das Transact-SQL-Skript am Ende des Abschnitts "Lösung" in einem Texteditor.
  2. Suchen Sie die <AFFECTED_DB>Platzhalter im Skript und den Namen der betroffenen Datenbank ersetzen.</AFFECTED_DB>
  3. Speichern Sie das geänderte Skript Festplatte als eine .sql-Datei. Beispiel:
    C:\temp\remove_duplicates.SQL
Wenn Sie SQL Server 2014 ausführen, müssen Sie pro Dienst Vollzugriff SID zu mssqlsystemresource.ldf und mssqlsystemresource.mdf gewähren. TODO, gehen Sie folgendermaßen vor:
  1. Navigieren Sie zum Verzeichnis Binn Ihre Instanz-ID. entspricht Beispiel:

    C:\Program Files\Microsoft SQL Server\<Instance id="">\MSSQL\Binn</Instance>
  2. Öffnen Sie die Eigenschaften für mssqlsystemresource.ldf und mssqlsystemresource.mdf, und klicken Sie dann auf die Registerkarte Sicherheit .
  3. Suchen Sie die SQL Server-Dienst pro Dienst-SID, und notieren Sie die Standardberechtigungen:

    * Lesen & ausführen
    * Lesen
  4. Erteilen Sie den SQL Server-Dienst pro-Dienst-SID Vollzugriff und schließen Sie die Dialogfelder Berechtigungen.
  5. Starten Sie SQL Server im Einzelbenutzermodus. Weitere Informationen finden Sie unterStarten Sie SQL Server im Einzelbenutzermodus.
  6. Wie SqlcmdBefehlszeile für die Verbindung zu SQL Server unter Dedicated Administrator Connection (DAC). Beispiel:

    Sqlcmd -S PRODSERV1\MSSQLSERVER - A -E -i c:\temp\remove_duplicates.sql
    Führen Sie das geänderte Transact-SQL-Skript an.
  7. Starten Sie SQL Server im Mehrbenutzermodus und stellen Sie sicher, dass Backup und CHECKPOINT-Operationen für die betroffene Datenbank erfolgreich abgeschlossen. Wenn Schritt 4 durchgeführt haben, die Berechtigungen auf die Standardwerte zurückgesetzt.

Transact-SQL-Skript

--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

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 3083381 – Letzte Überarbeitung: 09/25/2015 15:28:00 – Revision: 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 KbMtde
Feedback