Dica rápida…

Hoje estava habilitando o Change Data Capture em um cliente e ao tentar executar a procedure sys.sp_cdc_enable_db recebi a mensagem:

Msg 22830, Level 16, State 1, Procedure sp_cdc_enable_db_internal, Line 193
Could not update the metadata that indicates database xxxxxxx 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.’. Use the action and error to determine the cause of the failure and resubmit the request.

Para confirmar, execute o comando abaixo e veja que o CDC não foi habilitado no banco de dados:

select is_cdc_enabled, * from sys.databases

CDC1

A parte principal da mensagem de erro é essa: 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. Eu já tinha recebido essa mensagem de erro outras vezes em outros clientes e a solução está relacionada sempre ao usuário que é o owner do banco de dados do servidor. Normalmente o owner não consegue ser encontrado no servidor porque o SQL não consegue mapear o SID do owner no banco de dados. Como esse servidor tinha sido recentemente migrado do SQL Server 2000 para o SQL Server 2014, imaginei que o problema estava totalmente relacionado a esta migração, já que ela foi feita side-by-side e não in place.

Finalizando, a solução foi simples, bastando atribuir um usuário válido como owner do banco de dados com o comando sp_changedbowner conforme recomendado por este KB 913423 no site da Microsoft.

Depois disso, ficou fácil… CDC habilitado com sucesso!!

CDC2

Até a próxima!

Anúncios