Aracılığıyla paylaş


Değişiklik İzleme (SQL Server) hakkında

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Bu makalede, uygulamalar için verimli bir değişiklik izleme mekanizması sağlayan basit bir çözüm olan SQL Server için değişiklik izleme özelliği açıklanmaktadır.

Başlamak için değişiklik izlemeyi yapılandırmayıgözden geçirin.

Genel bakış

Daha önce uygulamaların veritabanındaki verilerde yapılan değişiklikleri sorgulamasını ve değişikliklerle ilgili bilgilere erişmesini sağlamak için uygulama geliştiricilerinin özel değişiklik izleme mekanizmaları uygulaması gerekiyordu. Bu mekanizmalar genellikle tetikleyicilerin birleşimi, zaman damgası sütunları, izleme bilgilerini depolamak için yeni tablolar ve özel temizleme işlemleri gibi birçok işi içerir. SQL Server'ın değişiklik izleme özelliği bu işlemi basitleştirerek özel bir çözüme gerek kalmadan değişikliklerle ilgili bilgileri tanımlamayı kolaylaştırır.

Farklı uygulama türleri, değişiklikler hakkında ne kadar bilgiye ihtiyaç duyduklarına ilişkin farklı gereksinimlere sahiptir. Uygulamalar, bir kullanıcı tablosunda yapılan değişikliklerle ilgili aşağıdaki soruları yanıtlamak için değişiklik izlemeyi kullanabilir:

  • Kullanıcı tablosu için hangi satırlar değişti?

    • Satırın kaç kez değiştirildiği veya herhangi bir ara değişikliğin değerleri değil, yalnızca bir satırın değiştiği gerçeği gereklidir.

    • En son veriler doğrudan izlenen tablodan alınabilir.

  • Satır değişti mi?

    • Bir satırın değişmiş olması durumunda, değişiklikle ilgili bilgilerin, değişikliğin aynı işlemde yapılırken kullanılabilir ve kaydedilebilir olması gerekir.

Not

Bir uygulama, yapılan tüm değişiklikler ve değiştirilen verilerin ara değerleri hakkında bilgi gerektiriyorsa, değişiklik izleme yerine değişiklik verilerini yakalamayı kullanmak uygun olabilir. Daha fazla bilgi için bkz. Veri Yakalamayı Değiştirme Hakkında (SQL Server) .

SQL Server 2025 değişiklikleri

Değişiklik izleme, sistem tablolarından bayat değişiklik izleme meta verilerini temizleyen otomatik bir işlem içerir. SQL Server 2022 (16.x) ve önceki sürümlerinde , otomatik temizleme işlemi derin temizleme yaklaşımını kullanır.

Bu yaklaşımda, autocleanup iş parçacığı her 30 dakikada bir uyanır, değişiklik izlenen tüm veritabanlarını ve tabloları getirir, yapılandırılmış bekletme süresine göre güvenli bir temizleme noktası bulur ve ilgili yan tablolardan verileri silmek için tüm tabloları döngüyle dolaşarak işler.

SQL Server 2025 (17.x) Önizleme ve sonraki sürümlerinde, değişiklik izleme otomatik temizleme işlemi büyük yan tablolar için yeni bir uyarlamalı sığ temizleme yaklaşımını getirir. Bu yeni yaklaşım, verileri güvenli bir temizleme noktasının altında siler. Bu nokta, yapılandırılmış temizleme derinliğine ve saklama süresine göre bulunur. Bu yaklaşım, tüm uygun veriler kaldırılana kadar artımlı adımlarla çalışır.

SQL Server 2025 (17.x) Önizleme'de uyarlamalı sığ temizleme varsayılan olarak etkinleştirilir.

Uyarlamalı sığ temizlemeyi devre dışı bırakmak için İzleme Bayrağı 8273'i genel olarak etkinleştirin:

DBCC TRACEON (8273, -1);

One-Way ve Two-Way Eşitleme Uygulamaları

Verileri SQL Server Veritabanı Altyapısı örneğiyle eşitlemesi gereken uygulamaların değişiklikleri sorgulayabilmesi gerekir. Değişiklik izleme, hem tek yönlü hem de iki yönlü eşitleme uygulamalarının temeli olarak kullanılabilir.

One-Way Eşitleme Uygulamaları

Değişiklik izleme kullanan istemci veya orta katman önbelleğe alma uygulaması gibi tek yönlü eşitleme uygulamaları yapılabilir. Aşağıdaki çizimde gösterildiği gibi, önbelleğe alma uygulaması verilerin Veritabanı Altyapısı'nda depolanmasını ve diğer veri depolarında önbelleğe alınmasını gerektirir. Uygulama, veritabanı tablolarında yapılan tüm değişikliklerle önbelleği up-togüncel tutabilmelidir. Veritabanı Altyapısı'na geri geçiş için herhangi bir değişiklik yoktur.

