Ich habe ein verwirrendes Problem, nachdem ich den Computernamen eines Remote-Servers geändert habe, auf dem sich eine lokale SQL Server-Instanz befindet.
Grundsätzlich wurde ein Remote-Server von einem Standort auf einen anderen verschoben. Um dies zu vereinfachen, habe ich die alte Datenbank gesichert und unter einem neuen Datenbanknamen wiederhergestellt, wobei die Daten gelöscht wurden, damit sie als neue Datenbank für die Client-Software verwendet werden können. Ich habe auch den Computernamen geändert, da wir dies immer tun, um jeden Server anhand seiner Standortnummer zu identifizieren.
Die Datenbank kann von der Client-Software problemlos verbunden werden, und ich kann mich direkt bei SQL Server anmelden. Einer meiner SQL Server Agent-Jobs schlägt jedoch mit einem Fehler im Ereignisprotokoll fehl:
Geplanter SQL Server-Job 'Nächtliches Zurücksetzen' (0x4F76FDFFF6DFFE4EA0DE4A70252AD3BD) - Status: Fehlgeschlagen - Aufgerufen am: 2012-02-07 08:10:05 - Meldung: Der Job ist fehlgeschlagen. Es kann nicht festgestellt werden, ob der Eigentümer (Site-19 \ Admin) des Jobs Nightly Reset Serverzugriff hat (Grund: Es konnten keine Informationen zur Windows NT-Gruppe / zum Benutzer 'Site-19 \ Admin', Fehlercode 0x534, abgerufen werden. [SQLSTATE 42000] ( Fehler 15404)).
Jetzt ist 'Site-19' der alte Computername, der geändert und der Server zurückgesetzt wurde. Ich verbinde mich manuell mit 'Site-28', der neuen Site-Nummer, und es wird angezeigt, dass ich mit Site-28 \ Admin mit dem SQL Server verbunden bin. Wenn ich mir jedoch die Eigenschaften des Agent-Jobs ansehe, wird der Eigentümer als Site-19 \ Admin angezeigt, und wenn ich versuche, nach Benutzern zu suchen, um ihn zu ändern, wird Site-28 \ Admin nicht als Option angezeigt , nur Site-19 \ Admin. Wenn ich einen neuen Job aus diesem herausschreibe und den Eigentümer manuell in "Site-28 \ Admin" ändere, wird der neue Job mit dem Eigentümer "Site-19 \ Admin" erstellt.
In sys.servers (oder über sp_helpserver) habe ich nur einen Eintrag: den aktuellen Computernamen. SELECT @@ SERVERNAME gibt jedoch den ursprünglichen Namen der Entwicklungsmaschine zurück (vor zwei Namensänderungen).
Kurz gesagt, ich kann diesen wichtigen SQL Server-Agent-Job nicht ausführen, da er einem Benutzer gehört, der nicht mehr vorhanden ist, und ich kann nicht herausfinden, wie er geändert oder als der richtige Benutzer erstellt werden kann.
quelle
Antworten:
Haben Sie beim Hinzufügen des neuen Servernamens mit sp_addserver daran gedacht, die Bezeichnung "local" anzugeben? Dieses Tag aktualisiert die Metadaten für @@ SERVERNAME. Mehr Informationen.
quelle
@@ServerName
die nicht aktualisiert wurde, bis ich SQL Server neu starteteIch habe die Antwort gestern mit Hilfe eines Freundes gefunden. Ich musste mich über SSMS mit einem anderen Benutzer als dem Windows-Login anmelden, den ich verwenden wollte, den alten Login löschen und meinen Windows-Login erneut hinzufügen. Danach konnte ich das Eigentum an dem Job ordnungsgemäß übertragen, SQL konnte die Benutzerdaten von Windows abrufen und alles war in Ordnung mit der Welt.
quelle
SELECT 'use ' + DB_NAME(database_id) + ';EXEC sp_changedbowner ''sa'';' FROM sys.databases where DB_NAME(database_id) like 'MyDbs%';
. Danach konnte ich die schlechte Anmeldung fallen lassenIch benutze das Folgende, um Probleme zu identifizieren und die richtigen Drop- und Add-Anweisungen zu erstellen. Wenn Sie ALL OK erhalten, müssen Sie nichts tun, sonst müssen Sie die Befehle ausführen.
quelle
Hatte ein ähnliches Problem: Der Hostname eines Computers wurde geändert, auf dem SQL Server und SQL Server Agent ausgeführt werden. Jobs wurden zugewiesen. Nach dem Erstellen eines temporären Benutzers / der Anmeldung bei SSMS mit diesem neuen temporären Benutzer / drop und dem Erstellen des Anmeldenamens (public und sysadmin privs!) / Neuzuweisen der Jobs zu diesem neu erstellten Login war alles in Ordnung. Vielleicht könnten Sie eine Systemtabelle manipulieren, um dieselbe Änderung widerzuspiegeln. aber obige Methode ist nicht so riskant.
quelle