我在 SQL Server 2012 实例上设置变更数据捕获时遇到问题。每当我尝试在表上启用CDC时,都会收到以下错误:
Msg 22832,级别 16,状态 1,程序 sp_cdc_enable_table_internal, 623
路 无法更新指示表的元数据 [德博]。[表名称] 已启用变更数据捕获。
失败 在执行命令"[sys]时发生。[sp_cdc_add_job] @job_type = N'捕获''。
返回的错误为 22836:"无法更新数据库 [数据库名称] 的元数据以指示变更数据捕获 已添加作业。执行命令时发生故障 "sp_add_jobstep_internal"。
返回的错误是 14234:" 指定的"@server"无效(有效值由 sp_helpserver).'。使用操作和错误来确定 的原因 失败并重新提交请求。使用操作和错误来 确定失败的原因并重新提交请求。
服务器的名称没有更改,我尝试了sp_dropserver
/sp_addserver
解决方案并收到以下错误:
Msg 15015,级别 16,状态 1,过程 sp_dropserver,第 42
行 服务器"服务器名称"不存在。使用sp_helpserver显示 可用的服务器。Msg 15028,级别 16,状态 1,过程 sp_addserver,第 74
行 服务器"服务器名称"已存在。
正如我所说,我正在尝试设置 CDC 而不是复制。SQL Server 的版本是: 11.0.5058.0 (SQL Server 2012 SP2)
我在表级别启用CDC时查看了错误并尝试了该解决方案。
我也试过:
exec sys.sp_cdc_add_job @job_type = N'capture'
我收到以下错误:
Msg 22836,级别 16,状态 1,过程 sp_cdc_add_job_internal,第 282
行 无法更新数据库 [数据库名称] 的元数据以指示 已添加变更数据捕获作业。发生故障 执行命令"sp_add_jobstep_internal"时。
返回的错误为 14234:"指定的'@server'无效(有效值由 sp_helpserver 返回)。使用操作和错误来 确定失败的原因并重新提交请求。
任何帮助将不胜感激。
如此处所列,检查名称是否匹配
SELECT srvname AS OldName FROM master.dbo.sysservers
SELECT SERVERPROPERTY('ServerName') AS NewName
如果没有,请使用以下方法修复:
sp_dropserver '<oldname>';
GO
sp_addserver '<newname>', local;
GO
该错误是由于 SERVERPROPERTY('ServerName')) 和 master.dbo.sysservers 之间的值不匹配引起的
检查以下 SQL:
SELECT * FROM master.dbo.sysservers
SELECT SERVERPROPERTY('ServerName')
如果您的SERVERPROPERTY('ServerName')
不是任何sysservers
,则解决方法是更改您的计算机名称以匹配其中之一。
添加服务器可解决此问题:
DECLARE @ServerName NVARCHAR(128) = CONVERT(sysname, SERVERPROPERTY('servername'));
EXEC sp_addserver @ServerName, 'local';
GO
我也有类似的情况,我恢复了一个从另一台Windows机器获得的bak文件,该文件保留了具有旧PC名称的Windows用户帐户。我删除了备份,创建了一个空的数据库并还原到该数据库。这解决了我的问题