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?
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.
'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]
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.
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é.