bukti kunci duplikat dari Daftar Tabel sys.syscommittab di SQL Server

PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.

Klik disini untuk melihat versi Inggris dari artikel ini: 3083381
Gejala
Ketika Anda membandingkan SYSCOMMITTABLE dalam kehabisan memori dan berkas sys.syscommittab pada disk di Microsoft SQL Server, Anda mungkin melihat bukti kunci duplikat. Nilai-nilai duplikat ini dapat menyebabkan operasi pembuatan cadangan dan pemeriksaan gagal.

Penyebab
Masalah ini terjadi karena masalah yang diketahui di SQL Server perubahan pelacakan.
Pemecahan masalah
Untuk menyelesaikan faktor yang menyebabkan bukti kunci duplikat, menerapkan salah satu dari berkas berikut, yang sesuai untuk situasi Anda:

MEMPERBAIKI: Cadangan pada SQL Server 2008 atau SQL Server 2008 R2 database gagal jika Anda mengaktifkan perubahan pelacakan database ini
http://support.Microsoft.com/kb/2522893

MEMPERBAIKI: Pembuatan cadangan telah gagal dalam SQL Server 2008, SQL Server 2008 R2 atau SQL Server 2012 jika Anda mengaktifkan perubahan pelacakan di pangkalan data
http://support.Microsoft.com/kb/2603910

MEMPERBAIKI: Cadangan operasi gagal dalam Pangkalan data SQL Server 2008, SQL Server 2008 R2 atau SQL Server 2012 setelah Anda mengaktifkan pelacakan perubahan
http://support.Microsoft.com/kb/2682488

Meskipun perbaikan ini mencegah duplikat bukti kunci terus muncul, mereka tidak secara otomatis menghapus baris duplikat. Tanpa menghapus baris duplikat, pangkalan data yang terpengaruh tidak dapat menyelesaikan pemeriksaan pangkalan data, dan cadangan akan gagal.

Untuk menghapus baris duplikat, gunakan salah satu metode berikut.

Metode 1: Menonaktifkan dan mengaktifkan pelacakan perubahan

  1. Menonaktifkan perubahan pelacakan pada Daftar Tabel yang terpengaruh dan pangkalan data.
  2. Masalah manual database CHECKPOINT.
  3. Aktifkan perubahan pelacakan terpengaruh database dan Daftar Tabel.

Untuk informasi lebih lanjut tentang pelacakan perubahan, lihatMengaktifkan dan menonaktifkan perubahan pelacakan.

Untuk informasi tentang cara masalah manual CHECKPOINT, lihat CHECKPOINT (Transact-SQL)

Metode 2: Secara manual menghapus baris duplikat

  1. Salin skrip Transact-SQL di akhir bagian "resolusi" ke editor teks.
  2. Temukan <AFFECTED_DB>tempat dalam skrip, dan mengganti nama pangkalan data yang terpengaruh.</AFFECTED_DB>
  3. Simpan skrip diubah ke hard disk Anda sebagai berkas .sql. Misalnya:
    C:\temp\remove_duplicates.SQL
Jika Anda menjalankan SQL Server 2014, Anda harus memberikan kontrol penuh SID per layanan untuk mssqlsystemresource.ldf dan mssqlsystemresource.mdf file. Yang harus dilakukan, ikuti langkah-langkah berikut:
  1. Navigasi ke direktori Binn yang sesuai dengan contoh id Anda. Misalnya:

    C:\Program Files\Microsoft SQL Server\<Instance id="">\MSSQL\Binn</Instance>
  2. Buka properti untuk mssqlsystemresource.ldf dan mssqlsystemresource.mdf, dan kemudian klik tab keamanan .
  3. Temukan SID per layanan layanan SQL Server, dan perhatikan izin default:

    * Membaca & eksekusi
    * Baca
  4. Memberikan layanan SQL Server per Layanan kontrol penuh SID, dan kemudian tutup izin kotak dialog.
  5. Jalankan SQL Server pada mode pengguna tunggal. Untuk informasi selengkapnya, lihatJalankan SQL Server di mode pengguna tunggal.
  6. Usea sqlcmdbaris perintah untuk menyambung ke SQL Server di bawah khusus Administrator sambungan (DAC). Misalnya:

    sqlcmd -S PRODSERV1\MSSQLSERVER - -E -i c:\temp\remove_duplicates.sql
    Kemudian, jalankan skrip Transact-SQL dimodifikasi.
  7. Mulai SQL Server dalam mode multi-pengguna, dan kemudian verifikasi bahwa cadangan dan CHECKPOINT operasi terhadap terpengaruh database berhasil diselesaikan. Jika langkah 4 digunakan, kembali izin ke nilai asali.

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

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 3083381 - Tinjauan Terakhir: 09/25/2015 15:30:00 - Revisi: 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 KbMtid
Tanggapan