Bakım planı işinde yerel sunucu bağlantısı nasıl değiştirilir veya güncelleştirilir


15

İki gün önce müşterimiz Dev Server adımızı değiştirdi

Sunucu Yeniden Adlandırıldıktan sonra, sunucu adı uyuşmazlığı nedeniyle tüm bakım işlerim ve diğer işlerim başarısız oluyor.

Biz kullandığınız SQL Server 2012 sürümü ve sunucu 2008 OS

Bu yüzden bugün sabah Sql sunucusu 2012 adımı verilen adı güncelledi ve tablo, prosedür güncellemeleri yaptım

Bakım işinde Yerel sunucu bağlantısını güncellemeye çalıştım ancak düzenlenemez. Sonra yeni sunucu bağlantısı ekledi, hala hiçbir fayda i iş yürütürken hata alıyorum.

İşler özellik seçeneğinde hedef sayfa ile denedikten sonra, sadece hedef sunucu seçilir ve birden çok hedef sunucu devre dışı bırakılır.

Aşağıdaki hata

Kullanıcı olarak yürütülür: NT Service \ SQLSERVERAGENT. 64-bit Telif Hakkı (C) için Microsoft (R) SQL Server Execute Package Utility Sürüm 11.0.2100.60 Microsoft Corporation. Tüm hakları Saklıdır.
Başladı: 12:01:28 Hata: 2013-12-16 00: 01: 43.98 Kod: 0xC00291EC Kaynak: {410F7661-F71A-4B68-9584-BA422AB00F02} SQL Görevi Yürüt
Açıklama: Bağlantı "Yerel sunucu bağlantısı" alınamadı . Bağlantı doğru yapılandırılmamış olabilir veya bu bağlantı için doğru izinlere sahip olmayabilir. Bitiş Hatası
Hatası: 2013-12-16 00: 02: 00.00
Kod: 0xC0024104
Kaynak: Territory_Update
Açıklama: Görevdeki Execute yöntemi hata kodu 0x80131904 döndürdü (SQL Server'a bağlantı kurulurken ağla ilgili veya örneğe özgü bir hata oluştu. Sunucu bulunamadı ya da erişilemedi. Örnek adının doğru ve SQL Server uzak bağlantılara izin verecek şekilde yapılandırılmıştır. (Sağlayıcı: Adlandırılmış Kanallar Sağlayıcısı, hata: 40 - SQL Server bağlantısı açılamadı). Execute yöntemi başarılı olmalı ve sonucu "out" parametresi kullanarak göstermelidir. Son Hata
Hatası: 2013-12-16 00: 02: 15.00
Kod: 0xC0024104
Kaynak: {4E2AF328-0B8D-4905-83BE-839FDDEFC09C}
Açıklama: Görevdeki Execute yöntemi hata kodu 0x80131904 döndürdü (SQL Server'a bağlantı kurulurken ağla ilgili veya örneğe özgü bir hata oluştu. Sunucu bulunamadı ya da erişilemedi. Örnek adının doğru ve SQL Server uzak bağlantılara izin verecek şekilde yapılandırılmıştır. (Sağlayıcı: Adlandırılmış Kanallar Sağlayıcısı, hata: 40 - SQL Server bağlantısı açılamadı). Execute yöntemi başarılı olmalı ve sonucu "out" parametresi kullanarak göstermelidir.
Bitiş Hatası DTExec: Paket yürütme DTSER_FAILURE (1) döndürdü.
Başlama: 12:01:28
Bitti: 12:02:15
Geçen süre: 46.641 saniye.
Paket yürütülemedi.
Adım başarısız oldu.

Bu adamlarda bana yardım et, şimdiden teşekkürler


Ben de aynı sorunu yaşadım. Yeniden oluşturulmuş bakım planı.
Sarathi Reddy

Yanıtlar:


14

Bakım planları, MSDB'de saklanan SSIS paketlerini kullanır. Bu paketler, sunucu yeniden adlandırıldıktan sonra değiştirilmeyen bağlantı dizelerini kullanır.

Tarafından gönderildi senaryoyu (aşağıda çoğaltılamaz) kullanın NancySon yorumlarında SQL Server'ın tek başına bir örneğini barındıran bu Rename Bir Bilgisayara: Nasıl bu bağlantı dizeleri değiştirmek için bazı ilham alır. Veya bakım planlarını yeniden oluşturun.

Bakım planları, bağlantılarının yeni sunucu adına değiştirilmesini sağlamaz ve bu nedenle kesilebilir. Yeniden adlandırma işleminden sonra varolan bakım planlarını silemeyeceğinizi veya yeniden adlandıramayacağınızı görebilirsiniz, bu nedenle sunucuyu yeniden adlandırmadan önce silin ve sonra yeniden oluşturun veya düzeltmek için aşağıdaki komut dosyasını çalıştırın:

   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

Ben bu kodu kullanılan bu cevap Sunucu Arıza soruya bakım planları hala eski adı var ancak bir SQL Server yeniden adlandırıldı, :

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)

Ve yeniden adlandırmak için:

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

Bir SQL Server'ı yeniden adlandırdığınızda (yani Windows NetBIOS adını değiştirdiğinizde), dahili olarak yeniden adlandırmak için SQL Server içindeki bu küçük manuel adımı gerçekleştirmeniz gerekir. İçinde Ayrıntılar bu MSKB makalede .


1

Bu eski bir iş parçacığı / soru olduğunu biliyorum ama bugün benzer bir sorun vardı ve yukarıdaki komut dosyaları uygulayarak çözüldü, bu yüzden teşekkür ederim DarkS0ul. Ve işlemde bunu çözmenin başka bir yolunu buldum: işteki adımı düzenleyin, Veri kaynakları altında Yerel sunucu bağlantısını kontrol edin ve Veri Kaynağı = Sunucuadı bölümünü düzenleyin. Ve işte!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.