Sql server 2008 r2 e在cdc模式下创建。重要的是各种函数、_CT表和两个作业cdc.XXXX_capture和cdc.XXXX_cleanup(其中XXXX是数据库的全名)

Sql server 2008 r2 e在cdc模式下创建。重要的是各种函数、_CT表和两个作业cdc.XXXX_capture和cdc.XXXX_cleanup(其中XXXX是数据库的全名),sql-server-2008-r2,cdc,Sql Server 2008 R2,Cdc,根据您迄今为止的描述,特别是考虑到最新的更新,错误似乎可能与作业本身有关。 一开始,这听起来很明显,但是您是否在这个实例上运行了SQL代理?我这样问是因为你最初的描述中没有提到 如果它已经在运行,那么您需要深入一点。 如果导航到SQL Agent/Jobs文件夹(在SSMS下),找到捕获作业,右键单击并请求编写脚本,则应找到以下内容 4个电话: sp_add_job@job_name=N'cdc.XXXX_capture' sp_add_jobstep@step_name=N“正在启动更改数据捕

根据您迄今为止的描述,特别是考虑到最新的更新,错误似乎可能与作业本身有关。 一开始,这听起来很明显,但是您是否在这个实例上运行了SQL代理?我这样问是因为你最初的描述中没有提到

如果它已经在运行,那么您需要深入一点。 如果导航到SQL Agent/Jobs文件夹(在SSMS下),找到捕获作业,右键单击并请求编写脚本,则应找到以下内容

4个电话: sp_add_job@job_name=N'cdc.XXXX_capture'

sp_add_jobstep@step_name=N“正在启动更改数据捕获收集代理”

sp_add_jobstep@step_name=N'Change Data Capture Collection Agent'

sp_add_jobschedule@name=N'CDC捕获代理计划。'

第二个sp_add_jobstep调用是执行与上面指示的代码相同的代码的调用,@command=N'sys.sp_MScdc_capture_job'

您可以尝试手动启动作业,以查看这是否会启动它,或者至少会在CT表中提供一些数据

此外,请检查上面的最后一个调用,即schedule、sp_add_jobschedule。这也应该启用@freq_type=64(以确保它在代理启动时启动)

请提供您在回复中找到的结果,以帮助进一步排除故障


谢谢,

问题原来是SQL Server代理作业没有运行,尽管SQL Server指出它正在运行。在服务控制台中打开此服务,并能够在CDC中捕获数据


特别感谢LogicalMan,他非常耐心地与我一起度过了这一切。

嗨,LogicalMan。谢谢你回复我。我可以手动让它运行。列出的第二个作业步骤(启动更改数据捕获采集代理)的命令参数值为N'RAISERROR(22801,10,-1)'。第三步(更改数据捕获采集代理)命令parm的值为N'sys.sp_MScdc_Capture_job'。再次感谢。另外,忘了加上freq_类型确实是64。致以最良好的祝愿,没有问题C Philp,CDC可能是一场真正的噩梦,我从2008年开始就将其纳入其中,这可能有点令人担忧。尤其是当你更深入的时候!任何其他问题,只要问一下,这就是我们在这里的目的:)谢谢你的逻辑人。对于作业“正在启动更改数据捕获采集代理”,命令参数的N'RAISERROR(22801,10,-1)'值是否正确?是的,这记录了启动CDC的操作。您可以通过在SSMS查询中键入该命令来测试此操作的输出,您将看到出现以下消息:“正在启动更改数据捕获采集代理作业。若要报告操作进度,请查询sys.dm\u cdc\u log\u scan\u sessions动态管理视图。”正如我们上面讨论的,工作的内容包含在步骤2中。希望这有帮助。
EXEC sys.sp_cdc_enable_table 
@source_schema = N'dbo', 
@source_name   = N'ORD_ATTACHMENTS', 
@role_name     = NULL
[AttachmentID] [bigint] IDENTITY(1,1) NOT NULL,
[ORDNUM] [nvarchar](10) NOT NULL,
[FileName] [nvarchar](260) NOT NULL,
[FileContent] [varbinary](max) NULL,
[CreatedOn] [datetime] NOT NULL CONSTRAINT [DF_ORD_ATTACHMENTS_CreatedOn]    DEFAULT (getdate())
sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'Agent XPs', 1;  
GO  
RECONFIGURE  
GO  
USE [msdb]
GO

/****** Object:  Job [cdc.CDCTest_capture]    Script Date: 2016-09-28 5:18:13 PM ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [REPL-LogReader]    Script Date: 2016-09-28 5:18:13 PM ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'REPL-LogReader' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'REPL-LogReader'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'cdc.CDCTest_capture', 
    @enabled=1, 
    @notify_level_eventlog=2, 
    @notify_level_email=0, 
    @notify_level_netsend=0, 
    @notify_level_page=0, 
    @delete_level=0, 
    @description=N'CDC Log Scan Job', 
    @category_name=N'REPL-LogReader', 
    @owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Starting Change Data Capture Collection Agent]    Script Date: 2016-09-28 5:18:14 PM ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Starting Change Data Capture Collection Agent', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=3, 
    @on_success_step_id=0, 
    @on_fail_action=3, 
    @on_fail_step_id=0, 
    @retry_attempts=10, 
    @retry_interval=1, 
    @os_run_priority=0, @subsystem=N'TSQL', 
    @command=N'RAISERROR(22801, 10, -1)', 
    @server=N'AECON-SQL', 
    @database_name=N'CDCTest', 
    @flags=4
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Change Data Capture Collection Agent]    Script Date: 2016-09-28 5:18:14 PM ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Change Data Capture Collection Agent', 
    @step_id=2, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_success_step_id=0, 
    @on_fail_action=2, 
    @on_fail_step_id=0, 
    @retry_attempts=10, 
    @retry_interval=1, 
    @os_run_priority=0, @subsystem=N'TSQL', 
    @command=N'sys.sp_MScdc_capture_job', 
    @server=N'AECON-SQL', 
    @database_name=N'CDCTest', 
    @flags=4
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'CDC capture agent schedule.', 
    @enabled=1, 
    @freq_type=64, 
    @freq_interval=0, 
    @freq_subday_type=0, 
    @freq_subday_interval=0, 
    @freq_relative_interval=0, 
    @freq_recurrence_factor=0, 
    @active_start_date=20160920, 
    @active_end_date=99991231, 
    @active_start_time=0, 
    @active_end_time=235959, 
    @schedule_uid=N'd1fc7d85-c051-4b24-af84-5505308caaf0'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

GO