SQL Server: Backup/Restore Story (1)

Pansupar Choosith
MFEC
Published in
4 min readMar 2, 2020

บทความนี้จะเขียนถึงวิธีการสำรองข้อมูล(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)

  1. เลือกที่ 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

https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/backup-overview-sql-server?view=sql-server-ver15

lsn

https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms190411(v=sql.105)?redirectedfrom=MSDN

copy only

https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/copy-only-backups-sql-server?view=sql-server-ver15

--

--