/ / Batch Script เพื่อให้การบำรุงรักษาฐานข้อมูลเซิร์ฟเวอร์ SQL ง่าย

Batch Script เพื่อให้การบำรุงรักษาฐานข้อมูลเซิร์ฟเวอร์ SQL ง่าย

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

การย่อ / ย่อฐานข้อมูล [/ Compact]

มีหลายปัจจัยที่สนับสนุนพื้นที่ดิสก์จริงที่ฐานข้อมูล SQL Server ใช้ เพียงเพื่อชื่อไม่กี่:

  • เมื่อเวลาผ่านไปเมื่อมีการเพิ่มบันทึกลบและอัปเดต, SQL นั้นมีการเติบโตและลดขนาดตารางอย่างต่อเนื่องเช่นเดียวกับการสร้างโครงสร้างข้อมูลชั่วคราวเพื่อดำเนินการจัดการแบบสอบถาม เพื่อรองรับความต้องการพื้นที่เก็บดิสก์ SQL Server จะเพิ่มขนาดของฐานข้อมูล (ปกติ 10%) ตามต้องการเพื่อให้ขนาดไฟล์ฐานข้อมูลไม่เปลี่ยนแปลงตลอดเวลา แม้ว่าจะเหมาะสำหรับประสิทธิภาพ แต่ก็อาจทำให้เกิดการตัดการเชื่อมต่อกับพื้นที่เก็บข้อมูลที่ใช้เพราะถ้าเช่นคุณเพิ่มระเบียนจำนวนมากซึ่งทำให้ฐานข้อมูลเติบโตและลบระเบียนเหล่านี้ในภายหลัง SQL Server จะไม่เรียกคืนโดยอัตโนมัติ พื้นที่ดิสก์
  • หากคุณใช้โหมดการกู้คืนเต็มรูปแบบในฐานข้อมูลของคุณไฟล์บันทึกการทำธุรกรรม (LDF) สามารถเติบโตได้ค่อนข้างใหญ่โดยเฉพาะอย่างยิ่งในฐานข้อมูลที่มีการอัปเดตจำนวนมาก

การย่อ (หรือย่อขนาด) ฐานข้อมูลจะเรียกคืนพื้นที่ดิสก์ที่ไม่ได้ใช้ สำหรับฐานข้อมูลขนาดเล็ก (200 MB หรือน้อยกว่า) สิ่งนี้มักจะไม่มากนัก แต่สำหรับฐานข้อมูลขนาดใหญ่ (1 GB ขึ้นไป) พื้นที่ที่เรียกคืนอาจมีความสำคัญ

ทำดัชนีฐานข้อมูลใหม่ [/ สร้างดัชนีใหม่]

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

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

การยืนยันความถูกต้อง [/ ตรวจสอบ]

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

เมื่อกระบวนการตรวจสอบดำเนินการผ่านสคริปต์ของเราจะรายงานข้อผิดพลาดเท่านั้นดังนั้นจึงไม่มีข่าวที่เป็นข่าวดี

การใช้งานสคริปต์

สคริปต์ชุดงาน SQLMaint เข้ากันได้กับ SQL2005 และสูงกว่าและต้องทำงานบนเครื่องที่มีเครื่องมือ SQLCMD ติดตั้ง (ติดตั้งเป็นส่วนหนึ่งของการติดตั้ง SQL Server) ขอแนะนำให้คุณวางสคริปต์นี้ลงในตำแหน่งที่ตั้งไว้ในตัวแปร Windows PATH ของคุณ (เช่น C: Windows) เพื่อให้สามารถเรียกได้อย่างง่ายดายเหมือนกับแอปพลิเคชันอื่น ๆ จากบรรทัดคำสั่ง

หากต้องการดูข้อมูลช่วยเหลือเพียงป้อน:

SQLMaint /?

ภาพ

ตัวอย่าง

เมื่อต้องการเรียกใช้การกระชับข้อมูลแล้วตรวจสอบในฐานข้อมูล“ MyDB” โดยใช้การเชื่อมต่อที่เชื่อถือได้:

SQLMaint MyDB / Compact / Verify

เมื่อต้องการเรียกใช้การทำดัชนีใหม่แล้วกระชับข้อมูลบน“ MyDB” บนอินสแตนซ์ที่มีชื่อ“ พิเศษ” โดยใช้ผู้ใช้“ sa” ด้วยรหัสผ่าน“ 123456”:

SQLMaint MyDB /S:.Special / U: sa / P: 123456 / Reindex / Compact

ใช้จากข้างในของสคริปต์ชุด

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

ตัวอย่างเช่นสคริปต์นี้รันงานบำรุงรักษาทั้งหมดในทุกฐานข้อมูลที่ไม่ใช่ระบบในการติดตั้ง SQL Server เริ่มต้นโดยใช้การตรวจสอบความน่าเชื่อถือ:

@ECHO OFF
SETLOCAL EnableExtensions
SET DBList =”% TEMP% DBList.txt”
SqlCmd -E -h-1 -w 300 -Q“ ตั้ง NoCount ON; เลือกชื่อจาก master.dbo.sys ฐานข้อมูลที่ชื่อไม่ได้อยู่ใน ('ต้นแบบ', 'แบบจำลอง', 'msdb' ',' tempdb ’) ">% DBList%
FOR / F“ usebackq tokens = 1” %% i IN (% DBList%) ทำ (
CALL SQLMaint“ %% i” / Compact / Reindex / Verify
ECHO +++++++++++
)
หากมีอยู่% DBList% DEL / F / Q% DBList%
ENDLOCAL

ดาวน์โหลดสคริปต์ SQLMaint Batch จาก SysadminGeek.com