我們的數據庫是插入inensive(200-500k每晚),但更新光(每天也許幾百個)。變更數據捕獲更新和刪除只有
我需要保留的所有更改的歷史,以插入的行本身無限期的時間(但不是實際的插入)。我很樂意使用「更改數據捕獲」,但支持此功能所需的空間數量不可用。如果我能弄清楚做下面的事情之一,我的生活會容易得多。
1)LIMITE變化數據跟蹤來更新和刪除僅 2)清理只從CDC表INSERTS定期
在過去,我剛使用的觸發(這仍然是不脫表!)。
我們的數據庫是插入inensive(200-500k每晚),但更新光(每天也許幾百個)。變更數據捕獲更新和刪除只有
我需要保留的所有更改的歷史,以插入的行本身無限期的時間(但不是實際的插入)。我很樂意使用「更改數據捕獲」,但支持此功能所需的空間數量不可用。如果我能弄清楚做下面的事情之一,我的生活會容易得多。
1)LIMITE變化數據跟蹤來更新和刪除僅 2)清理只從CDC表INSERTS定期
在過去,我剛使用的觸發(這仍然是不脫表!)。
我只想用一個觸發抓拍更新和刪除。
我不認爲你可以告訴CDC DML什麼要注意的,我認爲這是相當浪費,讓CDC記錄所有這些刀片只有事後刪除它們。這本身就是昂貴的,它會造成的碎片也會導致針對捕獲表運行的任何查詢(您將擁有大量空白的頁面)以及工作統計數據不斷需要做的事情保持統計信息最新。
你可以把可能的,而不是在捕獲表,這只是沒有任何INSERT觸發器,但我沒有試過這樣做,甚至看它是否被允許,我當然不知道什麼樣的影響是將具有CDC功能。可能值得一些調查,但我的原始答案仍然存在,即使這種破解工作:只需使用觸發器。
如果空間是一個考慮因素,你可以隨時分配CDC表用不同的文件組可能住在不同的服務器上運行。你會做這樣的:
ALTER DATABASE YourDatabase
ADD FILEGROUP [cdc_ChangeTables];
go
--this step requires going on to somewhere on your hard drive and creating a folder
ALTER DATABASE YourDatabase
ADD FILE (NAME = N'cdc_ChangeTables',
FILENAME = N'E:\NameOfFolderYouSetUp\YourDatabase_cdc_ChangeTables.mdf',
SIZE = 1048576KB,
FILEGROWTH = 102400KB)
TO FILEGROUP [cdc_ChangeTables];
GO
然後,當你想設置你的CDC表,你指出來實現這一文件組,而不是:
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'TableYouWantToCapture',
@role_name = N'cdc_admin',
@filegroup_name = N'cdc_ChangeTables', --this is where you name the filegroup from previous step
@supports_net_changes = 1,
@capture_instance = N'dbo_TableYouWantToCapture',
@captured_column_list = 'ColumnName1, ColumnName2'; --comma-delimited list of column names
GO
如果您想查詢只更新/刪除,你可以使用系統功能,如下所示:
SELECT *
FROM cdc.fn_cdc_get_all_changes_dbo_TableYouWantToCapture(@from_lsn, @to_lsn, N'all update old')
WHERE __$operation IN (1,3,4)
謝謝Aaron ......那是我腦海裏隨處可見的地方。我真的希望將來可以對CDC進行更細緻的控制。 – PseudoToad
我不確定在實施_CT表格時需要考慮碎片問題。根據更改量,您可以制定最佳解決方案。觸發器的價值僅僅是交易的延伸並且是同步的,而不是異步的,它們帶來了自己的風險。 CDC提供了很多方面,因此您不能簡單地確定要捕獲哪些操作,您應該儘可能在最早的時機清理_CT表並將數據卸載到分級或審計數據庫中。 – LogicalMan
很明顯,在清理表格之前,您應該永遠不需要通過_CT表格中的操作刪除行,因爲您可以確定要提取哪些操作並忽略那些不需要的操作,而不管操作如何,應該在最前沿的策略任何解決方案。我們在每週的維護期內完成了對CDC實例的更新,因此在我們對客戶端系統進行所有審計或報告時使用CDC沒有減速或其他問題。 – LogicalMan