gpt4 book ai didi

sql-server - 为什么更改数据捕获 (SQL Server) 作业会在特定持续时间后自动停止?

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:41 25 4
gpt4 key购买 nike

我目前正在 Maria <--> MSSQL 之间同步数据。那是2路同步。我在 Windows 上使用 SQL Server,一切正常,直到几天前...我将所有测试数据库切换到 Linux 服务器,因此 MSSQL 在 Docker 容器(官方镜像)上运行。

我的环境

  • MSSQL Docker image
  • Ubuntu(还有 MacOS),确保了设备和 Docker 的 CPU 和 RAM 要求。

我的问题:

SQL 代理作业完美运行了约 10 分钟。之后,cdc.dbo_MyTrackedTable_CT 中没有捕获任何更改。

我希望这个 CDC 作业永远运行。

我收到这条消息:

Executed as user: 1b23b4b8a3ec\1b23b4b8a3ec$. 
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32). [SQLSTATE 42000] (Error 217)

我的检查

EXEC msdb.dbo.sp_help_job
@job_name = N'cdc.MyDBName_capture',
@job_aspect = N'ALL' ;

返回:last_outcome_message

The job failed. The Job was invoked by User sa. The last step to run was step 2 (Change Data Capture Collection Agent).

.

接下来,做进一步的检查:

SELECT 
job.*, '|' as "1"
, activity.*, '|' as "2", history.*
, CASE
WHEN history.[run_status] = 0 THEN 'Failed'
WHEN history.[run_status] = 1 THEN 'Succeeded'
WHEN history.[run_status] = 2 THEN 'Retry (step only)'
WHEN history.[run_status] = 3 THEN 'Canceled'
WHEN history.[run_status] = 4 THEN 'In-progress message'
WHEN history.[run_status] = 5 THEN 'Unknown'
ELSE 'N/A' END as Run_Status
FROM msdb.dbo.sysjobs_view job
INNER JOIN msdb.dbo.sysjobactivity activity ON job.job_id = activity.job_id
INNER JOIN msdb.dbo.sysjobhistory history ON job.job_id = history.job_id
WHERE 1=1
AND job.name = 'cdc.MyDBName_capture'
AND history.run_date = '20180122'

返回: See this SQL result Image

抱歉,我没有足够的声誉来嵌入 img,所以链接代替。

如您所见,CDC 作业将启动并运行...并...重试 10 次,10 次后,我无法再捕获更改。

我需要通过以下方式重新开始工作:

EXEC msdb.dbo.sp_start_job N'cdc.MyDbName_capture';

然后 foreach ~1 分钟,作业重试 --> 直到 10 --> 作业停止 ¯_(ツ)_/¯


那么你能告诉我为什么以及如何解决它吗??

仅供引用,这是我的工作配置:

-- https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-add-job-transact-sql

EXECUTE sys.sp_cdc_change_job
@job_type = N'capture',
@maxscans = 1,
@maxtrans = 500,
@continuous = true,
@pollinginterval = 1
;

这也不是触发问题,对吧?尝试关闭触发器时我感到很危险,但没有成功。

-- Turn off recursion trigger
ALTER DATABASE MyDBName
SET RECURSIVE_TRIGGERS OFF;

最佳答案

我在 Windows 服务器下运行的 SQL Server 2017 上遇到了同样的事情。有趣的是,同一个系统多年来一直在 SQL2012 下运行,没有出现任何问题,所以我认为这可能是在此过程中引入的一些错误。

我发现通过一些重试,问题得到了解决,因此作为一种解决方法,我编辑了作业并增加了重试次数,但还没有再次看到它。

关于sql-server - 为什么更改数据捕获 (SQL Server) 作业会在特定持续时间后自动停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48379927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com