Tek yönlü eşitleme uygulamalarını gösteren Diyagramı.

Two-Way Eşitleme Uygulamaları

Değişiklik izleme kullanan iki yönlü eşitleme uygulamaları da oluşturulabilir. Bu senaryoda, Veritabanı Altyapısı örneğindeki veriler bir veya daha fazla veri deposuyla eşitlenir. Bu depolardaki veriler güncelleştirilebilir ve değişiklikler Veritabanı Altyapısı'na yeniden eşitlenmelidir.

İki yönlü eşitleme uygulamalarını gösteren Diyagramı.

İki yönlü eşitleme uygulamasına iyi bir örnek, ara sıra bağlı bir uygulamadır. Bu tür bir uygulamada, istemci uygulaması yerel bir deposunu sorgular ve güncelleştirir. bir istemci ile sunucu arasında bir bağlantı kullanılabilir olduğunda, uygulama bir sunucuyla eşitlenir ve her iki yönde de veri akışları değiştirilir.

İki yönlü eşitleme uygulamalarının çakışmaları algılayabilmesi gerekir. Eşitlemeler arasında her iki veri deposunda da aynı veriler değiştirilirse çakışma oluşur. Bir uygulama, çakışmaları algılama özelliği sayesinde değişikliklerin kaybolmamasını sağlayabilir.

Değişiklik İzleme Nasıl Çalışır?

Değişiklik izlemeyi yapılandırmak için DDL deyimlerini veya SQL Server Management Studio'yu kullanabilirsiniz. Daha fazla bilgi için bkz. Değişiklik İzlemeyi Etkinleştirme ve Devre Dışı Bırakma . Değişiklikleri izlemek için önce veritabanı için değişiklik izlemenin etkinleştirilmesi ve ardından bu veritabanında izlemek istediğiniz tablolar için etkinleştirilmesi gerekir. Tablo tanımının hiçbir şekilde değiştirilmesi gerekmez ve hiçbir tetikleyici oluşturulmaz.

Değişiklik izleme bir tablo için yapılandırıldıktan sonra, tablodaki satırları etkileyen herhangi bir DML deyimi, değiştirilen her satırın değişiklik izleme bilgilerinin kaydedilmesine neden olur. Değiştirilen satırları sorgulamak ve değişiklikler hakkında bilgi edinmek için değişiklik izleme işlevlerinikullanabilirsiniz.

Birincil anahtar sütununun değerleri, izlenen tabloda değişiklik bilgileriyle birlikte kaydedilen tek bilgidir. Bu değerler değiştirilmiş satırları tanımlar. Bir uygulama, bu satırlar için en son verileri almak üzere birincil anahtar sütun değerlerini kullanarak kaynak tabloyu izlenen tabloyla birleştirebilir.

Her satırda yapılan değişiklikle ilgili bilgiler, değişiklik izleme kullanılarak da elde edilebilir. Örneğin, değişikliğe (ekleme, güncelleştirme veya silme) neden olan DML işleminin türü veya güncelleştirme işleminin parçası olarak değiştirilen sütunlar.

Bir sütunun değeri değişmese bile tüm DML işlemleri izlenir. Örneğin, bir update deyimi bir sütunu zaten sahip olduğu değerle aynı değere ayarlarsa, sütun hala değişmiş olarak kabul edilir.

Değişiklik İzleme Temizleme

Tüm tablolar için değişiklik izleme bilgileri (Değişiklik İzleme için etkinleştirilmiştir) bellek içi bir satır deposunda depolanır. Değişiklik İzleme için etkinleştirilen her tabloyla ilişkili değişiklik izleme verileri, bellek içi satır deposundan ilgili disk içi iç tabloya kadar her denetim noktasında boşaltılır. Kontrol noktası sırasında, satırlar diskteki tablolara taşındıktan sonra, bellek içi satır deposu da temizlenir.

Değişiklik İzleme için etkinleştirilen her tablonun, değişiklik sürümünü ve belirli bir sürümden bu yana değişen satırları belirlemek için Değişiklik İzleme işlevleri tarafından kullanılan bir dahili disk içi tablosu vardır. otomatik temizleme iş parçacığı her uyandığında, değişiklik izleme özelliği etkin veritabanlarını tanımlamak için SQL Server örneğindeki tüm kullanıcı veritabanlarını tarar. Veritabanının bekletme süresi ayarına bağlı olarak, her iç disk içi tablo süresi dolan kayıtlarından temizlenir.

Değişiklik İzleme için kullanılan dahili tabloların el ile temizliğini gerçekleştirmek üzere SQL Server 2014 (12.x) ve SQL Server 2016 (13.x) için Hizmet Paketleri'ne bir saklı yordam eklendi. Saklı yordam hakkında daha fazla bilgi için: KB173157.