EngineeringSenior DeveloperSQL Deep Dive

Chiến lược sao lưu & khôi phục SQL Server

Mục tiêu

Cung cấp hướng dẫn chi tiết cho việc sao lưu (backup) và khôi phục (restore) cơ sở dữ liệu SQL Server (on‑prem và Azure SQL) đáp ứng các yêu cầu RPO/RTO của dự án .NET Enterprise.

1. Kiểu sao lưu

KiểuThời gian thực hiệnĐộ chi tiếtKhi nào dùng
Full Backup30‑60 phút (tùy kích thước)Toàn bộ dữ liệu + logĐịnh kỳ hàng tuần hoặc khi có thay đổi lớn về schema
Differential Backup5‑15 phútChỉ các trang dữ liệu thay đổi kể từ backup full cuối cùngHàng ngày để giảm thời gian restore
Transaction Log Backup5‑10 phút (hoặc 5‑15 phút)Ghi lại mọi giao dịch kể từ backup log cuối cùngLiên tục, mỗi 15‑30 phút hoặc mỗi 5 phút cho môi trường có RPO < 5 phút

2. Quy trình sao lưu (On‑Prem)

sql
-- Full backup (đặt lịch vào cuối tuần)
BACKUP DATABASE [MyDb] TO DISK = N'\\backupserver\SQLBackups\MyDb_Full_20240404.bak' WITH INIT, COMPRESSION;

-- Differential backup (hàng ngày)
BACKUP DATABASE [MyDb] TO DISK = N'\\backupserver\SQLBackups\MyDb_Diff_20240404.bak' WITH DIFFERENTIAL, COMPRESSION;

-- Log backup (mỗi 15 phút)
BACKUP LOG [MyDb] TO DISK = N'\\backupserver\SQLBackups\MyDb_Log_20240404.trn' WITH COMPRESSION;

Lưu ý: Đặt Retention cho log backup ít nhất 30 ngày để hỗ trợ point‑in‑time restore.

3. Azure SQL Managed Instance / Azure SQL Database

  • Automated Backups: Azure tự động tạo full backup hàng ngày, differential 12‑hour, và log backup mỗi 5‑10 phút.
  • Long‑Term Retention (LTR): Cấu hình LTR để giữ backup tới 10 năm (đối với yêu cầu lưu trữ dữ liệu pháp lý).
  • Restore:
    bash
    az sql db restore --dest-name MyDb_Restore --name MyDb --resource-group rg-wiki --server myserver --time "2024-04-04T12:30:00Z"
    
    Sử dụng point‑in‑time để khôi phục tới thời điểm cụ thể.

4. Kiểm tra phục hồi (Disaster Recovery Drill)

  1. Tạo sandbox database MyDb_TestRestore.
  2. Thực hiện RESTORE DATABASE MyDb_TestRestore FROM DISK = ... WITH NORECOVERY; sau đó RESTORE LOG ... WITH RECOVERY;.
  3. Kiểm tra tính toàn vẹn: DBCC CHECKDB('MyDb_TestRestore').
  4. Lập lịch quarterly drill để đảm bảo quy trình hoạt động.

5. Các công cụ hỗ trợ

  • SQLPackage (sqlpackage /Action:Export) – xuất schema + dữ liệu sang .bacpac, dễ di chuyển lên Azure.
  • Azure Data Factory – sao chép backup từ on‑prem lên Azure Blob Storage để lưu trữ lâu dài.
  • PowerShell – Backup-SqlDatabase và Restore-SqlDatabase tự động hoá.

6. Lưu ý bảo mật

  • Mã hoá backup bằng Transparent Data Encryption (TDE) và Backup Encryption (WITH ENCRYPTION).
  • Đặt Access Control cho thư mục backup (NTFS permissions) và Shared Access Signatures cho Blob.
  • Đảm bảo immutability (policy immutable) cho backup lưu trữ lâu dài.

File thuộc mục SQL Deep‑Dive của senior‑dotnet‑wiki.