Veri yakalamayı değiştirin - değişikliği kimin yaptığını nasıl öğreneceksiniz?


10

CDC tarafından belirlenen değişikliği kimin yaptığını izleme.

Benim datetime kesmek hatları boyunca, cdc değişiklik parça tablosunda varsayılan değeri olan yeni bir alan olarak suser_sname ekleyerek aynı yaklaşımı denedim. Ancak, temel tablodaki değişikliği başlatan kullanıcı değil, cdc işleminin sahibini döndürüyor gibi görünüyor. Ayrıca original_login denedim ama bu sql hizmet hesabı giriş döner. Yine, değişikliği başlatan kullanıcı ile değil, cdc işlemiyle ilişkili olabilir.

Yığın taşması ile ilgili benzer bir soru buldum, ancak ön uçtan veya cdc kullanma amacını yenen bir tetikleyici aracılığıyla değişiklikleri izlemekten başka bir cevabı yok. Ben yeniden yayınlamak olmaz ama orijinal stackoverflow üzerinde olduğundan özellikle R2 veya 2012 daha iyi bir yol tanıttı eğer burada bir deneyin vereceğini düşündüm.

Kısacası: Değişiklik verisi yakalama değişikliğini kimin yaptığını nasıl bilebilirim?

Yanıtlar:


7

Ben bu konuda bir hata dosyaladım, ama "tasarım tarafından" kapatıldı.

http://connect.microsoft.com/SQLServer/feedback/details/283707/cdc-options-to-capture-more-data-username-date-time-etc

Ne yazık ki bu bilgiyi almak için başka bir teknik (örneğin SQL Denetimi veya tetikleyici) kullanmanız gerekecektir (ve CDC verileriyle olabildiğince ilişkilendirmeye çalışmak için bazı özel kodlar). Bu eksiklik hakkında SQL Server MVP Deep Dives (cilt 1) kitabındaki "SQL Server Denetimi, Değişiklik Takibi ve Veri Yakalamayı Değiştir" bölümümde yazdım .

Size daha iyi bir çözüm bulamadığım için üzgünüm, ancak CDC'nin yerleşik özellikleri gereksinimlerinizi karşılamayacak. :-(


@RThomas, kapalı olsalar bile öğelere oy verebilirsiniz - ara sıra tekrar ziyaret edilirler. Oylamadan daha da yararlı olanı, bu işlevin yararlı olmasını sağlayacak iş ihtiyacının ayrıntılarını, belki de eksik işlevsellik etrafında çalışmak için işleri yeniden düzenleme maliyeti de dahil olmak üzere bir yorum eklemektir. Nitel verilerin nicel verilere nasıl ağır basabileceği hakkında biraz yazdım ...
Aaron Bertrand

Bilmem iyi oldu, kapalı oylamanın da kapalı olduğunu düşündüm. Yorumumda Oracle'ın CDC uygulamalarında bunu sunduğuna dikkat çektim. Bu mantıklı görünüyor. docs.oracle.com/cd/A91202_01/901_doc/server.901/a90237/…
RThomas

6

Sütunu ekleyebilir ve kullanıcıyı ekleme / güncelleme / silme üzerine yerleştirmek için bir tetikleyici olabilir ve cdc bunu depolar. Kullanıcı adını içerik bilgilerini kullanarak kullanıcı adını geçirerek kullanıcı arayüzünden veya gerçek oturumdan alabilirsiniz

SET @CapturedBy = CAST(REPLACE(CAST(CONTEXT_INFO() AS VARCHAR(10)),CHAR(0),'''''''') AS INT)

IF(@CapturedBy) IS NULL
    BEGIN
       SELECT @CapturedBy = P.[Code]
       FROM sys.dm_exec_sessions AS S
         INNER JOIN [dbo].[Person] AS P
          ON S.[login_name] = P.[User_Name]
       WHERE S.[session_id] = @@spid
    END

0

Ana tabloya UpdatedBy alanı ekleyebilir, varsayılan olarak SUSER_NAME () veya ORIGINAL_LOGIN () olarak ayarlayabilir ve bu verilerin CDC tarafından doldurulmasını sağlayabilir misiniz? Bunun aradığınız bilgileri size vereceğine inanıyorum.


Bu sadece size svc hesabı / cdc sahibi alır, bu şeyleri denedim ve sonuçları Şubat ayında orijinal soru
yolumda belgelediğini fark edebilirsiniz

Yorumunuz bunu ChangeData tablosuna eklediğinizi söyledi. ChangeData tablosunun dayandığı özgün tablo hakkında konuşuyorum. Ancak ben bu sadece ekler için işe yaradığını gönderdikten sonra fark ettim
Şef

Ahhhh, bunu yakalamadım. Ne dediğini anlıyorum.
RThomas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.