SQL Server: Backup/Restore Story (1)
บทความนี้จะเขียนถึงวิธีการสำรองข้อมูล(Backup)และการฟื้นฟู(Restore) สำหรับ SQL server โดยเป็นการรวบรวมเนื้อหาเพื่อสรุปความเข้าใจของผู้เขียนเอง ซึ่ง SQL Server: Backup/Restore Story (1) นี้ จะประกอบไปด้วยเนื้อหาของ RPO,RTO / backup type / LSN / How to backup และการ Copy-only backup
What is RPO/RTO?
หากคุณเป็นเจ้าของธุรกิจสักกิจการ การมีฐานข้อมูลของตัวเองก็เป็นเรื่องจำเป็นไม่น้อย แล้วเมื่อมีฐานข้อมูลแล้ว เราควรมีการป้องกันหรือแก้ไขอย่างไรในการดูแลจัดการข้อมูลนั้น คำตอบก็คือการวางแผนสำรองข้อมูลที่ดีนั้นเอง
‘รู้ว่าเสียหายได้เท่าไหร่ และ ใช้เวลาเท่าไหร่ในการนำคืนกลับมา’
พื้นฐานของการวางแผนสำรองข้อมูลที่ดีคือการรู้จัก RPO และ RTO ซึ่งสองตัวย่อนี้มาจากคำว่า
RPO (Recovery Point Objective)
หมายถึงปริมาณข้อมูล ณ จุด(Point)ไหน ที่คุณยอมให้มันสูญหายไปได้ ก่อนที่จะเกิดวิกฤติที่ไม่ได้คาดคิดขึ้น ถ้าเป็นฐานข้อมูลที่คนใช้งานน้อยมาก มีการเปลี่ยนแปลงน้อย หากข้อมูลหายไปวันนึงอาจจะไม่ใช่ปัญหา แต่ในทางกลับกันหากเป็นฐานข้อมูลของธนาคาร การเปลี่ยนแปลงและการไหลผ่านของข้อมูลต้องสำคัญในระดับวินาที
RTO (Recovery Time Objective)
หมายถึงระยะเวลา(Time)ในการนำข้อมูลกลับมาให้ใช้งานได้เร็วสุดเท่าไหร่ หลังจากเกิดวิกฤติที่ไม่ได้คาดคิดขึ้น หากฐานข้อมูลนั้นมีขนาดใหญ่ การฟื้นฟูข้อมูลให้กลับมาใช้งานได้อีกครั้งอาจจะใช้เวลายาวนานเป็นวัน
เมื่อเราทราบแล้วว่า RPO และ RTO ของฐานข้อมูลดังกล่าวเป็นอย่างไร ก็จะนำมาสู่การวางแผนสำรองข้อมูลที่เหมาะสมได้
Backup Type
ในส่วนของการสำรองข้อมูลระดับ database มีประเภทของการสำรองข้อมูล(backup type) ทั้งหมด 3 แบบ ได้แก่
Full Backups
คือการสำรองข้อมูลทั้งก้อนในฐานข้อมูลนั้นๆ
ข้อดี: เก็บข้อมูลทั้งหมด
จุดที่ควรระวัง: ฐานข้อมูลมีขนาดใหญ่ กินพื้นที่ ส่งผลต่อระบบในช่วงที่ดำเนินการสำรองข้อมูล
Differential Backups
คือ การสำรองข้อมูลที่เก็บค่าความเปลี่ยนแปลงที่เกิดขึ้นในฐานข้อมูลนั้นๆ โดยเป็นความเปลี่ยนแปลงที่เกิดขึ้นหลังจากการสำรองข้อมูลแบบ Full Backups ล่าสุด
ข้อดี: เก็บค่าความเปลี่ยนแปลงอย่างเดียว ทำให้สะดวกทั้งตอนสำรองข้อมูลและฟื้นฟูข้อมูล
จุดที่ควรระวัง: หากเบสมีขนาดเล็ก หรือมีการเปลี่ยนแปลงข้อมูลที่น้อย การสำรองข้อมูลประเภทนี้อาจจะไม่จำเป็น
Transaction Log Backups
คือ การเก็บ log ที่เกิดขึ้น ถัดจากการ full หรือ differential backup ล่าสุด สามารถ backup transaction log ต่อเนื่องกันได้
ข้อดี: ไฟล์มีขนาดเล็ก backup ไว ไม่ส่งผลกระทบต่อระบบ
จุดที่ควรระวัง: หากมี log หลายตัวอาจจะส่งผลให้เวลา restore ใช้ระยะเวลาที่มากขึ้น
เพื่อให้เห็นภาพมากขึ้น ผู้เขียนขอแสดงตัวอย่างโดยใช้ database แบบ full recovery model เพื่อเทียบความแตกต่างโดยใช้ LSN เป็นตัวอธิบาย
What is LSN?
เลข LSN หรือ log sequence number เป็นชุดตัวเลขที่ปรากฎเมื่อ trasaction log ถูกเขียนขึ้น ซึ่ง LSN จะถูกเขียนเมื่อมีการ Backup ข้อมูลและถูกระบบนำไปใช้อ้างอิงเวลาที่ Restore ข้อมูล
โดยผู้เขียนได้ทำการ backup ดังต่อไปนี้
Full → Differential → Log →Log
Full → Differential → Log →Log
ผู้เขียนได้ query ข้อมูลตาม command ดังนี้
SELECT
first_lsn,last_lsn,
checkpoint_lsn,
database_backup_lsn,differential_base_lsn
FROM msdb..backupset WHERE name = ‘DatabaseName’
โดย databasename แทนชื่อของ database
แต่ละแถวของรูป ความหมายของแต่ละแถวมีดังต่อไปนี้
First_lsn = ลำดับของเลข LSN ที่ถูกเขียนลำดับแรก
Last _lsn = ลำดับของเลข LSN ที่ถูกเขียนลำดับสุดท้าย
Checkpoint_lsn = จุด checkpoint สุดท้าย
Database_backup_lsn = ลำดับของเลข LSN ของ Full backup ครั้งล่าสุด
Differential_base_lsn = จุด Differential base
How to Backup
การ backup สามารถทำได้ 2 แบบ คือการใช้ SQL command ในการ query และการใช้ GUI ของ SSMS (SQL SERVER Management Studio)
Minimal Permission ของการ backup
Server level — PUBLIC ROLE
Database level — DB_BACKUPOPERATOR
Prerequisite
SQL Server /SSMS (SQL SERVER Management Studio)/free space/database ที่ใช้ในการ backup
แบบที่ 1: SQL command
Full Backups
BACKUP DATABASE databasename TO DISK = 'full.bak'
Differential Backups
BACKUP DATABASE databasename TO DISK = 'diff.bak' WITH DIFFERENTIAL
Transaction Log Backups
BACKUP LOG databasename TO DISK = 'log.bak'
แบบที่ 2: GUI ของ SSMS (SQL SERVER Management Studio)
- เลือกที่ database ที่ต้องการ > เลือก task > เลือก backup
2. เลือก Backup type ที่ต้องการ > เลือก OK
3. หน้าต่างแสดงว่าการ Backup สำเร็จ
4.ไฟล์ที่ backup จะถูกเก็บไว้ใน path ที่ระบุไว้
Copy-only backup
จากเลข LSN ที่เรากล่าวถึงไปก่อนหน้า และการ backup ข้อมูล ผู้เขียนจะขออธิบายการ backup แบบที่ไม่ข้องเกี่ยวลำดับในการ Backups นั่นคือ Copy only backup
ถ้าเรา Run Script เราจะได้ Command ดังต่อไปนี้
Copy-only backup คือ การ backup database โดยไม่ให้ไปขัดกับลำดับเดิมของการ backup จากช่วงที่แล้วที่เรากล่าวถึงเลข LSN ที่ถูกเขียนตามลำดับจาก Full Differential Log ต่อเนื่องกัน เลข LSN ของ Copy-only จะมีความแตกต่างและไม่สอดคล้องจากลำดับดังกล่าว โดย Copy-only backup แบบ Full สามารถทำได้ในทุก reovery model ส่วน Copy-only backup แบบ log สามารถทำได้ใน recovery model แบบ Full และ Bulk-logged สำหรับประเภทของ recovery model นั้น ผู้เขียนจะอธิบายในบทความถัดไป
เพื่อให้เห็นภาพมากขึ้นผู้เขียนขอยกตัวอย่างการ back up ระหว่าง Full backup และ Differential backup เพื่อให้ผู้อ่านได้เห็นภาพสำหรับความแตกต่างของ Full backup กับ Full Copy-only backup
ผู้เขียนได้ทำการ backup แบบ Full → Differential → Full → Differential → Full ตามลำดับ แล้วทำการรัน query เพื่อนำเลข LSN มายกตัวอย่างตามภาพ
สังเกตได้ว่าลำดับของเลข LSN มีความเกี่ยวเนื่องกัน เมื่อนำมาจำลองเป็นแผนภาพ
กับการ Backup Full → Differential → Full(Copy-only) → Differential → Full
สังเกตได้ว่าเลข LSN ของ Full Copy-only ไม่มีความเกี่ยวเนื่องกับการ Backup Differential ครั้งถัดไป
ลำดับในการเก็บข้อมูลในการทำ Backup แบบ
Full → Differential → Full(Copy-only) → Differential → Full
จะเหมือนกับการ Backup แบบ
Full → Differential → Differential → Full
สำหรับบทความนี้เราได้รู้จักการวางแผนสำรองข้อมูล ประเภทของการสำรองข้อมูล และวิธีสำรองข้อมูลกันไปแล้ว ผู้เขียนหวังว่าบทความนี้จะทำให้ผู้อ่านเข้าใจถึงการสำรองข้อมูลและความสำคัญในการวางแผนสำรองข้อมูลมากยิ่งขึ้น สำหรับใครที่มีข้อข้องใจหรือสงสัย อยากสนทนาแลกเปลี่ยนความคิดเห็น สามารถตอบกลับได้ที่บทความนี้ ไว้พบกันใหม่บทความถัดไป
Reference
rpo rto
https://www.atlantic.net/hipaa-disaster-recovery/rto-vs-rpo/
backup type
lsn
copy only