ฉันสามารถส่งออกแผนการบำรุงรักษาโดยไม่ใช้ Integration Services ได้หรือไม่


12

ฉันกำลังพยายามส่งออกแผนการบำรุงรักษาอย่างง่ายจากอินสแตนซ์ SQL Server

ฉันต้องการตรวจสอบการส่งออกไปยังตัวควบคุมแหล่งที่มาและใช้แผนการบำรุงรักษาที่ส่งออกกับอินสแตนซ์ที่เหมือนกันตามหน้าที่

แนะนำให้ใช้StackOverflowและSQL Server สำหรับ Integration Services เพื่อส่งออกแผนการบำรุงรักษา

เมื่อฉันพยายามเชื่อมต่อกับ Integration Services ในเป้าหมายการส่งออกฉันได้รับข้อผิดพลาดต่อไปนี้:

การเชื่อมต่อกับบริการการรวมบริการบนคอมพิวเตอร์ "WEBSERVER" ล้มเหลวด้วยข้อผิดพลาดต่อไปนี้: บริการที่ระบุไม่มีอยู่เป็นบริการที่ติดตั้ง

เราเลือกที่จะปิดการใช้งานบริการรวมใน WEBSERVER เพราะเราใช้กล่องนี้เฉพาะสำหรับการให้บริการข้อมูลแก่แอปพลิเคชันผู้บริโภค ข้อมูลทั้งหมดใน WEBSERVER ถูกจำลองแบบจากอินสแตนซ์ส่วนหลัง บริการการรวมถูกใช้อย่างมากสำหรับการประมวลผลข้อมูลในอินสแตนซ์แบ็กเอนด์

มีวิธีการจัดทำเอกสารเพื่อส่งออกแผนการบำรุงรักษาโดยไม่ใช้ Integration Services หรือไม่ Microsoft สนับสนุนหรือไม่

คำตอบ:


10

แผนการบำรุงรักษาจะถูกเก็บไว้ใน msdb.dbo.sysssispackages เช่นแพ็คเกจ SSIS อื่น ๆ ที่เก็บไว้ใน SQL Server ฉันมีโพสต์สะดวกในSSIS Package Extract จาก MSDBที่จะรักษาสิ่งที่คุณ


ใช้งานได้เฉพาะในกรณีที่คุณติดตั้ง SSIS ไว้อย่างสมบูรณ์เพราะdtutil- ซึ่งสิ่งนี้ถูกสร้างขึ้นรอบ - ถูกปิดการใช้งานเป็นอย่างอื่นแม้ว่ามันจะมีอยู่ SQL Server บางรุ่น (เช่น Web Edition) ไม่อนุญาตให้ติดตั้ง SSIS ได้อย่างสมบูรณ์แม้ว่าแผนการบำรุงรักษาจะใช้ฟังก์ชั่นการทำงานเกือบทั้งหมดของ SSIS (อย่างไรก็ตามมีแฮ็คที่จะแก้ไขปัญหานี้โดยสมมติว่าคุณมี SQL Server สองเวอร์ชันซึ่งหนึ่งในนั้นไม่ใช่ hobbled - ดูคำตอบของฉันด้านล่าง)
MikeBeaton

3

มีวิธีการทำเช่นนี้

สมมติว่าเช่น OP คุณมีอินสแตนซ์ของ SQL Server สองอินสแตนซ์หนึ่งซึ่งมี SSIS ที่ติดตั้งและหนึ่งในนั้นไม่ (อาจไม่เช่นถ้าเป็น SQL Server Web Edition)

เขียนโพรซีเดอร์ที่เก็บไว้ซึ่งคัดลอกแถวแผนการบำรุงรักษาผู้ใช้จากเซิร์ฟเวอร์ hobbled ไปยังที่ไม่ใช่ hobbled แถวที่เกี่ยวข้องคือ:

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

คุณจะต้องเขียน SP นี้เพื่อให้ลบแถวใด ๆ ด้วยการจับคู่idก่อนแล้วจึงแทรกรุ่นล่าสุด (หรือวิธีการที่คล้ายกันเช่นการUPDATEจับคู่ids แล้วINSERTไม่มีids) และคุณจะต้องตั้งค่าเซิร์ฟเวอร์ที่เชื่อมโยงในด้านหนึ่งหรือด้านอื่น ๆ เพื่อให้คุณสามารถเขียน SQL ที่อยู่ทั้งสองเซิร์ฟเวอร์

