So ändern oder aktualisieren Sie die lokale Serververbindung im Wartungsplanjob


15

Vor zwei Tagen hat unser Kunde einen unserer Dev Server Namen geändert

Nach dem Umbenennen des Servers schlagen alle meine Wartungsaufträge und andere Aufträge fehl, da der Servername nicht übereinstimmt.

Wir verwenden SQL Server 2012 Version und Server 2008 OS

Also habe ich heute Morgen meinen SQL Server 2012 Namen in aktualisierten Vornamen umbenannt und eine Tabelle erstellt, Prozeduren aktualisiert

Ich habe versucht, die lokale Serververbindung im Wartungsjob zu aktualisieren, sie kann jedoch nicht bearbeitet werden. Dann fügte ich neue Serververbindung hinzu, noch keine Verwendung, die ich unter Störung erhalte, während, Jobs ausführend.

Nachdem ich es mit der Eigenschaftsoption "Zielseite in Jobs" versucht habe, wird auch nur der Zielserver ausgewählt und mehrere Zielserver werden deaktiviert.

Fehler unten

Als Benutzer ausgeführt: NT Service \ SQLSERVERAGENT. Microsoft® SQL Server Execute Package Utility Version 11.0.2100.60 für 64-Bit Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
Gestartet: 00:01:28 Fehler: 2013-12-16 00: 01: 43.98 Code: 0xC00291EC Quelle: {410F7661-F71A-4B68-9584-BA422AB00F02} SQL-Task ausführen
Beschreibung: Fehler beim Abrufen der Verbindung "Lokale Serververbindung" . Die Verbindung ist möglicherweise nicht richtig konfiguriert oder Sie haben möglicherweise nicht die richtigen Berechtigungen für diese Verbindung. End Error
Fehler: 2013-12-16 00: 02: 00.00
Code: 0xC0024104
Quelle: Territory_Update
Beschreibung: Die Execute-Methode für die Task hat den Fehlercode 0x80131904 zurückgegeben. (Beim Herstellen einer Verbindung zu SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten. Der Server wurde nicht gefunden oder war nicht verfügbar. Überprüfen Sie, ob der Instanzname korrekt ist SQL Server ist so konfiguriert, dass Remoteverbindungen zugelassen werden (Anbieter: Named Pipes Provider, Fehler: 40 - Verbindung zu SQL Server konnte nicht hergestellt werden). Die Execute-Methode muss erfolgreich sein und das Ergebnis mit einem "out" -Parameter angeben. End Error
Fehler: 2013-12-16 00: 02: 15.00
Code: 0xC0024104
Quelle: {4E2AF328-0B8D-4905-83BE-839FDDEFC09C}
Beschreibung: Die Execute-Methode für die Task hat den Fehlercode 0x80131904 zurückgegeben. (Beim Herstellen einer Verbindung zu SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten. Der Server wurde nicht gefunden oder war nicht verfügbar. Überprüfen Sie, ob der Instanzname korrekt ist SQL Server ist so konfiguriert, dass Remoteverbindungen zugelassen werden (Anbieter: Named Pipes Provider, Fehler: 40 - Verbindung zu SQL Server konnte nicht hergestellt werden). Die Execute-Methode muss erfolgreich sein und das Ergebnis mit einem "out" -Parameter angeben.
End Error DTExec: Die Paketausführung hat DTSER_FAILURE (1) zurückgegeben.
Gestartet: 00:01:28
Beendet: 12:02:15 Abgelaufen
: 46,641 Sekunden.
Die Paketausführung ist fehlgeschlagen.
Der Schritt ist fehlgeschlagen.

Helft mir dabei, Danke im Voraus


Ich habe das gleiche Problem. Neuer Wartungsplan.
Sarathi Reddy

Antworten:


14

Wartungspläne verwenden SSIS-Pakete, die in MSDB gespeichert sind. Diese Pakete verwenden Verbindungszeichenfolgen, die nach einer Serverumbenennung nicht geändert werden.

Verwenden Sie das von NancySon in den Kommentaren unter Gewusst wie: Umbenennen eines Computers mit einer eigenständigen Instanz von SQL Server veröffentlichte Skript , um Anregungen zum Ändern dieser Verbindungszeichenfolgen zu erhalten. Oder erstellen Sie die Wartungspläne neu.

In Wartungsplänen werden die Verbindungen nicht auf den neuen Servernamen geändert, sodass sie möglicherweise unterbrochen werden. Nach einer Umbenennung können Sie möglicherweise die vorhandenen Wartungspläne nicht löschen oder umbenennen. Löschen Sie sie daher entweder vor dem Umbenennen des Servers und erstellen Sie sie anschließend neu, oder führen Sie das folgende Skript aus, um sie zu beheben:

   use msdb

   DECLARE @oldservername as varchar(max)
    SET @oldservername='<server name>\<instance name>'

   -- set the new server name to the current server name

   declare @newservername as varchar(max)
    set @newservername=@@servername

   declare @xml as varchar(max)
    declare @packagedata as varbinary(max)
    -- get all the plans that have the old server name in their connection string
    DECLARE PlansToFix Cursor
    FOR
    SELECT    id
    FROM         sysssispackages
    WHERE     (CAST(CAST(packagedata AS varbinary(MAX)) AS varchar(MAX)) LIKE '%server=''' + @oldservername + '%')

   OPEN PlansToFix


   declare @planid uniqueidentifier
    fetch next from PlansToFix into @planid

   while (@@fetch_status<>-1)  -- for each plan

   begin
    if (@@fetch_status<>-2)
    begin
    select @xml=cast(cast(packagedata as varbinary(max)) as varchar(max)) from sysssispackages where id= @planid  -- get the plan's xml converted to an xml string

   declare @planname varchar(max)
    select @planname=[name] from  sysssispackages where id= @planid  -- get the plan name
    print 'Changing ' + @planname + ' server from ' + @oldservername + ' to ' + @newservername  -- print out what change is happening

   set @xml=replace(@xml,'server=''' + @oldservername + '''','server=''' + @newservername +'''')  -- replace the old server name with the new server name in the connection string
    select @packagedata=cast(@xml as varbinary(max))  -- convert the xml back to binary
    UPDATE    sysssispackages SET packagedata = @packagedata WHERE (id= @planid)  -- update the plan

   end
    fetch next from PlansToFix into @planid  -- get the next plan

   end

   close PlansToFix
    deallocate PlansToFix
  ----- This will also handle the packages that have a tag such as 
    ----- <DTS:Property DTS:Name="ConnectionString">Data Source=servername;Integrated Security=SSPI;Connect Timeout=30;</DTS:Property>



   DECLARE @oldservername as varchar(max)
    SET @oldservername='<server name>\<instance name>'-- set the new server name to the current server name
    declare @newservername as varchar(max)
    set @newservername = @@servername
    declare @xml as varchar(max)
    declare @packagedata as varbinary(max)-- get all the plans that have the old server name in their connection string
    DECLARE PlansToFix Cursor FOR 
    SELECT id
    FROM sysssispackages
    WHERE (CAST(CAST(packagedata AS varbinary(MAX)) AS varchar(MAX)) LIKE '%Data Source=' + @oldservername + '%')

   OPEN PlansToFix
    declare @planid uniqueidentifier
    fetch next from PlansToFix into @planid 
    while (@@fetch_status<>-1) -- for each plan 
    begin
    if (@@fetch_status<>-2)
    begin
    select @xml=cast(cast(packagedata as varbinary(max)) as varchar(max)) 
    from sysssispackages where id= @planid -- get the plan's xml converted to an xml string
    declare @planname varchar(max)select @planname=[name] from sysssispackages where id= @planid -- get the plan name
    print 'Changing ' + @planname + ' server from ' + @oldservername + ' to ' + @newservername -- print out what change is happening
    set @xml=replace(@xml,'Data Source=' + @oldservername,'Data Source=' + @newservername) -- replace the old server name with the new server name in the connection string
    select @packagedata=cast(@xml as varbinary(max)) -- convert the xml back to binary
    UPDATE sysssispackages SET packagedata = @packagedata WHERE (id= @planid) -- update the plan
    end
    fetch next from PlansToFix into @planid -- get the next plan
    end
    close PlansToFix
    deallocate PlansToFix

3

Ich habe diesen Code aus dieser Antwort auf die Frage " Serverfehler" verwendet. Einen SQL Server umbenannt. Die Wartungspläne haben jedoch immer noch den alten Namen :

SELECT  x.*,
        LocalServerConnectionString = cm.value('declare namespace DTS="www.microsoft.com/SqlServer/Dts";DTS:ObjectData[1]/DTS:ConnectionManager[1]/@DTS:ConnectionString', 'varchar(1000)')
FROM (
    SELECT  id, name, packageXML = CAST(CAST(packagedata AS VARBINARY(MAX)) AS XML)
    FROM dbo.sysssispackages
    WHERE id IN (SELECT id FROM dbo.sysmaintplan_plans)
) x
CROSS APPLY packageXML.nodes('declare namespace DTS="www.microsoft.com/SqlServer/Dts";/DTS:Executable/DTS:ConnectionManagers/DTS:ConnectionManager[@DTS:ObjectName="Local server connection"]') p(cm)

Und umzubenennen:

UPDATE dbo.sysssispackages SET packagedata = CAST(CAST(REPLACE(CAST(CAST(packagedata AS VARBINARY(MAX)) AS VARCHAR(MAX)), 'OldServerName', 'NewServerName') AS XML) AS VARBINARY(MAX))
WHERE id = 'package GUID'

1

Wenn Sie einen SQL Server umbenennen (dh den Windows NetBIOS-Namen ändern), müssen Sie diesen kleinen manuellen Schritt auch in SQL Server ausführen, um ihn intern umzubenennen. Details in diesem MSKB-Artikel .


1

Ich weiß, dass dies ein alter Thread / eine alte Frage ist, hatte aber heute ein ähnliches Problem und löste es durch Anwenden der obigen Skripte. Vielen Dank, DarkS0ul. Und dabei habe ich einen anderen Weg gefunden, dies zu lösen: Bearbeiten Sie den Schritt im Job unter Datenquellen, überprüfen Sie die lokale Serververbindung und bearbeiten Sie den Teil Datenquelle = Servername. Und voila!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.