Sao lưu SQL Server 2022 bằng T-SQL và Ảnh chụp nhanh lưu trữ Dell PowerFlex

Giới thiệu

Những thách thức  với việc sao lưu cơ sở dữ liệu thông thường

Sao lưu cơ sở dữ liệu SQL Server thông thường đọc dữ liệu từ máy chủ để ghi vào vị trí mục tiêu sao lưu. Tương tự như vậy, trong quá trình khôi phục, dữ liệu được đọc lại vào máy chủ và ghi vào tệp dữ liệu cơ sở dữ liệu. Mặc dù phương pháp này cho phép sao lưu gia tăng và sao lưu đầy đủ, nhưng nó đặt ra những thách thức đáng kể đối với cơ sở dữ liệu quan trọng:

  • Các hoạt động sao lưu và khôi phục thông thường sử dụng tài nguyên máy chủ như CPU, bộ nhớ và I/O, điều này có thể ảnh hưởng đến hiệu suất cơ sở dữ liệu.
  • Khi dung lượng cơ sở dữ liệu tăng lên, việc sao lưu tập dữ liệu lớn hơn mất nhiều thời gian hơn, có thể từ vài phút đến vài giờ. Vấn đề này trở nên tồi tệ hơn trong quá trình khôi phục khi doanh nghiệp đang chờ khôi phục hoàn tất và cơ sở dữ liệu trực tuyến trở lại.

Tại sao cần lưu trữ ảnh chụp nhanh?

Nhiều công ty đang sử dụng snapshot lưu trữ để vượt qua những thách thức trên. Snapshot lưu trữ được xác định bằng phần mềm Dell PowerFlex cung cấp những lợi thế sau cho việc sao lưu SQL Server:

  • Bạn có thể tạo và khôi phục ảnh chụp nhanh lưu trữ trong vài giây bất kể kích thước cơ sở dữ liệu. 
  • Vì hoạt động tạo hoặc khôi phục ảnh chụp nhanh diễn ra rất nhanh nên tài nguyên máy chủ cơ sở dữ liệu không bị ảnh hưởng.
  • Ảnh chụp nhanh lưu trữ PowerFlex có tính nhất quán và có thể ghi được, cho phép ảnh chụp nhanh đóng vai trò là bản sao tại một thời điểm (cho các mục đích như gắn kết thử nghiệm, phát triển hoặc báo cáo bản sao cơ sở dữ liệu). 
  • Ảnh chụp nhanh PowerFlex mỏng và chỉ lưu giữ những thay đổi dữ liệu đã xảy ra kể từ khi ảnh chụp nhanh được tạo, do đó tiết kiệm không gian hơn so với sao lưu gia tăng.
  • Ưu điểm cuối cùng và quan trọng nhất là cùng với Microsoft API, bạn có thể sử dụng ảnh chụp nhanh PowerFlex cho các hoạt động sao lưu và khôi phục SQL Server.

API sao lưu lưu trữ SQL Server

Quá trình sao lưu SQL Server tận dụng các ảnh chụp nhanh lưu trữ không phải là điều mới mẻ. Điều này đã được thực hiện trong nhiều năm bằng cách sử dụng API Virtual Device Interface (VDI) hoặc Volume Shadow Copy Service (VSS). Bằng cách sử dụng các API và phần mềm sao lưu này, cùng với PowerFlex, cung cấp tất cả các lợi thế của ảnh chụp nhanh lưu trữ được đề cập ở trên và cho phép các ảnh chụp nhanh trở thành bản sao lưu hợp lệ của cơ sở dữ liệu.

Tính năng sao lưu ảnh chụp nhanh Transact-SQL mới

Với SQL Server 2022, Microsoft đã giới thiệu một cách mới để tạo bản sao lưu cơ sở dữ liệu bằng cách sử dụng ảnh chụp nhanh lưu trữ:  Sao lưu ảnh chụp nhanh Transact-SQL (T-SQL) . Phương pháp này không yêu cầu sử dụng API VDI hoặc VSS và có thể hoạt động cho cả Windows và Linux.

Quy trình sao lưu ảnh chụp nhanh T-SQL mới như sau: 

  1. Lệnh sao lưu T-SQL được ban hành, lệnh này dừng các hoạt động ghi vào cơ sở dữ liệu bằng cách lấy khóa. Lệnh có thể bao gồm một, nhiều hoặc tất cả các cơ sở dữ liệu.
  2. Người quản trị sao lưu sẽ chụp nhanh cơ sở dữ liệu ở cấp độ lưu trữ (hoặc các cơ sở dữ liệu).
  3. Lệnh sao lưu T-SQL thứ hai được đưa ra, tiếp tục các hoạt động của cơ sở dữ liệu và lưu siêu dữ liệu của bản sao lưu vào một tệp. Tệp siêu dữ liệu này là bắt buộc nếu ảnh chụp nhanh lưu trữ được sử dụng để khôi phục cơ sở dữ liệu.