เพียงเท่านี้คุณก็สามารถเรียกสิ่งนี้ได้เป็นประจำ ... จากแผนการบำรุงรักษาตัวอย่างเช่น ... และสำรองแผนการบำรุงรักษาทั้งหมดที่อยู่ด้านที่ไม่มีปัญหา

แน่นอนว่ามันเป็นการแฮ็คขนาดใหญ่ แต่ใช้งานได้จริง (ฉันคิดว่ามันค่อนข้างสำคัญที่หมายเลขเวอร์ชันของ SQL Server จะเหมือนกันทั้งสองด้านเพื่อให้ข้อมูลmsdb.dbo.sysssispackagesสามารถเข้ากันได้ระหว่างอินสแตนซ์ของเซิร์ฟเวอร์ที่แตกต่างกันอย่างที่มันเป็นจริง)

คุณสามารถสำรองแถวที่เกี่ยวข้องจากตารางฐานข้อมูล SSIS ได้โดยตรงเสมอ นั่นจะใช้ได้อยู่ดี - เป็นคำตอบสำหรับคำถามเดิม ตามที่ระบุไว้สิ่งนี้ไม่เกี่ยวข้องกับการคาดการณ์ SSIS - มันเป็นเพียงแผนการเตรียมการบำรุงรักษา!

ดังนั้นจึงเป็นวิธีที่ได้รับการสนับสนุนน้ำหนักเบาซึ่งทำงานได้โดยไม่ต้องใช้ SSIS ที่ใดก็ได้ในระบบ ข้อได้เปรียบของวิธีที่ซับซ้อนและแฮ็คที่มากกว่านี้คือให้แผนการส่งออกในรูปแบบมาตรฐานไม่ใช่เป็นเพียงแถวข้อมูลเปล่า ดังนั้นฉันคิดว่ามีแนวโน้มมากที่จะนำเข้าสู่ SQL Server รุ่นอื่นในภายหลัง


1

ฉันกำลังดิ้นรนกับปัญหาเดียวกันที่แน่นอน นี่คือการซื้อกลับบ้านหลัก:

ไม่จำเป็นต้องรวมบริการเข้ากับ WEBSERVER ของคุณ วิธีหนึ่งที่มีการบันทึกไว้คือการใช้ DTUTIL เพียงใช้เซิร์ฟเวอร์ SQL ใด ๆ (แม้แต่รุ่นนักพัฒนาซอฟต์แวร์ฟรีที่มีคุณสมบัติองค์กรทั้งหมด) ที่มีบริการการติดตั้งเพื่อคัดลอกแพ็คเกจการบำรุงรักษาเซิร์ฟเวอร์ SQL จากต้นทางไปยังเป้าหมาย - แม้ว่าจะไม่ใช่แหล่งที่มาหรือเป้าหมายของแพ็คเกจดังที่แสดงใน ตัวอย่างก

ตัวอย่าง A: Run DTUTIL ใน SQL Server MySSISServerAเพื่อคัดลอกแพคเกจบำรุงรักษา SQL จากMySourceServerBเพื่อMyDestServerC

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

ด้วยข้อแม้ที่ANY= รุ่นเดียวกันมิฉะนั้น DTUTIL จะอัปเกรดแผนเป็น vCurrent
billinkc

จุดที่ดี! แต่การอัพเกรดจะมีประโยชน์ - สำหรับสิ่งที่เราทำอยู่แล้ว สิ่งที่ฉันชอบทำคือสร้างแผนใน SQL 2008 และคัดลอก / อัปเกรดแผนเหล่านั้นเป็น SQL 2008, 2008 R2, 2012,2014, 2016
Sting

0

มองไปที่:

วิธีการโอน (คัดลอก) แผนการบำรุงรักษาจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น โดย Sreekanth Bandarla

ในการถอดความและสรุป:

  1. ใน SSMS แทนที่จะเชื่อมต่อกับ "Database Engine ... " เชื่อมต่อกับ "Integration Services ... " สำหรับชื่อเซิร์ฟเวอร์เดียวกัน

  2. นำทางไปยัง 'แพ็คเกจที่จัดเก็บ / MSDB / แผนการบำรุงรักษา'

  3. มีแผนการบำรุงรักษาทั้งหมดของคุณ คลิกขวาที่พวกเขาเพื่อส่งออก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.