มาทดลอง Backup ฐานข้อมูลจาก Microsoft SQL Server ไปยัง Azure Storage กันเถอะ

Azure Storage มีจุดเด่นตรงที่เป็น Cloud Storage ที่ราคาประหยัดรองรับความจุขนาดใหญ่ถึงระบบ petabytes และมีความน่าเชื่อถือสูง โดยผู้อ่านสามารถติดตามได้จากลิ้งก์ https://azure.microsoft.com/en-us/services/storage
Azure Storage ยังเปิดโอกาสให้ผู้พัฒนาแอพพลิเคชั่นสามารถเพิ่มขยายขอบเขตของงานออกไปอย่างไม่จำกัด ไม่ว่าจะเป็นงานด้าน Big Data, งานด้านวิทยาศาสตร์, การวิเคราะห์ทางการเงิน หรืองานด้านสื่อมัลติมีเดียเป็นต้น และ Azure Storage ยังเป็นแหล่งจัดเก็บพื้นฐานแก่ Azure Virtual Machine อีกด้วย
Azure Storage สนับสนุน client ที่มาจากหลากหลายระบบปฏิบัติการ อาทิ Microsoft Windows หรือ Linux และจากหลากหลายภาษา Programming อาทิ .NET, Java, หรือ C++ และยังมีส่วนติดต่อ REST API ไว้ให้ซึ่งอนุญาตให้ Client ใดๆ สามารถส่งและรับข้อมูลผ่านโปรโตคอล HTTP/HTTPS ได้โดยง่าย
เรามาทดลองสร้าง Azure Storage Account กันดีกว่า ก่อนอื่นไปที่ https://manage.windowsazure.com เพื่อเข้าสู่หน้า Management Portal ของ Microsoft Azure หากผู้อ่านยังไม่มีบัญชีของ Microsoft Azure สามารถสร้างและทดลองใช้งานตามที่ผู้เขียนได้เคยแนะนำไว้ในบทความ “ลองใช้งาน Microsoft Azure SQL Database กันดีกว่า” ตามลิ้งก์ต่อไปนี้ https://www.9experttraining.com/articles/ลองใช้งาน-microsoft-azure-sql-database จากนั้นเลือกไปที่บริการชื่อ STORAGE ดังรูปข้างล่าง

กำหนด URL ของ Storage Account ซึ่งจะกลายเป็นชื่อ host ภายใต้ Domain ชื่อ core.windows.net
ดังนั้นจึงจำเป็นต้องตั้งให้ไม่ซ้ำกับของผู้ใช้คนอื่นทั้งโลกใบนี้ (ใครมาก่อนได้ชื่อไปก่อนนั่นเอง)
จากนั้นทำการเลือก Location แนะนำให้เลือกโซน South East Asia เพราะเป็นเส้นทางที่สั้นที่สุดจาก Client ไปยัง Data Center ของ Microsoft ที่ให้บริการ Azure Storage อยู่
ก็น่าจะได้ประสิทธิภาพและความรวดเร็วในการรับส่งข้อมูลที่ดีกว่าการเลือกภูมิภาคอื่น
ส่วน กลไกการ Replication ให้เลือกตาม SLA ที่ Microsoft จัดไว้ให้สำหรับแต่ละบริการ หาดูได้จาก https://azure.microsoft.com/en-us/support/legal/sla/


- Blob Storage ใช้จัดเก็บไฟล์ข้อมูลที่ไม่มีโครงสร้างแน่นอน
- Table Storage ใช้จัดเก็บเซตของข้อมูลที่มีโครงสร้าง
- Queue Storage ใช้จัดเก็บ Message ของ Workflow และการสื่อสารระหว่างองค์ประกอบภายในบริการ Cloud
- File Storage เป็น Share Storage แบบเก่าที่ใช้โปรโตคอล SMB
-
เอกสาร
-
ข้อมูล Social data อาทิ รูปภาพ, ไฟล์วีดีโอ, ไฟล์เพลง หรือ Blog ข้อมูล
-
Backup จากระบบไฟล์บนคอมพิวเตอร์ , Backup จากฐานข้อมูล หรือ Backup ของอุปกรณ์เครือข่าย
-
รูปภาพ และข้อความบน web application
-
ค่าคอนฟิกจากแอพพริเคชั่นบน cloud
-
Big data เช่น logs หรือเซตข้อมูลขนาดใหญ่
ก่อนอื่นต้องสร้าง Container ขึ้นมาเสียก่อน โดยสังเกตสถานะของ Storage Account เมื่อเป็น Online แล้ว ให้คลิกไปที่ลูกศรหลังชื่อ Storage Account ดังรูป



- Private สามารถเข้าถึงได้เฉพาะ Owner ของ Storage Account นี้เท่านั้น
- Public Blob เข้าถึงได้แบบสาธารณะ แต่ไม่สามารถเข้าถึงส่วนของ Properties และ Metadata ได้
- Public Container เข้าถึงได้แบบสาธารณะ และสามารถเข้าถึงส่วนของ Properties และ Metadata ได้

