ฉันใช้ SQL Server Agent เพื่อกำหนดเวลาแม้แต่งานที่ไม่ใช่ฐานข้อมูล - นี่เป็นความคิดที่ไม่ดีใช่ไหม


13

เนื่องจากฉันเป็น DBA (และในหลาย ๆ กรณีระบบปฏิบัติการจริง) ดังนั้น SQL Server จึงได้รับการติดตั้งบนเซิร์ฟเวอร์ทุกเครื่องที่ฉันต้องทำงานเป็นประจำ ฉันเพิ่งรู้ว่าฉันใช้ SQL Agent เป็นตัวกำหนดเวลางานในเกือบทุกกรณีแทนที่จะเป็น Windows Task Scheduler

จากมุมมองของฉันตัวแทน SQL มีข้อได้เปรียบเหนือ Windows Task Scheduler หลายประการ:

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

อย่างไรก็ตามฉันไม่สามารถหลบหนีจากความรู้สึกที่ว่านี่เป็นแนวปฏิบัติที่ไม่ดี - SQL Agent ควรสำรองไว้สำหรับงานที่เกี่ยวข้องกับฐานข้อมูลเท่านั้นและฉันควรปล่อยให้ระบบปฏิบัติการระดับทำงานใน Windows Task Scheduler แม้ว่าฉันจะไม่ชอบการใช้งานก็ตาม

มันจะโอเคที่จะใช้เอเจนต์ SQL ด้วยวิธีนี้หรือไม่? ถ้าไม่ฉันควรพิจารณาตัวจัดกำหนดการงาน Windows ของ บริษัท อื่นเพื่อรับฟังก์ชั่นบางอย่างที่ฉันกำลังมองหาอยู่หรือไม่?


หากนี่เป็นของ SF แทนที่จะเป็นที่นี่โปรดแจ้งให้ฉันทราบและฉันจะย้ายไปที่นั่น แต่ฉันคิดว่าเป็นของที่นี่เนื่องจากฉันใช้เครื่องมือฐานข้อมูลและฉันสนใจที่จะดูว่าผู้ดูแลระบบ DBA / SA อื่นกำลังทำอะไรอยู่ สิ่งเดียวกัน.
SqlRyan

คำตอบ:


7

โดยส่วนตัวฉันคิดว่าข้อแม้ที่ใหญ่ที่สุดจะเป็นปัญหาในการจัดรายการงาน เท่าที่ฉันทราบคุณไม่สามารถสร้างโฟลเดอร์เพื่อจัดระเบียบงานดังนั้นจำนวนมากจะยุ่งยาก แม้ว่าฉันจะไม่แน่ใจ 100% เนื่องจากเซิร์ฟเวอร์ของฉันไม่มีงานมากกว่าโหล Server 2008 และ Task Scheduler ของใหม่ช่วยให้องค์กรง่ายขึ้น IMO และโดยทั่วไปมีการทำงานที่ดีกว่ารุ่นก่อนหน้ามาก ฉันแน่ใจว่าแอปของบุคคลที่สามทำงานได้ดียิ่งขึ้น ฉันจะร้องไห้ถ้าผมต้องใช้ Server 2003 at.exeของกำหนดการงานหรือ

ข้อแม้ที่สองที่ฉันคิดว่าน่าจะทำให้โหลดเซิร์ฟเวอร์ SQL มากเกินไป Agent เป็นโปรแกรมขนาดเล็ก แต่การทำงานที่ยาวหรือซับซ้อนอาจใช้ทรัพยากรจำนวนมากได้อย่างง่ายดาย ทรัพยากรเหล่านั้นจะไม่พร้อมใช้งานสำหรับโปรแกรม SQL เนื่องจากโปรแกรม SQL นั้นได้รับการโปรแกรมให้ใช้หน่วยความจำระบบประมาณ 80% จึงอาจมีปัญหา

ประการที่สามการสำรองข้อมูลอาจเป็นปัญหา คุณไม่เพียง แต่ต้องสำรองข้อมูลระบบไฟล์ แต่ยังต้องใช้ฐานข้อมูล msdb เพื่อให้สามารถกู้คืนงานได้ (หรือใช้บางสิ่งเพื่อสคริปต์งานไปยังไฟล์ข้อความ) เพิ่มความซับซ้อนให้กับการกู้คืนความเสียหาย

ในที่สุดคุณจะไม่ต้องการอยู่ในตำแหน่งที่คุณจ่ายค่าลิขสิทธิ์ SQL Server เพียงเพื่อเรียกใช้ SQL Server Agent หากฐานข้อมูลเลิกใช้งานแล้วคุณจะต้องพัฒนาแผนสำหรับการย้ายข้อมูลออกจาก SQL Server Agent


