ขั้นตอนใดที่จำเป็นในการรีสตาร์ทเครื่องที่โฮสต์ Microsoft SQL Server อย่างปลอดภัย


23

มีขั้นตอนพิเศษที่จำเป็นเพื่อป้องกันความเสียหายของข้อมูลเมื่อรีสตาร์ทเซิร์ฟเวอร์ที่โฮสต์อินสแตนซ์ MS SQL Server หรือไม่

ตัวอย่างเช่นฉันเพิ่งพบข้อเสนอแนะของการหยุดบริการ SQL ด้วยตนเอง ความเข้าใจของฉันอยู่ที่นี้จะถูกจัดการโดยใช้ Windows shutdownกระบวนการ

ฉันแน่ใจว่ามีขั้นตอน zillion ซึ่งแต่ละคนอาจแนะนำเหมือนที่ผมกล่าวถึงเพียง แต่ฉันต้องการที่จะหลีกเลี่ยงการทำซ้ำการปฏิบัติที่ล้าสมัยหรือเชื่อโชคลาง มีคำแนะนำจาก Microsoft หรือมาตรฐานอุตสาหกรรมที่แพร่หลายหรือไม่


คำถามนี้เกี่ยวข้องกับขั้นตอนระยะสั้นในการรีบูตเครื่อง มีคำถามอีกข้อหนึ่งเกี่ยวกับขั้นตอนระยะยาวในการรับรองว่าเครื่องไม่ได้ใช้งานก่อนที่จะนำไปทิ้งอย่างถาวร


ฉันไม่สามารถหาคำตอบได้ว่า "มาตรฐานอุตสาหกรรมที่แพร่หลาย" และไม่ต้องการ "ขั้นตอน zillion ที่คนแต่ละคนอาจแนะนำ" นั่นคือเหตุผลที่บัญชีของพวกเขาเกี่ยวกับมาตรฐานอุตสาหกรรม ทั้งสองดูเหมือนคำถามที่ถูกต้อง แต่แหล่งที่เชื่อถือได้จะเป็นลิงค์ไปยังบทความของ Microsoft
Evan Carroll

คำตอบ:


14

คุณไม่จำเป็นต้องกังวลหรือกลัวเมื่อคุณรีสตาร์ทเซิร์ฟเวอร์ sql

เพียงตรวจสอบให้แน่ใจว่าคุณไม่มีธุรกรรมที่ใช้เวลานาน ที่ดีที่สุดคือการรีสตาร์ทเซิร์ฟเวอร์ sql โดยใช้คำสั่งคอนโซลหรือปิดระบบในช่วงเวลากิจกรรมต่ำ / ต่ำสุดหรือที่เรียกว่าหน้าต่างการบำรุงรักษาเพื่อลดผลกระทบต่อธุรกิจของคุณ

หากคุณมีการตั้งค่า DR ใด ๆ และคุณไม่ต้องการให้หยุดทำงานสิ่งที่ดีที่สุดคือการ failover จากนั้นรีสตาร์ทโหนดแฝงหรือรอง

ล้างการปิดระบบ SQL Server เกิดขึ้นในสถานการณ์ด้านล่าง:

  • หยุดเซิร์ฟเวอร์ sql โดยใช้คอนโซลบริการ
  • ปิดเซิร์ฟเวอร์ของคุณ
  • กำลังรันคำสั่ง SHUTDOWN ใน SSMS

ในทุกสถานการณ์เซิร์ฟเวอร์ sql ปิดฐานข้อมูลทั้งหมดอย่างเรียบร้อยแล้วยกเลิกบริการที่เกี่ยวข้องกับการยอมรับหรือย้อนกลับธุรกรรมทั้งหมดเขียนหน้าสกปรกทั้งหมดลงบนดิสก์แล้วเขียนรายการลงในบันทึกการทำธุรกรรม

การปิดระบบที่ไม่เหมาะสมของเซิร์ฟเวอร์ sql:

  • ปิดด้วย nowait
  • ดึงสายไฟจากเซิร์ฟเวอร์ของคุณ (หากคุณมีสิทธิ์เข้าถึง)
  • ฆ่าsqlserver.exeจากตัวจัดการงาน
  • ความล้มเหลวของไดรฟ์ที่ไบนารีของเซิร์ฟเวอร์ sql, exe, ฐานข้อมูลระบบอยู่หรือความล้มเหลวของไดรฟ์ระบบ windows .. โดยปกติจะเป็นไดรฟ์ C: \
  • ความร้อนสูงเกินไปของเซิร์ฟเวอร์ทำให้เกิดการปิด (ไม่ค่อยจะเกิดขึ้น !!)

SQL Server จะพยายามปิดระบบใหม่ทั้งหมด ... เว้นแต่คุณจะทำสิ่งที่ไม่เหมาะสมตามที่ระบุไว้ข้างต้น

ลิงก์การอ่านที่ดีมาก ๆ เกี่ยวกับสิ่งที่เกิดขึ้นเบื้องหลังในระหว่างขั้นตอนการกู้คืน


รายละเอียดยอดเยี่ยมขอบคุณ "การตั้งค่า DR" หมายถึงอะไร
จอนแห่งการค้าทั้งหมด