เมื่อดำเนินการเสร็จจะได้ URL ของ Container ออกมาในที่นี้คือ ตัวอย่างลิ้ง https://9expert.blob.core.windows.net/backup
เราสามารถนำ URL นี้ไปใช้กับการ Backup ของ Microsoft SQL Server ได้แล้ว

- เพื่อป้องกัน Downtime โดยปกติตาม Policy ด้านความปลอดภัยเราควรเปลี่ยนคีย์ตามระยะเวลาที่กำหนด แต่หากเรากดปุ่ม regenerate คีย์ที่เป็น Primary Access Key และ Client มีการตั้งค่าใช้งานผ่านคีย์ตัวนี้ก็จะทำให้ Client ไม่สามารถเข้าถึง Storage Account ได้ สถานการณ์นี้ให้ตั้งค่าใช้งานฝั่ง Client ให้ไปใช้ Secondary Access Key ก่อน แล้วจึง regenerate คีย์ที่เป็น Primary Access Key เพื่อ regenerate ถึงค่อยเปลี่ยนการตั้งค่าฝั่ง Client กลับมาใช้ Primary Access Key ที่สร้างใหม่อีกครั้ง
- ใช้เพื่อ share คีย์ที่เป็น Secondary Access Key ให้คนที่ต้องการใช้งานชั่วคราวเข้าใช้ได้ไปก่อน เมื่อการใช้งานสิ้นสุดลง ก็เพียงแต่ regenerate คีย์ที่เป็น Secondary Access Key ใหม่เพียงแค่นี้คนที่เคยใช้งานผ่าน Secondary Access Key เดิมก็จะเข้าใช้งานไม่ได้


เราจะนำ Access Key มาสร้างเป็น Credential ไว้ใน Database Engine
สำหรับ Credential นั้นเป็นการเก็บบันทึกข้อมูลในการแสดงสิทธิการเข้าถึงของ User ที่มีสิทธิในทรัพยากรภายนอกขอบเขตของ Database Engine เอาไว้ในตัว Database Engine เพื่อสนับสนุนในกรณีที่ Database Engine ต้องการเข้าถึงทรัพยากรเหล่านั้นจะได้ใช้ Credential นี้ในการเข้าถึง
การสร้าง Credential สามารถทำผ่าน SQL Server Management Studio โดยเปิด Object Explorer แล้วไปที่ Security (ระดับ Instance)
จากนั้นคลิกขวาที่ Credentials แล้วเลือก New Credential

- Credential Name เป็นการตั้งชื่อของ Credential เพื่อใช้อ้างอิงใช้งานใน Database Engine
- Identity โดยปกติหากใช้งานใน Domain Environment ภายในองค์กรและการเข้าถึงนั้นเป็นบริการต่างๆ ภายใน Domain Identity ก็มักจะเป็น Domain Users แต่ในกรณีนี้เป็นการใช้งาน Azure Storage ดังนั้น Identity ก็คือ Storage Account ที่เราสร้างขึ้นก่อนหน้านี้นั่นเอง
- Password หากปกติ Identity คือ Domain Users ในส่วนของ Password ก็คือ Password ของ Domain User คนนั้นๆ แต่ในกรณี Identity เป็น Storage Account แล้ว Password จะหมายถึง Access Key นั่นเอง

สำหรับกรณีสร้าง Credential ผ่านทางT-SQL จะมี Syntax ดังนี้
CREATE CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
[ , SECRET = 'secret' ]
[ FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name ]
สามารถติดตามรายละเอียดได้จากลิ้งก์ https://msdn.microsoft.com/en-us/library/ms189522.aspx
ตัวอย่างของการใช้งานผ่านคำสั่ง T-SQL ดังรูป
ในกรณีนี้จะต้องกำหนดกำหนดเป็น URL และต้อง กำหนด ออปชั่นให้ใช้งานผ่าน Credential ที่สร้างเอาไว้ สำหรับผ่าน Backup ผ่านทาง T-SQL
สามารถดูรายละเอียด Syntax ได้จากลิ้งก์นี้ https://msdn.microsoft.com/en-us/library/ms186865.aspx



ที่ผู้เขียนเล่ามาทั้งหมดนี้ก็อยากเชิญชวนให้ผู้อ่านลองไปหยิบๆ จับบริการบน Cloud ใช้ดู
เพื่อเตรียมความพร้อมที่นับวันไม่ว่าอะไรก็จะไปอยู่บน Cloud เสียหมดอย่างนี้ จะได้ไม่ตกรถไฟขบวนนี้กันครับ
บทความโดย
อาจารย์ภัคพงศ์ กฤตวัฒน์
วิทยากรดูแลและออกแบบหลักสูตร
กลุ่มวิชา SQL Server/Window Server