僅在SQLServer2008(含)以后的企業(yè)版、開發(fā)版和評估版中可用。
詳解:
CDC功能主要捕獲SQLServer指定表的增刪改操作,由于任何操作都會寫日志(哪怕truncate),所以CDC的捕獲來源于日志文件。日志文件會把更改應(yīng)用到數(shù)據(jù)文件中,同時也會標記符合要求的數(shù)據(jù)標記為需要添加跟蹤的項。然后通過一些配套函數(shù),最后寫入到數(shù)據(jù)倉庫中。大概流程:

第一步、對目標庫顯式啟用CDC:
在當(dāng)前庫使用sys.sp_cdc_enable_db。返回0(成功)或1(失?。?。注意,無法對系統(tǒng)數(shù)據(jù)庫和分發(fā)數(shù)據(jù)庫啟用該功能。且執(zhí)行者需要用sysadmin角色權(quán)限。
該存儲過程的作用域是整個目標庫。包含元數(shù)據(jù)、DDL觸發(fā)器、cdc架構(gòu)和cdc用戶。
使用以下代碼啟用:
復(fù)制代碼代碼如下:</p><p>USE AdventureWorks</p><p>GO</p><p>EXECUTE sys.sp_cdc_enable_db;
GO</p><p>
在一開始直接執(zhí)行時,出現(xiàn)了報錯信息:
消息22830,級別16,狀態(tài)1,過程sp_cdc_enable_db_internal,第193 行
無法更新元數(shù)據(jù)來指示已對數(shù)據(jù)庫AdventureWorks 啟用了變更數(shù)據(jù)捕獲。執(zhí)行命令'SetCDCTracked(Value = 1)' 時失敗。返回的錯誤為15517: '無法作為數(shù)據(jù)庫主體執(zhí)行,因為主體"dbo" 不存在、無法模擬這種類型的主體,或您沒有所需的權(quán)限。'。請使用此操作和錯誤來確定失敗的原因并重新提交請求。
這里引出了另外一個知識點:錯誤號 15517 的錯誤
這種錯誤會在很多地方出現(xiàn),如還原數(shù)據(jù)庫的時候也會有可能出現(xiàn)。共同點是:某個/些存儲過程使用了具有WITHEXECUTE AS 的選項。使其在當(dāng)前庫具有了某個架構(gòu),但是當(dāng)在別的地方執(zhí)行時,由于沒有這個架構(gòu),所以就報錯,解決方法:
ALTER AUTHORIZATION ON DATABASE::[AdventureWorks] TO [sa]
經(jīng)過檢查,uspUpdateEmployeeHireInfo這個存儲過程的確有:WITH EXECUTE AS CALLER
使用sa的原因是即使sa被禁用,sa還是存在的。所以不會報錯。
現(xiàn)在重新執(zhí)行:
復(fù)制代碼代碼如下:</p><p>USE AdventureWorks</p><p>GO</p><p>EXECUTE sys.sp_cdc_enable_db;</p><p>GO</p><p>
啟用成功,然后通過以下語句檢查是否成功:
復(fù)制代碼代碼如下:</p><p>SELECT is_cdc_enabled,CASEWHENis_cdc_enabled=0THEN'CDC功能禁用'ELSE'CDC功能啟用'END描述</p><p>FROM sys.databases</p><p>WHERE NAME = 'AdventureWorks'
創(chuàng)建成功后,將自動添加CDC用戶和CDC架構(gòu)。
新聞熱點
疑難解答
圖片精選