Sau đây là một ví dụ về việc sử dụng ảnh chụp nhanh T-SQL:

Ví dụ sau đây cho thấy cách thực hiện các hoạt động sao lưu và phục hồi trên cơ sở dữ liệu có tên là tpcc, bằng cách sử dụng tính năng sao lưu ảnh chụp nhanh T-SQL mới với ảnh chụp nhanh PowerFlex.

Hoạt động sao lưu

Sao lưu bước 1: Tạm dừng cơ sở dữ liệu

Tạm dừng cơ sở dữ liệu bằng lệnh T-SQL sau:

ALTER DATABASE tpcc ĐẶT SUSPEND_FOR_SNAPSHOT_BACKUP = BẬT;

Trong lệnh này, cơ sở dữ liệu người dùng đơn lẻ bị tạm dừng, chặn mọi hoạt động tiếp theo. Đầu ra sau đây cho thấy việc tạm dừng thành công:

Cơ sở dữ liệu ‘tpcc’ đã có được khóa tạm dừng trong phiên 54.
I/O bị đóng băng trên cơ sở dữ liệu tpcc. Không cần hành động của người dùng. Tuy nhiên, nếu I/O không được tiếp tục kịp thời, bạn có thể hủy sao lưu.
Cơ sở dữ liệu ‘tpcc’ đã tạm dừng thành công để sao lưu ảnh chụp nhanh trong phiên 54.

Lưu ý: Để biết thêm thông tin về cách tạm dừng nhiều hoặc tất cả cơ sở dữ liệu người dùng, hãy xem  tài liệu của Microsoft .

Bước sao lưu 2: Chụp ảnh nhanh PowerFlex của các ổ đĩa cơ sở dữ liệu

Sau khi cơ sở dữ liệu bị tạm dừng, ảnh chụp nhanh các ổ đĩa cơ sở dữ liệu sẽ được tạo bằng PowerFlex Manager UI, REST API hoặc PowerFlex Command Line Interface (CLI).

Trong ví dụ này, ảnh chụp nhanh bao gồm cả tệp dữ liệu và khối lượng nhật ký giao dịch. Điều này cho phép ảnh chụp nhanh phục vụ nhiều mục đích:

  • Để tạo các phiên bản cơ sở dữ liệu độc lập cho các mục đích như báo cáo, thử nghiệm và phát triển (vì nó chứa hình ảnh nhất quán của cả dữ liệu và nhật ký).
  • Để khôi phục cả dữ liệu và nhật ký nếu cả hai đều bị hỏng. Trong trường hợp đó, cả dữ liệu và khối lượng nhật ký đều được khôi phục và cơ sở dữ liệu được khôi phục về bản sao lưu nhật ký giao dịch cuối cùng.
  • Nếu nhật ký giao dịch đang hoạt động vẫn tồn tại sau thảm họa, chỉ có các ổ dữ liệu được khôi phục và cơ sở dữ liệu có thể thực hiện khôi phục hoàn toàn tất cả các giao dịch đã cam kết.

Hình sau đây là ví dụ về cách tạo ảnh chụp nhanh bằng PowerFlex Manager UI:

 

 Hình 1.  Tạo ảnh chụp nhanh bằng PowerFlex CLI

Chạy lệnh sau để tạo ảnh chụp nhanh bằng PowerFlex CLI: 

scli –snapshot_volume –tên_volume MSSQL_DATA, MSSQL_LOG –tên_snapshot MSSQL_DATA-snap-1,MSSQL_LOG-snap-1 –chỉ_đọc

Mẫu đầu ra:

Ảnh chụp nhanh trên 2 tập đã được tạo thành công

ID nhóm nhất quán: b10f52c800000002

   Khối lượng nguồn MSSQL_DATA => 20f0895f00000004 MSSQL_DATA-snap-1

   Khối lượng nguồn MSSQL_LOG => 20f0896000000005 MSSQL_LOG-snap-1

Bước sao lưu 3: Sao lưu siêu dữ liệu T-SQL của cơ sở dữ liệu

Khi ảnh chụp nhanh được tạo, hãy sử dụng lệnh sau để tạo tệp siêu dữ liệu và tiếp tục các hoạt động ghi cơ sở dữ liệu:

SAO LƯU CƠ SỞ DỮ LIỆU tpcc VÀO ĐĨA = ‘C:\mssql_metadata_backup\tpcc_metadata.bkm’ VỚI METADATA_ONLY,MEDIANAME=’PowerFlex-MSSQL_DATA-Snapshot-backup’; 

Trong bước này, tệp siêu dữ liệu của cơ sở dữ liệu tpcc được lưu trữ trong đường dẫn đã chỉ định. Lệnh này cũng giải phóng khóa cơ sở dữ liệu và cho phép các hoạt động cơ sở dữ liệu tiếp tục.

