High Availability (HA) คือโซลูชัน/กระบวนการ/เทคโนโลยีที่รับประกันว่าแอปพลิเคชัน/ฐานข้อมูลเข้าถึงได้ 24/7 ในทุกสถานการณ์ ไม่ว่าจะเป็นแบบวางแผนไว้หรือไม่คาดคิด
พื้นฐานแล้วมี 5 ตัวเลือกในการตั้งค่าความพร้อมใช้งานฐานข้อมูลใน MS SQL Server:
- Replication
- Log Shipping
- Mirroring
- Clustering
- AlwaysON Availability Groups
Replication
ข้อมูลต้นฉบับจะถูกคัดลอกไปยังปลายทางผ่านงาน replication (agent/job) ใช้เทคโนโลยีระดับ object คำศัพท์ที่ต้องรู้:
- Publisher (ผู้เผยแพร่) คือเซิร์ฟเวอร์ต้นทาง
- Distributor (ผู้แจกจ่าย) เป็นตัวเลือก จัดเก็บข้อมูลที่คัดลอกไปยัง Subscriber (ผู้สมัครรับ)
- Subscriber คือเซิร์ฟเวอร์ปลายทาง
Log Shipping
ข้อมูลต้นทางถูกคัดลอกไปยังปลายทางผ่านงาน backup Transaction Log ใช้เทคโนโลยีระดับฐานข้อมูล คำศัพท์:
- Primary Server (เซิร์ฟเวอร์หลัก) คือเซิร์ฟเวอร์ต้นทาง
- Secondary Server (เซิร์ฟเวอร์รอง) คือเซิร์ฟเวอร์ปลายทาง
- Monitor Server (เซิร์ฟเวอร์ตรวจสอบ) เป็นตัวเลือก ตรวจสอบสถานะ Log Shipping
Mirroring
ข้อมูลหลักถูกคัดลอกไปยัง secondary ผ่านธุรกรรมเครือข่ายด้วยความช่วยเหลือของ endpoint และ port number ใช้เทคโนโลยีระดับฐานข้อมูล คำศัพท์:
- Principal Server (เซิร์ฟเวอร์หลัก) คือเซิร์ฟเวอร์ต้นทาง
- Mirror Server (เซิร์ฟเวอร์กระจก) คือเซิร์ฟเวอร์ปลายทาง
- Witness Server (เซิร์ฟเวอร์สाक्षี) เป็นตัวเลือก ใช้สำหรับโซลูชัน failover อัตโนมัติ
Clustering
ข้อมูลจัดเก็บในที่เก็บร่วม ใช้โดยทั้ง primary และ secondary servers ใช้เทคโนโลยีระดับ instance ต้องตั้งค่า Windows Clustering บน shared storage นี้ คำศัพท์:
- Active Node คือโหนดที่ SQL Services ทำงาน
- Passive Node คือโหนดที่ SQL Services ไม่ทำงาน
AlwaysON Availability Groups
ข้อมูลหลักจะถูกถ่ายโอนไปยัง secondary ผ่านธุรกรรม ใช้เทคโนโลยีระดับกลุ่มฐานข้อมูล ตั้งค่า Windows Clustering ไม่ต้องการ shared storage คำศัพท์:
- Primary Replica คือเซิร์ฟเวอร์ต้นทาง
- Secondary Replica คือเซิร์ฟเวอร์ปลายทาง
ขั้นตอนการตั้งค่า High Availability สำหรับ Mirroring และ Log Shipping
ด้านล่างคือขั้นตอนตั้งค่า HA (Mirroring และ Log Shipping) ยกเว้น Clustering, AlwaysON Availability Groups และ Replication
ขั้นตอนที่ 1
- รับ full backup และ T-log backup ของฐานข้อมูลต้นทางตัวอย่าง: เพื่อตั้งค่า Mirroring / Log Shipping สำหรับฐานข้อมูล TestDB บน TESTINSTANCE เป็น primary SQL Server และ DEVINSTANCE เป็น secondary ใช้คิวรี่ด้านล่างเพื่อ backup บนเซิร์ฟเวอร์ต้นทาง (TESTINSTANCE)
Backup database TestDB to disk = 'D:testdb_full.bak'
GO
Backup log TestDB to disk = 'D:testdb_log.trn'

คิวรี่ดึง backup
ขั้นตอนที่ 2
- คัดลอกไฟล์ backup ไปยังเซิร์ฟเวอร์ปลายทางในกรณีนี้เรามีเซิร์ฟเวอร์ทางกายภาพเดียวแต 2 instance จึงไม่ต้องคัดลอก แต่ถ้า 2 instance อยู่คนละเซิร์ฟเวอร์ ให้คัดลอกไฟล์ทั้ง 2 ไปยังที่ตั้งบน secondary server ที่ DEVINSTANCE ติดตั้ง

คัดลอกไฟล์ backup ไปยังเซิร์ฟเวอร์ปลายทาง
ขั้นตอนที่ 3
- กู้คืนฐานข้อมูลด้วยไฟล์ backup บนเซิร์ฟเวอร์ปลายทาง โดยเลือก NORECOVERYตัวอย่าง: เชื่อมต่อ SQL Server DEVINSTANCE เปิด New Query เขียนโค้ดด้านล่างเพื่อ restore ฐานข้อมูลชื่อ TestDB เหมือนต้นทาง สำหรับ Log Shipping อาจใช้ชื่อต่างได้ ใช้ตัวเลือก norecovery
Restore database TestDB from disk = 'D:TestDB_full.bak'
with move 'TestDB' to 'D:DATATestDB_DR.mdf',
move 'TestDB_log' to 'D:DATATestDB_log_DR.ldf',
norecovery
GO
Restore database TestDB from disk = 'D:TestDB_log.trn' with norecovery

กู้คืนฐานข้อมูลด้วยไฟล์ backup
Refresh โฟลเดอร์ฐานข้อมูลบน DEVINSTANCE จะเห็นฐานข้อมูล TestDB กู้คืนแล้วพร้อมสถานะ recovering

สถานะการกู้คืนฐานข้อมูล
ขั้นตอนที่ 4
- ตั้งค่า HA (Log Shipping / Mirroring) ตามด้านล่างตัวอย่าง: คลิกขวาที่ฐานข้อมูล TestDB บน TESTINSTANCE (primary) เลือก Properties

กำหนดค่า Log Shipping / Mirroring