Bisakah saya mengekspor rencana perawatan tanpa menggunakan Layanan Integrasi?

12

Saya mencoba untuk mengekspor rencana pemeliharaan sederhana dari contoh SQL Server.

Saya ingin memeriksa ekspor ke kontrol sumber, dan menerapkan rencana pemeliharaan yang diekspor ke instance yang secara fungsional identik.

StackOverflow dan SQL Server Newbie merekomendasikan penggunaan Layanan Integrasi untuk mengekspor rencana pemeliharaan.

Ketika saya mencoba untuk terhubung ke Layanan Integrasi pada target Ekspor, saya menerima kesalahan berikut:

Menghubungkan ke layanan Layanan Integrasi pada komputer "WEBSERVER" gagal dengan kesalahan berikut: Layanan yang ditentukan tidak ada sebagai layanan yang diinstal.

Kami memilih untuk menonaktifkan Layanan Integrasi di WEBSERVER karena kami menggunakan kotak ini hanya untuk menyajikan data ke aplikasi konsumen. Semua data di WEBSERVER direplikasi dari instance backend. Layanan Integrasi banyak digunakan untuk memproses data pada instance backend.

Apakah ada cara yang terdokumentasi untuk mengekspor rencana pemeliharaan tanpa menggunakan Layanan Integrasi? Apakah Microsoft mendukungnya?

Iain Samuel McLean Elder
sumber

Jawaban:

10

Paket pemeliharaan disimpan dalam msdb.dbo.sysssispackages seperti paket SSIS lainnya yang disimpan ke SQL Server. Saya memiliki posting yang berguna pada Ekstrak Paket SSIS dari MSDB yang seharusnya menyembuhkan apa yang Anda alami.

billinkc
sumber
Ini hanya berfungsi jika Anda telah menginstal SSIS sepenuhnya, karena dtutil- yang dibangun ini - pada dasarnya dinonaktifkan jika tidak, meskipun ada. Beberapa versi SQL Server (seperti Web Edition) tidak memungkinkan SSIS untuk diinstal sepenuhnya, meskipun Rencana Pemeliharaan pada dasarnya menggunakan hampir semua fungsi SSIS. (Namun, ada peretasan untuk mengatasi ini, dengan asumsi Anda memiliki dua versi SQL Server, salah satunya tidak terpincang - lihat jawaban saya di bawah ini.)
MikeBeaton
3

Ada cara untuk melakukan ini.

Asumsikan, seperti OP, Anda memiliki dua contoh SQL Server, satu di antaranya memiliki SSIS yang diinstal dan yang lainnya tidak (mungkin tidak bisa, misalnya jika SQL Server Web Edition).

Tulis prosedur tersimpan yang menyalin baris rencana perawatan pengguna dari server yang tertatih-tatih ke yang tidak tertatih-tatih. Baris yang relevan adalah:

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

Anda harus menulis SP ini sehingga menghapus setiap baris dengan yang cocok idterlebih dahulu, lalu menyisipkan versi terbaru (atau pendekatan yang serupa, misalnya UPDATEmencocokkan id, lalu INSERThilang id). Dan Anda perlu mengatur server yang ditautkan di satu atau sisi lain, sehingga Anda dapat menulis SQL yang membahas kedua server.

Itu saja, sungguh, Anda kemudian dapat memanggil ini secara teratur ... dari rencana pemeliharaan, misalnya ... dan mencadangkan semua rencana pemeliharaan di sisi yang tidak tertatih-tatih.

Tentu saja, ini adalah retasan besar-besaran, tetapi sebenarnya berhasil. (Saya akan membayangkan bahwa itu cukup penting bahwa nomor versi SQL Server adalah sama di kedua sisi, agar data dalam msdb.dbo.sysssispackagesmenjadi kompatibel antara contoh server yang berbeda seperti yang tampaknya sebenarnya.)

Anda selalu dapat mencadangkan baris yang relevan dari tabel database SSIS secara langsung, tentu saja. Lagipula itu akan berhasil - sebagai jawaban lengkap untuk pertanyaan awal. Seperti yang dinyatakan, ini tidak ada hubungannya dengan mengandaikan SSIS - itu hanya mengandaikan Rencana Pemeliharaan!

Jadi itu adalah metode ringan yang didukung, yang bekerja tanpa SSIS di mana pun pada sistem. Keuntungan dari metode yang lebih rumit dan lebih rumit di atas adalah memberikan metode yang diekspor dalam format standar, bukan hanya sebagai baris data telanjang; jadi saya pikir itu lebih mungkin untuk diimpor ke versi SQL Server yang berbeda, nanti.

MikeBeaton
sumber
1

Saya telah berjuang dengan EXACT masalah yang sama. Inilah yang bisa dibawa pulang:

Tidak diperlukan layanan integrasi di WEBSERVER Anda. Salah satu cara yang terdokumentasi adalah menggunakan DTUTIL. Cukup gunakan sembarang SQL Server (bahkan edisi pengembang gratis dengan semua fitur Enterprise) yang memiliki Layanan Integrasi diinstal untuk menyalin Paket Pemeliharaan SQL Server dari sumber ke target - bahkan jika itu bukan sumber atau target paket seperti yang ditunjukkan pada Contoh A.

Contoh A: Jalankan DTUTIL pada SQL Server MySSISServerA untuk menyalin Paket Pemeliharaan SQL dari MySourceServerB ke MyDestServerC .

DTUTIL /SQL "Maintenance Plans\Nightly Maintenance" /copy  sql;"Maintenance Plans\Nightly Maintenance" /sourceserver MySourceServerB /destserver MyDestServerC /Q
Menyengat
sumber
Dengan peringatan yang ANY= versi yang sama, jika tidak, DTUTIL akan memutakhirkan paket ke vCurrent
billinkc
Poin yang bagus! Tetapi upgrade dapat bermanfaat - untuk apa yang kami lakukan. Yang ingin saya lakukan adalah membuat rencana dalam SQL 2008 dan menyalin / memutakhirkan rencana itu ke SQL 2008, 2008 R2, 2012,2014, 2016.
Sting