2014-10-29 104 views
0

要捕獲已刪除的用戶名,我在我的CDC表中添加了一個新列(例如: - cdc.dbo_testCDC_CT)以設置記錄的SQL用戶名。 ie; ALTER TABLE cdc.dbo_testCDC_CT ADD username VARCHAR(20)DEFAULT(SUSER_SNAME()))。 該列中的值總是「sa」,但我被記錄爲Windows身份驗證。爲什麼這個哈皮?使用CDC捕獲數據

回答

1

首先,你不應該修改由cdc生成的系統表。此表是在您的dbo.testCDC表上啓用cdc時生成的,並且將包含源表的列,以及另外5列,其含義如下所述:http://msdn.microsoft.com/en-us/library/bb500305(v=sql.110).aspx。當您禁用表格中的cdc時,它將被自動刪除。

我建議先閱讀cdc和預期的使用模式。良好的開端可能是這篇文章: http://technet.microsoft.com/en-us/magazine/2008.11.sql.aspx

要回答你的問題,爲什麼SA總是分配給您的列:在* _CT表中的所有行通過日誌讀取器過程,發生在sa帳戶下運行填寫你的情況。這不是將審計添加到您的系統的方式。前面提到的文章可以爲您提供一些更好的實施審計方法的指南。

+0

@Sreepathi,請使用標記作爲答案按鈕來獎勵花時間回答您的問題的人。 – rrozema 2017-10-20 11:07:46

1

您的解決方案應該捕獲'Changed By'或'Inserted By'記錄的用戶名並將其保存到捕獲實例本身的基礎數據表主題中。通過這種方式,您的CDC實例也將爲您捕獲記錄的用戶名。

前面已經提到的,你應該永遠不變的系統生成的表,兩個簡單的原因:1。 當他們恢復因任何原因,您的更改將丟失 2.更改系統表可以爲您提供相當意想不到的後果。

希望這可能有助於。