2010-04-27 7 views
23

Ich habe ein Problem mit SQL Replication, das Probleme beim Reparieren hat. Ich stelle zwei DBs aus einer Produktionssicherung her und installiere dann die Replikation zwischen ihnen. Die Replikation scheint ohne Fehler konfiguriert zu sein, aber wenn ich mir den Status anschaue, sehe ich Fehlermeldungen wie diese:Fehler bei der SQL Server 2008-Replikation mit: Prozess konnte 'sp_replcmds' nicht ausführen

Ich habe ein Problem mit SQL Replication, dass ich Probleme habe zu beheben. Ich stelle zwei DBs aus einer Produktionssicherung her und installiere dann die Replikation zwischen ihnen. Die Replikation scheint ohne Fehler konfiguriert werden, aber wenn ich auf den Status in Replication Monitor aussehen sehe ich Fehlermeldungen wie folgt aus:

Fehlermeldungen:

Der Prozess kann nicht ‚sp_replcmds‘ ausführen kann auf "MYSERVER1". Hilfe erhalten: http://help/MSSQL_REPL20011

kann nicht als Datenbank ausführen Haupt, weil der Haupt „dbo“ nicht vorhanden ist, diese Art von Haupt nicht imitierten werden, oder Sie nicht Berechtigung haben. (Quelle: MSSQLServer, Fehlernummer: 15517) Hier finden Sie Hilfe: http://help/15517

Der Prozess kann nicht 'sp_replcmds' auf 'MYSERVER1' ausführen kann. Hilfe erhalten: http://help/MSSQL_REPL22037

Was bedeutet das?

Antwort

20

'dbo' entspricht einer ungültigen Anmeldung. Wenn Sie select suser_sname(owner_sid) from sys.databases ausführen, erhalten Sie wahrscheinlich NULL für diese zwei DBs. Sie müssen "dbo" in eine gültige Anmeldung ändern. Führen Sie in beiden Datenbanken aus:

ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa] 
+0

Doing, das wird der Besitzer der DB zu sa, was ich nicht will. Der Besitzer der DB ist derzeit mein persönlicher Account, und ich möchte, dass es so bleibt. Könnte ich Dbo irgendwie neu assoziieren? – skb

+0

Sie können es jedem beliebigen Konto zuordnen, aber es muss ein gültiges NT-Konto sein. Gibt suser_sname (owner_sid) NULL zurück? Dann ist ein ungültiger Account und Sie müssen ihn * ändern *. –

51

Als ich dieses Problem hatte, hatte meine Datenbank keinen Besitzer ordnungsgemäß festgelegt. Ich hatte eine Datenbank aus einer anderen Windows-Domäne wiederhergestellt, mit der rechten Maustaste auf die Datenbank -> Eigenschaften und verifiziert in der Registerkarte "Allgemein", dass der Besitzer richtig eingestellt war. In der Registerkarte "files" wurde der Besitzer jedoch überhaupt nicht festgelegt. Sobald ich es eingestellt hatte, lief die Replikation ohne Probleme.

+1

Diese Antwort hat meine geistige Gesundheit gerettet! Ich habe eine Ablaufverfolgung ausgeführt und festgestellt, dass die Änderung des Eigentümers in der Registerkarte "Dateien" sp_changedbowner aufruft, die "ALTER AUTHORIZATION ..." aufruft, wie in Remus 'Antwort auf diese Frage erwähnt. – GaTechThomas

+0

Es ist einfach zu tun. Habe meinen Tag gerettet. Funktioniert. –

+1

Das hat es auch für mich repariert, vielen Dank! – Dan

1

Ich habe festgestellt, dass Sie bei Verwendung von Artikelfiltern einen eindeutigen Filternamen verwenden müssen. Nachdem ich den Filternamen für alle Artikel eindeutig geändert habe, wurde dieses Problem behoben.

0

In unserem Fall wurde das Dienstkonto gesperrt, auf dem die SQL-Instanz ausgeführt wurde. Nach der Entsperrung und dem Stoppen/Neustarten der LogReader SQL Agent-Jobs fingen die Dinge wieder an zu fließen.

1

enter image description here

Der einfachste Weg, den Fehler zu korrigieren ist ALTER AUTHORIZATION auf die Datenbanken zu verwenden, die den NULL-Login Match für dbo haben.