Entegrasyon Hizmetlerini kullanmadan bir bakım planını dışa aktarabilir miyim?


12

Bir SQL Server örneğinden basit bir bakım planı vermeye çalışıyorum.

Dışa aktarımı kaynak denetimine denetlemek ve dışa aktarılan bakım planını işlevsel olarak aynı örneklere uygulamak istiyorum.

StackOverflow ve SQL Server Newbie , bakım planını dışa aktarmak için Entegrasyon Hizmetlerini kullanmanızı önerir.

Dışa Aktarma hedefindeki Entegrasyon Hizmetlerine bağlanmaya çalıştığımda, aşağıdaki hatayı alıyorum:

"WEBSERVER" bilgisayarındaki Integration Services hizmetine bağlanma aşağıdaki hatayla başarısız oldu: Belirtilen hizmet yüklü bir hizmet olarak yok.

WEBSERVER üzerinde Entegrasyon Hizmetlerini devre dışı bırakmayı seçtik çünkü bu kutuyu yalnızca tüketici uygulamalarına veri sunmak için kullanıyoruz. WEBSERVER üzerindeki tüm veriler bir arka uç örneğinden çoğaltılır. Entegrasyon Hizmetleri, arka uç örneğindeki verileri işlemek için yoğun olarak kullanılır.

Entegrasyon Hizmetlerini kullanmadan bakım planını dışa aktarmanın belgelenmiş bir yolu var mı? Microsoft destekliyor mu?

Yanıtlar:


10

Bakım planları, SQL Server'da depolanan diğer SSIS paketleri gibi msdb.dbo.sysssispackages'da depolanır. MSDB'den SSIS Paket Özü ile ilgili size yardımcı olan kullanışlı bir yazım var.


Bu yalnızca SSIS tam olarak yüklüyse çalışır, çünkü dtutil- bu yuvarlak olarak inşa edilmiştir - mevcut olsa bile temelde devre dışı bırakılır. Bazı SQL Server sürümleri (Web Sürümü gibi), Bakım Planları temel olarak SSIS'in neredeyse tüm işlevlerini kullanmasına rağmen, SSIS'nin tam olarak yüklenmesine izin vermez. (Bununla birlikte, bunlardan biri hobbled olmayan iki SQL Server sürümüne sahip olduğunuzu varsayarsak, bunu yapmak için bir kesmek var - aşağıdaki cevabımı görün.)
MikeBeaton

3

Bunu yapmanın bir yolu var.

OP gibi, biri SSIS kurulu olan ve biri olmayan (muhtemelen SQL Server Web Edition ise) yapamayan iki SQL Server örneğiniz olduğunu varsayın.

Kullanıcı bakım planı satırlarını hobbled sunucusundan hobbled olmayana kopyalayan saklı bir yordam yazın. İlgili satırlar:

SELECT name 
FROM msdb.dbo.sysssispackages 
WHERE packagetype = 6

Bu SP'yi yazmanız gerekir, böylece önce eşleşenlerin bulunduğu tüm satırları siler id, ardından en son sürümleri (veya UPDATEeşleşen ids, ardından INSERTeksik ids) ekler . Ayrıca, her iki sunucuyu da ele alan SQL yazabilmeniz için bir veya diğer tarafta bağlantılı bir sunucu kurmanız gerekir.

İşte bu, gerçekten, daha sonra bunu düzenli olarak ... örneğin bir bakım planından ... arayabilir ve taşlanmayan taraftaki tüm bakım planlarını yedekleyebilirsiniz.

Bu elbette büyük bir hack, ama aslında işe yarıyor. (Verilerin gerçekte msdb.dbo.sysssispackagesolduğu gibi farklı sunucu örnekleri arasında uyumlu olması için SQL Server'ın sürüm numarasının her iki tarafta da aynı olması oldukça önemlidir .)

Tabii ki, doğrudan doğrudan SSIS veritabanı tablosundan ilgili satırları yedekleyebilirsiniz. Yine de işe yarar - orijinal soruya tam bir cevap olarak. Belirtildiği gibi, bu SSIS'yi varsaymakla ilgisi yoktur - sadece Bakım Planlarını gerektirir!

Bu, sistemin herhangi bir yerinde SSIS olmadan çalışan desteklenen, hafif bir yöntemdir. Yukarıdaki daha karmaşık, daha hacky yönteminin avantajı, sadece çıplak veri satırları olarak değil, dışa aktarılan planları standart bir formatta vermesidir; bu yüzden daha sonra SQL Server'ın farklı bir sürümüne alınabilir olması daha muhtemel olduğunu düşünüyorum.


1

EXACT ile aynı konuda mücadele ediyorum. İşte ana paket:

WEBSERVER ürününüzde entegrasyon hizmetine gerek yoktur. Belgelendirilmiş bir yol DTUTIL kullanmaktır. SQL Server Bakım Paketlerini bir kaynaktan hedefe kopyalamak için Entegrasyon Hizmetlerinin yüklü olduğu HERHANGİ BİR SQL Server'ı (hatta tüm Enterprise özelliklerine sahip ücretsiz geliştirici sürümü) kullanın - paketin kaynağı veya hedefi, şekilde gösterildiği gibi olmasa bile Örnek A.

Örnek A: SQL Server üzerinde Çalıştır dtutil MySSISServerA bir SQL Bakım Paketi kopyalamak için MySourceServerB için MyDestServerC .

DTUTIL /SQL "Maintenance Plans\Nightly Maintenance" /copy  sql;"Maintenance Plans\Nightly Maintenance" /sourceserver MySourceServerB /destserver MyDestServerC /Q

Bu ANYaynı uyarıyla = aksi takdirde, DTUTIL planı vCurrent'e yükseltir
billinkc

Harika bir nokta! Ancak yükseltmeler yardımcı olabilir - zaten ne yaptığımız için. Yapmak istediğim SQL 2008'de planlar oluşturmak ve bu planları SQL 2008, 2008 R2, 2012,2014, 2016'ya kopyalamak / yükseltmektir.
Sting

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.