@JonofAllTrades Disaster Recovery .. เช่นการจัดส่งบันทึกการทำมิเรอร์ฐานข้อมูลหรือคุณสามารถนึกถึงความพร้อมใช้งานสูงเช่นการทำคลัสเตอร์
Kin Shah

1
ในขณะที่ฉันเห็นด้วยกับรายการสถานการณ์การปิดที่ 'ไม่เหมาะสม' ทั้งหมดความเสียหายของข้อมูลก็ไม่ควรเกิดขึ้นอีกต่อไปขอบคุณการบันทึกการอ่านล่วงหน้า
John Alan

5

นี่คือรายละเอียดทั้งหมดในหน้านี้อย่างละเอียด

การที่คำถามของคุณถามโดยเฉพาะ"มีคำแนะนำใด ๆ จาก Microsoft " ฉันอยากจะคิดว่านี่เป็นการต่อต้านเพื่อให้มีการสนทนาที่นี่ บทความรายละเอียดกระบวนการผ่าน

  • ใช้อย่างใดอย่างหนึ่ง
    • บรรทัดคำสั่ง
    • Powershell,
    • SQL Server Management Studio (GUI)
  • สำหรับปี 2551, 2555, 2557, 2559
  • สำหรับทั้ง
    • โปรแกรมฐานข้อมูล
    • หรือตัวแทน

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

หยุดบริการก่อนปิดเครื่อง

จำเป็นหรือแนะนำให้ทำก่อนปิดเซิร์ฟเวอร์ที่เกิดขึ้นเพื่อเรียกใช้บริการ SQL

ไม่ไม่จำเป็น เมื่อเคอร์เนลของ Windows ส่งสัญญาณไปที่การปิดไปยัง SQL Server มันจะทำเช่นนั้นในลักษณะที่ปลอดภัยและระบบจะรอให้มันเสร็จสมบูรณ์ โดยทั่วไปแล้วสิ่งที่สร้างขึ้นด้วยความสามารถในการปิดระบบอย่างปลอดภัยไม่จำเป็นต้องปิดระบบด้วยตนเองและเป็นเหตุให้แอปพลิเคชันทั้งหมดของ Microsoft ปฏิบัติตามAPI และโพรซีเดอร์ของตนเองที่ผูกเข้ากับPRESHUTDOWNหรือSHUTDOWNเฟส จากเอกสารPRESHUTDOWNที่ฉันถือว่าพวกเขากำลังใช้อยู่

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

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

ตามที่จำเป็นฉันคิดว่านั่นเป็นวิธีที่ SQL Server ทำงาน


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

@JonofAllTrades อัพเดทอีกครั้ง
Evan Carroll

3

ไม่ว่าจะเป็นการปิดระบบและป้องกันความเสียหายของฐานข้อมูล MS SQL Server เป็นผลิตภัณฑ์ที่สมบูรณ์มากและโอกาสในการก่อให้เกิดปัญหาการทุจริตโดย 'ปิด' อย่างง่ายจะเป็นสถานการณ์ที่ขอบ คุณมีโอกาสมากขึ้นที่จะทำให้เกิดความเสียหายโดยไม่เรียกใช้ CHECK DB หรือตั้งค่าการตรวจสอบความถูกต้องในฐานข้อมูลของคุณ

บางทีการมีเครื่องมือภายนอกที่สัมผัสไฟล์ MDF / NDF / LDF โดยตรงอาจทำให้เกิดปัญหาเช่นการพยายาม 'ย้าย' ไฟล์ระหว่างปิดเครื่องหรือมีซอฟต์แวร์บางตัวพยายามล็อคไฟล์ระหว่างปิดเครื่อง ฉันเห็น Windows Clustering เกิดข้อผิดพลาดเมื่อไฟล์โฮสต์ดิสก์ DB เต็ม แต่ไม่ได้ทำให้ 'db db' เสียหายโดยเฉพาะ

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

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


-1

วิธีที่ฉันทำ: 1) ปิดการใช้งานทั้งหมด 2) ตรวจสอบให้แน่ใจว่าไม่มีงานใดที่กำลังดำเนินการอยู่ 3) เรียกใช้ SP_Who3 บ่อยครั้งเพื่อตรวจสอบกิจกรรมและเรียกใช้ sp_whoisactive สำหรับข้อมูลเพิ่มเติม 4) หากไม่มีกิจกรรมและสิ่งเดียวที่คุณเห็นคือแบบสอบถาม sp_who3 ปัจจุบันของคุณ 5) ทำ DBs ออฟไลน์ 6) คลิกขวาที่ด้านบนของฐานข้อมูลแล้วคลิก Stop 7) ตรวจสอบว่าบริการอยู่ในสถานะหยุดทำงานใน services.msc 8 หรือไม่ เสร็จสิ้น

PS หากคุณมี PAGEIOLATCH / IOCOMPLETION หรือกิจกรรมอื่น ๆ ใน SP_Who3 อย่าดำเนินการดังกล่าวข้างต้นเนื่องจากอาจทำให้ฐานข้อมูลของคุณอยู่ในโหมดการกู้คืน


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

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