我正在使用 SQL Server 2019 并尝试在数据库上启用 Microsoft CDC。
如果我创建一个新数据库并运行 EXEC sys.sp_cdc_enable_db 我看到“命令已成功完成,并且显示其已从 sys.databases 启用
问题:
我有一个现有的旧数据库,我想将其设置为 cdc,如果我克隆它并运行命令 EXEC sys.sp_cdc_enable_db 我得到:
Could not update the metadata that indicates database existing_db_cdc is enabled for Change Data Capture. The failure occurred when executing the command 'SetCDCTracked(Value = 1)'. The error returned was 15517: 'Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.'.
我用谷歌搜索并找到了这个答案:EXEC sp_changedbowner 'sa'
这会将所有者从与 cdc_test 相同的所有者更改为 sa:
重新运行
EXEC sys.sp_cdc_enable_db
给了我一个新的错误
Could not update the metadata that indicates database existing_db_cdc is enabled for Change Data Capture. The failure occurred when executing the command 'sp_cdc_create_objects'. The error returned was 2759: 'CREATE SCHEMA failed due to previous errors.'
我在这里不知所措,并尝试再次更改数据库所有者,但如果我将其更改回前一个错误,则错误不会改变,我仍然看到第二个错误而不是第一个错误。
我在 cdc_test 数据库上的数据库主体是:
而在existing_db_cdc上是将数据库所有者设置为sa之后:
我尝试过的其他事情:
exec sys.sp_cdc_enable_db
返回第二个错误sysservers
到 serverproperty('servername')
的服务器名称,这些在两个数据库上都匹配注意事项 该数据库与最初创建它的服务器位于不同的服务器上,位于我的本地主机上,尝试在之前所在的服务器上出现相同的错误。
不确定这个克隆的数据库有什么不同或者还有什么可以尝试的 这个堆栈溢出说他们将其与数据库触发器相关,但答案有一个死链接,我不知道如何找到它。
这是两个数据库上的两个 dbo 用户,我尝试用
alter user dbo with LOGIN = dbo
更改现有的用户,但得到了 Cannot alter the user'dbo'
如果您仍在处理这个问题,我们也遇到过同样的问题。
在我们的例子中,解决方案是禁用任何正在审核数据库对象(函数、表、过程等)更改的自定义数据库触发器。
也许这不是你的情况,但希望它有帮助。