จุดแข็งทั้งหมด - ขอบคุณสำหรับ caveats ฉันจะกังวลเกี่ยวกับหมายเลข 3 ยกเว้นฉันไม่แน่ใจว่าคุณสำรองข้อมูลรายการงานที่กำหนดเวลาไว้จากตัวจัดกำหนดการหน้าต่างดั้งเดิมได้อย่างไร (ในขณะนี้) เตรียมที่จะสูญเสียรายการนั้นอย่างสมบูรณ์แม้ว่า ฉันแน่ใจว่ามีวิธีเก็บสำเนา องค์กรอาจเป็นปัญหาที่ใหญ่ที่สุด - ไม่มีเซิร์ฟเวอร์ของฉันอยู่ที่จุดนั้น แต่ฉันสามารถเห็นพวกเขาไปถึงที่นั่นได้หากฉันไม่มีระบบที่ดี
SqlRyan

9

ที่งานก่อนหน้าของฉันฉันทำอย่างนี้ส่วนใหญ่เป็นเพราะงานทั้งหมดทำงานจากกลุ่มหลักกลางของเราซึ่งเป็นเซิร์ฟเวอร์ที่มองเห็นได้มากที่สุด ฉันสามารถดูงานที่กำหนดเวลาทั้งหมดของเราได้ในที่เดียวแทนที่จะต้องไปตรวจสอบข้อมูลบรรทัดคำสั่งบนเซิร์ฟเวอร์จำนวนมาก

แม้ว่ามันจะเป็นเรื่องส่วนตัว (และมันก็ยากที่จะหาคำตอบที่ "ถูกต้อง" ในรูปแบบนี้) แต่ฉันไม่คิดว่าจะมีอะไรผิดปกติกับวิธีการอื่นนอกเหนือจากนี้กลายเป็นจุดล้มเหลวเพียงจุดเดียว

อาจไม่เกี่ยวข้องถ้างานทั้งหมดโต้ตอบหรือขึ้นอยู่กับเซิร์ฟเวอร์ฐานข้อมูลและบริการ SQL Server ทำงานอยู่ (ในกรณีของเรา)

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


ฉันขอขอบคุณข้อเสนอแนะ - ฉันคิดว่าคำถามเป็นเรื่องที่ค่อนข้างเป็นส่วนตัวเนื่องจากวิธีใดวิธีหนึ่งทำงานได้สำเร็จ - แต่ฉันกำลังมองหาการตรวจสอบบางอย่างที่ "ใช่งาน Windows ปล่อยให้เป็นที่ต้องการมาก" หรือ "ไม่ ความคิดนี่คือเหตุผล ... "เราจะเห็นว่ามีฟองอากาศเกิดขึ้น!
SqlRyan

ฉันแน่ใจว่าคนจะแมงดางาน PowerShell ก่อนที่คุณจะหายใจมากเกินไป โดยส่วนตัวฉันพบว่างานเหล่านั้นและ Windows น่าเบื่อหน่ายเล็กน้อยในการจัดการ แต่ระยะจะแตกต่างกันไป
Aaron Bertrand

0

ฉันจะ ~ ใช้ SQL Agent แทน Windows Task Manager ... อย่างชัดเจนสำหรับงานที่เกี่ยวข้องกับฐานข้อมูล

หากคุณสามารถเขียนโค้ดได้เลยหรือมีคนที่สามารถเขียนโค้ดได้คุณสามารถทำได้ง่ายๆด้วยคอนโซลแอพและห่อให้เป็นผู้สร้างบริการอย่าง TopShelf (http://topshelf-project.com/) นี่อาจเป็นสิ่งที่ถูก / แฮ็คที่ใช้งานง่ายเพื่อรับ decoupling เล็ก ๆ น้อย ๆ จาก SQL Agent สำหรับทุกสิ่งและเริ่มที่จะให้เลเยอร์สำหรับการเข้าคิวหากคุณอยู่ในจุดนั้น

โดยส่วนตัวคุณดูเหมือนจะใส่ใจมากพอเกี่ยวกับเรื่องนี้รวมถึงการรู้จัก gotchas ของคุณมากพอที่ฉันคิดว่าคุณสบายดี เป็นคนที่ไม่สนใจ / รู้ว่าฉันกังวลจริงๆ ฉันไม่สงสัยเลยว่าคุณจะประเมินโซลูชันของคุณในช่วงเวลาที่เหมาะสมและดำเนินการตามนั้น


-1

อีกทางเลือกหนึ่งคือการสร้างตารางสำหรับงานที่กำหนดเวลาไว้ด้วยขั้นตอนการจัดเก็บเพื่ออัปเดตตารางคิวข้อความจากมัน ตัวแทน บริษัท เซิร์ฟเวอร์ SQL จะเรียกกระบวนงานที่เก็บไว้ทุก ๆ ครั้งเพื่อสร้างข้อความและปรับปรุงสถานะของงาน ระบบอื่น ๆ จะสืบค้นตารางคิวข้อความผ่านการเชื่อมต่อ SQL หรือเลเยอร์เว็บ API เป็น JSON

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