SQL Server sys.syscommittab tablodaki yinelenen anahtar satırları

ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.

Makalenin İngilizcesi aşağıdaki gibidir: 3083381
Belirtiler
Bellek içi SYSCOMMITTABLE ve Microsoft SQL Server disk üzerindeki sys.syscommittab dosyasında karşılaştırdığınızda yinelenen anahtar satırları görebilirsiniz. Bu yinelenen değerler yedekleme ve denetim noktası işlemlerinin başarısız olmasına neden olabilir.

Neden
Bu sorun, SQL Server değişiklik izleme bilinen bir sorun nedeniyle oluşur.
Çözüm
Yinelenen anahtarlar neden Etkenler gidermek için durumunuza uygun olarak aşağıdaki düzeltmeleri birini uygulayın:

Düzeltme: değişiklik izleme bu veritabanı üzerinde etkinleştirirseniz, SQL Server 2008 veya SQL Server 2008 R2 veritabanı yedekleme işlemi başarısız
http://support.microsoft.com/kb/2522893

Düzeltme: değişiklik izleme üzerinde bir veritabanı etkinleştirirseniz, yedek SQL Server 2008, SQL Server 2008 R2 veya SQL Server 2012 başarısız
http://support.microsoft.com/kb/2603910

Düzeltme: yedekleme işlemi değişiklik izleme etkinleştirildikten sonra bir SQL Server 2008, SQL Server 2008 R2 veya SQL Server 2012 veritabanında başarısız
http://support.microsoft.com/kb/2682488

Bu düzeltmeler yinelenen anahtar satırları görüntülenmeye devam etmenizi önler, ancak bunlar otomatik olarak yinelenen satırları kaldırma. Yinelenen satırları kaldırma, etkilenen veritabanı veritabanı kontrol noktaları tamamlayamıyor ve yedekleme işlemleri başarısız olabilir.

Yinelenen satırları kaldırmak için aşağıdaki yöntemlerden birini kullanın.

Yöntem 1: Devre dışı bırakır ve değişiklik izlemeyi etkinleştir

  1. Değişiklik izleme etkilenen tablolar ve veritabanı devre dışı bırakın.
  2. El ile bir veritabanı denetim noktası sorunu.
  3. Değişiklik izleme etkilenen veritabanı ve tablolar üzerinde etkinleştirin.

Değişiklik izleme hakkında daha fazla bilgi için bkz.Değişiklik izlemeyi devre dışı bırakma ve etkinleştirme.

El ile denetim noktası sorun hakkında daha fazla bilgi için bkz. Denetim noktası (Transact-SQL)

Yöntem 2: Yinelenen satırları el ile silin.

  1. "Çözüm" bölümünde, sonunda Transact-SQL komut dosyasını bir metin düzenleyicisine kopyalayın.
  2. Bulun <AFFECTED_DB>komut dosyasında yer tutucu ve etkilenen veritabanı adını değiştirmek.</AFFECTED_DB>
  3. Değiştirilmiş komut dosyasını sabit diskinize bir .sql dosyası olarak kaydedin. Örneğin:
    C:\temp\remove_duplicates.SQL
SQL Server 2014 kullanıyorsanız, her hizmet SID tam denetim mssqlsystemresource.ldf ve mssqlsystemresource.mdf dosyalarını vermeniz gerekir. Yapılacak bu, şu adımları izleyin:
  1. Kimliğinizi örneğine karşılık gelen Binn dizinine gidin Örneğin:

    C:\Program Files\Microsoft SQL Server\<Instance id="">\MSSQL\Binn</Instance>
  2. Mssqlsystemresource.ldf ve mssqlsystemresource.mdf özelliklerini açın ve sonra Güvenlik sekmesini tıklatın.
  3. SQL Server hizmeti her hizmet SID bulun ve Not varsayılan izinler:

    * Okuma & yürütme
    * Okuma
  4. SQL Server hizmeti vermek her hizmet SID tam denetim ve izinleri iletişim kutularını kapatın.
  5. SQL Server tek kullanıcı modunda başlatın. Daha fazla bilgi için bkz.SQL Server tek kullanıcı modunda Başlat.
  6. Usea SQLCMDSQL Server altında adanmış yönetici bağlantısı (DAC) bağlanmak için komut satırı. Örneğin:

    sqlcmd -S PRODSERV1\MSSQLSERVER - A -E -i c:\temp\remove_duplicates.sql
    Sonra değiştirilen Transact-SQL komut dosyasını yürütün.
  7. SQL Server birden çok kullanıcılı modda başlatın ve sonra yedekleme ve etkilenen veritabanı denetim noktası işlemleri başarıyla tamamlamak doğrulayın. 4. adım kullanıldıysa, izinleri varsayılan değerlerine döner.

Transact-SQL komut dosyası

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

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 3083381 - Son İnceleme: 09/26/2015 08:18:00 - Düzeltme: 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 KbMttr
Geri bildirim