Mẫu đầu ra:

I/O đã được tiếp tục trên cơ sở dữ liệu tpcc. Không cần hành động của người dùng.
Cơ sở dữ liệu ‘tpcc’ đã giải phóng khóa tạm dừng trong phiên 54.
Cơ sở dữ liệu ‘tpcc’ ban đầu bị tạm dừng để sao lưu ảnh chụp nhanh trong phiên 54 đã tiếp tục thành công trong phiên 54.
Đã xử lý 0 trang cho cơ sở dữ liệu ‘tpcc’, tệp ‘tpcc’ trên tệp 5.
CƠ SỞ DỮ LIỆU SAO LƯU đã xử lý thành công 0 trang trong 0,003 giây (0,000 MB/giây. 

Mô phỏng sự cố hỏng cơ sở dữ liệu

Có thể có nhiều lý do khác nhau khiến cơ sở dữ liệu cần được khôi phục, chẳng hạn như do xóa tệp dữ liệu, đĩa bị định dạng hoặc ghi đè, khối vật lý bị hỏng, v.v. Trong ví dụ này, chúng ta sẽ xóa một bảng lớn và khôi phục cơ sở dữ liệu về thời điểm trước khi xóa.

Để hiển thị quá trình khôi phục cơ sở dữ liệu bao gồm dữ liệu được thêm vào sau khi tạo ảnh chụp nhanh, chúng tôi tạo một bảng mới sau khi chụp ảnh nhanh và chèn một bản ghi vào bảng đó. Bản ghi đó là một phần của bản sao lưu nhật ký giao dịch tiếp theo. Cuối cùng, chúng tôi xóa bảng khách hàng và xác thực quá trình khôi phục cơ sở dữ liệu.

Bước 1: Tạo một bảng mới sau khi chụp ảnh nhanh và chèn một bản ghi đã biết vào bảng

Chạy lệnh sau để tạo bảng và chèn một bản ghi đã biết vào bảng:

tạo bảng trả về ( returnID int, returnName varchar(255));

chèn vào trả về giá trị (1,’sampleValue’);

trả vềID trả vềTên
1 mẫuGiá trị

Bước 2: Sao lưu nhật ký giao dịch

Lệnh sau đây tạo bản sao lưu nhật ký bao gồm dữ liệu bảng trả về. Phục hồi cơ sở dữ liệu sử dụng bản sao lưu nhật ký này.

NHẬT KÝ SAO LƯU tpcc VÀO ĐĨA = ‘C:\mssql_tail_log_backup\tpcc_tail_log_before_disaster.bkm’; 

Lưu ý:  Cách tốt nhất là tạo bản sao lưu nhật ký giao dịch định kỳ như đã trình bày ở trên.

Bước 3: Mô phỏng sự cố hỏng cơ sở dữ liệu

Để trình diễn, chúng tôi mô phỏng lỗi hỏng cơ sở dữ liệu bằng cách xóa bảng khách hàng bằng cách chạy lệnh sau:

thả bảng tpcc.dbo.customer;

Hoạt động phục hồi

Quá trình khôi phục cơ sở dữ liệu diễn ra theo hai bước:

  1. Đầu tiên, chúng tôi khôi phục dữ liệu cơ sở dữ liệu bằng cách sử dụng ảnh chụp nhanh lưu trữ.
  2. Tiếp theo, chúng ta khôi phục cơ sở dữ liệu bằng cách sao lưu nhật ký giao dịch.

Bước phục hồi 1: Đưa cơ sở dữ liệu ngoại tuyến

Trước khi khôi phục cơ sở dữ liệu, nếu cơ sở dữ liệu vẫn hoạt động (tùy thuộc vào loại hỏng hóc), hãy đặt cơ sở dữ liệu ngoại tuyến bằng cách chạy lệnh sau:

thay đổi cơ sở dữ liệu tpcc thiết lập ngoại tuyến;

Bước phục hồi 2: Đưa đĩa cơ sở dữ liệu ngoại tuyến

Trước khi khôi phục ảnh chụp nhanh lưu trữ của đĩa cơ sở dữ liệu, hãy đặt đĩa ngoại tuyến để tránh bất kỳ khóa còn sót lại nào. Bạn có thể sử dụng lệnh quản lý đĩa hoặc PowerShell.

Set-Disk -Số 1 -isOffline $True 

Lưu ý: Trong ví dụ này, chỉ có đĩa dữ liệu được đặt ở chế độ ngoại tuyến vì nhật ký giao dịch đang hoạt động vẫn còn nguyên vẹn và không có lý do gì để ghi đè lên nó bằng ảnh chụp nhanh nhật ký.

Bước phục hồi 3: Khôi phục ảnh chụp nhanh khối lượng dữ liệu cơ sở dữ liệu

Khôi phục khối lượng dữ liệu cơ sở dữ liệu PowerFlex bằng snapshot. Có thể thực hiện việc này từ PowerFlex UI, REST API hoặc PowerFlex CLI.

Sau đây là ví dụ về cách khôi phục ảnh chụp nhanh bằng PowerFlex CLI:

scli –overwrite_volume_content –source_vol_name MSSQL_DATA-snap-1 –destination_vol_name ‘MSSQL_DATA’ 

Mẫu đầu ra:

Nội dung ghi đè ổ đĩa có thể xóa dữ liệu và không nên được gọi trong các hoạt động I/O hoặc trên các ổ đĩa được gắn kết. Nhấn ‘y’ rồi Enter để xác nhận: y

Ghi đè nội dung ổ đĩa đã hoàn tất thành công

Bước phục hồi 4: Đưa đĩa cơ sở dữ liệu trực tuyến

Đưa các ổ đĩa cơ sở dữ liệu trở lại trực tuyến bằng cách sử dụng lệnh Quản lý đĩa hoặc lệnh PowerShell.

Set-Disk -Số 1 -isOffline $False 

Bước phục hồi 5: Đưa cơ sở dữ liệu trực tuyến

Đưa cơ sở dữ liệu tpcc trở lại trực tuyến bằng cách sử dụng lệnh sau:

thay đổi cơ sở dữ liệu tpcc đặt trực tuyến; 

Bước phục hồi 6: Khôi phục siêu dữ liệu sao lưu ảnh chụp nhanh

Sử dụng tệp siêu dữ liệu được chụp trong quá trình sao lưu ảnh chụp nhanh để thông báo cho SQL Server về ảnh chụp nhanh đã được khôi phục.

Lưu ý:  Trước khi thực hiện việc này, SQL Server  yêu cầu  phải sao lưu nội dung nhật ký giao dịch đang hoạt động. Thực hiện việc này trước, sau đó là lệnh khôi phục cơ sở dữ liệu.

Sao lưu T-SQL nhật ký giao dịch đang hoạt động bằng cách chạy lệnh sau:

NHẬT KÝ SAO LƯU tpcc VÀO ĐĨA = ‘C:\mssql_tail_log_backup\tpcc_tail_log_after_disaster.bkm’ VỚI NORECOVERY;

Khôi phục siêu dữ liệu sao lưu ảnh chụp nhanh bằng cách chạy lệnh sau:

KHÔI PHỤC CƠ SỞ DỮ LIỆU tpcc TỪ ĐĨA = ‘C:\mssql_metadata_backup\tpcc_metadata.bkm’ VỚI METADATA_ONLY, NORECOVERY;

Lưu ý:  Vì lệnh chỉ định METADATA_ONLY, SQL Server biết rằng dữ liệu cơ sở dữ liệu đã được khôi phục từ ảnh chụp nhanh lưu trữ. Nếu sử dụng NORECOVERY, cơ sở dữ liệu sẽ chuyển sang trạng thái khôi phục vì đang chờ áp dụng bản sao lưu nhật ký giao dịch để đảm bảo tính nhất quán.

Bước phục hồi 7: Áp dụng bản sao lưu nhật ký giao dịch

Khôi phục bản sao lưu nhật ký giao dịch phù hợp hoặc các bản sao lưu. Trong ví dụ sau, chúng tôi khôi phục bản sao lưu nhật ký được thực hiện sau khi bảng trả về  được tạo và trước khi  bảng khách hàng bị xóa.

KHÔI PHỤC NHẬT KÝ tpcc TỪ ĐĨA = C:\mssql_tail_log_backup\tpcc_tail_log_before_disaster.bkm’ VỚI PHỤC HỒI;

Lưu ý:  Nếu có nhiều nhật ký giao dịch cần khôi phục, hãy sử dụng tùy chọn WITH NORECOVERY với tất cả trừ nhật ký cuối cùng. Lệnh RESTORE LOG cuối cùng sử dụng WITH RECOVERY, biểu thị rằng không cần khôi phục nữa.

Khi thao tác này hoàn tất, cơ sở dữ liệu sẽ hoạt động và chứa tất cả các giao dịch được khôi phục (bao gồm cả bảng trả về mới tạo).

Phần kết luận 

Với tính năng sao lưu T-SQL Snapshot mới của SQL Server 2022, có thể thực hiện sao lưu cơ sở dữ liệu dựa trên ảnh chụp nhanh lưu trữ PowerFlex mà không cần dựa vào các công cụ sao lưu bổ sung. Quá trình này có thể được tự động hóa để đạt được các giải pháp sao lưu nhanh hơn và đáng tin cậy hơn cho các cơ sở dữ liệu SQL Server quan trọng, cho cả hệ điều hành Windows và Linux.