MS-SQL

SQL Server 2008 “Change Tracking” ve “BACKUP DATABASE” Hatası

SQL Server 2008 de backup işlemleriniz “Cannot insert duplicate key row in object ‘sys.syscommittab’ with unique index ‘si_xdes_id’. [SQLSTATE 23000] (Error 2601)  Failed to flush the commit table to disk in dbid ID due to error 2601. Check the errorlog for more information. [SQLSTATE 42000] (Error 3999)  BACKUP DATABASE is terminating abnormally. [SQLSTATE 42000] (Error 3013)  The statement has been terminated. [SQLSTATE 01000] (Error 3621).  The step failed.” hatası ile kesiliyorsa ve veri tabanlarınızda değişiklik takibi “Change Tracking” aktif ise oluşan hatanın nedeni SQL Server 2008 SP1’de bulunan bir “bug” olabilir.

Bu durum “Change Tracking” özelliğinin aktif hale getirilmesinden sonra veri tabanının “recovery” moduna girmesi (muhtemelen SQL Server servisi ve ya SQL Server makinesinin yeniden başlatılması) sonucu oluşabilmektedir.

Yukarıda belirttiğim gibi bu durum SQL Server 2008 SP1 de bir “bug” olarak kaydedilmiş ve toptan güncelleme paketi 7 ve 8 içinde bir onarım olarak sunulmuştur.

Bu durumun geçici çözümü için aşağıdaki yolu takip ettiğimde yedek işlemime eskisi gibi devam edebildim.

  • Sırası ile “Change Tracking” özelliği tablo(lar) ve veri tabanı üzerinde pasif hale getirilir.
ALTER TABLE TabloAdı DISABLE CHANGE_TRACKING
ALTER DATABASE VeritabnıAdı	SET CHANGE_TRACKING = OFF
  • Yedek işlemi başlatılır.
  • Hemen arkasından (Yedek işlemi bitmeden olabilir.) Sırası ile “Change Tracking” özelliği veri tabanı ve tablo(lar) üzerinde aktif hale getirilir.
ALTER DATABASE VeritabanıAdı SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 8 DAYS, AUTO_CLEANUP = ON)
ALTER TABLE TabloAdı ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = OFF)

Dikkatinizi çekmek istediğim nokta, yedek işlemine özelliği kapattıktan hemen sonra başladım. İlk denememde özelliği kapatıp açmayı ve ardından yedekleme işlemine başlamayı denedim. Ancak sonuç başarılı olmadı. Bunun üzerine yukarıdaki sırayı uyguladığımda sonuç başarılı oldu.

Bu işlemleri her yedek işleminde yapmanız gerekmiyor. Bir kere durumu düzelttiğinizde sonraki zamanlarda yedek işlemine eskisi gibi devam edebilirsiniz. Ancak yukarıda belirtilen ve hatanın oluşmasına neden olan duruma tekrar girerseniz sorun yeniden oluşacaktır.

Kalıcı çözüm için belirtilen güncelleme paketlerini talep etmek veya SQL Server SP2 için beklemek gerekiyor.

Konu ile ilgili bazı bağlantıları aşağıda bulabilirsiniz.

http://support.microsoft.com/kb/978839

http://support.microsoft.com/kb/979065/

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir