web-dev-qa-db-fra.com

Echec de la réplication 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ésoudre. Ce que je fais, c'est restaurer deux bases de données à partir d'une sauvegarde de production, puis installer la réplication entre elles. La réplication semble être configurée sans erreur, mais lorsque je regarde l'état, je vois des messages d'erreur comme celui-ci: 

J'ai un problème avec la réplication SQL que j'ai du mal à résoudre. Ce que je fais, c'est restaurer deux bases de données à partir d'une sauvegarde de production, puis installer la réplication entre elles. La réplication semble être configurée sans erreur, mais lorsque je regarde le statut dans le moniteur de réplication, des messages d'erreur semblables à ceux-ci apparaissent:

Messages d'erreur:

Le processus n'a pas pu s'exécuter 'sp_replcmds' sur 'MYSERVER1'. Obtenir help: http: // help/MSSQL_REPL20011

Impossible d'exécuter en tant que base de données principal parce que le principal "dbo" n'existe pas, ce type de principal ne peut pas être imité, ou vous pas avoir la permission. (Source: MSSQLServer, Numéro d'erreur: 15517) Obtenir de l'aide: http: // help/15517

Le processus n'a pas pu exécuter "sp_replcmds" sur "MYSERVER1" . Obtenir de l'aide: http: // help/MSSQL_REPL22037

Qu'est-ce que ça veut dire?

24
skb

Quand j'ai eu ce problème, ma base de données n'avait pas de propriétaire défini correctement. J'avais restauré une base de données à partir d'un autre domaine Windows, cliqué avec le bouton droit de la souris sur la base de données -> Propriétés et vérifié dans l'onglet "Général" que le propriétaire était correctement défini. Cependant, dans l'onglet "Fichiers", le propriétaire n'était pas défini du tout. Dès que je l'ai définie, la réplication s'est déroulée sans problème.

53

'dbo' est mappé sur un identifiant invalide. Si vous exécutez select suser_sname(owner_sid) from sys.databases, vous obtenez probablement NULL pour ces deux bases de données. Vous devez remplacer "dbo" par un identifiant valide. Exécuter, sur les deux bases de données:

ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa]
20
Remus Rusanu

 enter image description here

Le moyen le plus simple de corriger l'erreur consiste à utiliser ALTER AUTHORIZATION sur les bases de données correspondant au nom de connexion NULL pour dbo.

1
arnav

J'ai constaté que si vous utilisez des filtres d'article, vous devez utiliser un nom de filtre unique. Une fois que j'ai modifié le nom du filtre pour qu'il soit unique dans tous les articles, le problème a été résolu.

1
DCFx

Dans notre cas, le compte de service sur lequel l'instance SQL était en cours d'exécution a été verrouillé. Une fois déverrouillés et que nous ayons arrêté/redémarré les travaux de l'agent SQL LogReader, les choses ont recommencé.

0
E Elhassan