Échec de la réplication de SQL Server 2008 avec: le processus n'a pas pu exécuter 'SP replcmds'
j'ai un problème avec la réplication SQL que j'ai du mal à réparer. Ce que je fais, c'est restaurer deux DBs à partir d'une sauvegarde de production, puis installer la réplication entre eux. La réplication semble être configuré sans aucune erreur, mais quand je regarde l'état je vois des messages d'erreur comme ceci:
j'ai un problème avec la réplication SQL que j'ai du mal à réparer. Ce que je fais, c'est restaurer deux DBs à partir d'une sauvegarde de production, puis installer la réplication entre eux. La réplication semble être configuré sans aucune erreur, mais quand je regarde l'état dans le Moniteur de Réplication je vois des messages d'erreur comme ceci:
messages d'erreur:
le processus ne pouvait pas exécuter "sp_replcmds" sur "MYSERVER1". Obtenir aide: http://help/MSSQL_REPL20011
ne peut pas s'exécuter comme la base de données principal parce que le principal "dbo" faire n'existe pas, ce type de principal ne peuvent pas être imités, ou vous n'avez pas avoir l'autorisation. (Source: MSSQLServer, Numéro d'erreur: 15517) obtenir de l'aide: http://help/15517
le processus ne pouvait pas exécuter 'sp_replcmds' sur 'MYSERVER1'. Obtenir de l'aide: http://help/MSSQL_REPL22037
Qu'est-ce que cela signifie?
5 réponses
quand j'ai eu ce problème, ma base de données n'avait pas de propriétaire correctement défini. J'avais restauré une base de données à partir d'un autre domaine windows, à droite cliqué la base de données -> propriétés et vérifié dans l'onglet "Général" que le propriétaire a été réglé correctement. Cependant, dans l'onglet" Fichiers", le propriétaire n'était pas défini du tout. Dès que je l'ai paramétré, la réplication fonctionnait sans problème.
" dbo " cartes à une connexion n'est pas valide. Si vous lancez select suser_sname(owner_sid) from sys.databases
, vous obtiendrez probablement NULL pour ces deux DBs. Vous devez changer ' dbo ' en un login valide. Exécutez, sur les deux bases de données:
ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa]
j'ai trouvé que si vous utilisez des filtres article, vous devez utiliser un nom de filtre unique. Une fois que j'ai changé le nom du filtre pour être unique dans tous les articles, il a corrigé cette question.
la manière la plus simple de corriger l'erreur est d'utiliser ALTER AUTHORIZATION sur les bases de données qui ont la correspondance de connexion nulle pour dbo.
dans notre cas, le compte de service sur lequel L'instance SQL fonctionnait a été verrouillé. Une fois déverrouillés et que nous avons arrêté/redémarré les travaux d'agent SQL de LogReader, les choses ont recommencé à circuler.