將 SQL Server 資料庫備份到 Cloud Storage 值區

本教學課程說明如何將 Microsoft SQL Server 2022 資料庫直接備份至 Cloud Storage 值區,並在稍後還原。SQL Server 2022 推出的 SQL Server 備份原生功能,提供順暢且符合成本效益的策略,可進行雲端災難復原和資料遷移。

SQL Server 備份原生功能會運用 BACKUP TO URLRESTORE FROM URL 指令,支援與 S3 相容的物件儲存空間,包括 Cloud Storage。這樣就不需要中繼本機儲存空間,可簡化備份工作流程並減少作業負擔。

本教學課程適用於資料庫管理員和工程師。

建立 Cloud Storage 值區

您可以使用 Google Cloud 控制台或 gcloud storage 指令建立 Cloud Storage bucket

如要使用 gcloud storage 指令建立 Cloud Storage bucket,請按照下列步驟操作。

  1. 選取 Google Cloud 專案。

    gcloud config set project PROJECT_ID
    
  2. 建立 bucket。 如要建立 bucket,請執行下列 gcloud storage buckets create 指令。

      gcloud storage buckets create gs://BUCKET_NAME --location=BUCKET_LOCATION
    

    更改下列內容:

  • BUCKET_NAME:並為 bucket 指定不重複的名稱。
  • BUCKET_LOCATION:值區位置。

設定 S3 互通性並建立存取金鑰

如要允許 SQL Server 使用 S3 通訊協定與 Cloud Storage 通訊,請按照下列步驟啟用互通性並產生存取金鑰:

  1. 前往 Google Cloud 控制台的 Cloud Storage 設定。

    前往 Cloud Storage 設定

  2. 選取 [Interoperability] (互通性) 分頁標籤。

  3. 在「您使用者帳戶的存取金鑰」下方,按一下「建立金鑰」

    儲存空間存取金鑰

  4. 請妥善儲存產生的存取金鑰密鑰。在下一步中將會用到。

在正式環境中,建議使用服務帳戶雜湊式訊息驗證碼 (HMAC) 金鑰,以提升安全性和管理效率。

在 SQL Server 中新增憑證

如要讓 SQL Server 透過 Cloud Storage bucket 進行驗證,您必須在 SQL Server 中建立憑證物件,儲存 Cloud Storage 存取金鑰和密鑰。如要這麼做,請在 SQL Server Management Studio (SSMS) 中執行下列 T-SQL 指令。

CREATE CREDENTIAL CREDENTIAL_NAME
WITH
    IDENTITY = 'S3 Access Key',
    SECRET = 'ACCESS_KEY:SECRET';

更改下列內容:

  • CREDENTIAL_NAME:並為憑證命名。
  • ACCESS_KEY:使用您在上一節中建立的存取金鑰。
  • SECRET:您在上一節中建立的密鑰。

IDENTITY = 'S3 Access Key' 至關重要,因為這會告知 SQL Server 使用新的 S3 連接器。私密金鑰的格式應為存取金鑰,後接半形冒號,然後是私密金鑰。

範例:

CREATE CREDENTIAL sql_backup_credentials
WITH
    IDENTITY = 'S3 Access Key',
    SECRET = 'GOOGGE3SVF7OQE5JRMLQ7KWB:b31Pl8Tx1ARJfdGOsbgMFQNbk3nPdlT2UCYzs1iC';

將資料備份至 Cloud Storage

設定好憑證後,您現在可以使用 BACKUP DATABASE 指令搭配 TO URL 選項,將資料庫直接備份到 Cloud Storage 值區。在網址前加上 s3://storage.googleapis.com,即可使用 S3 連接器,如下所示。

BACKUP DATABASE DATABASE_NAME
TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME.bak'
WITH
    CREDENTIAL = 'CREDENTIAL_NAME',
    FORMAT,
    STATS = 10,
    MAXTRANSFERSIZE = 10485760,
    COMPRESSION;

更改下列內容:

  • CREDENTIAL_NAME:您在步驟 3 建立的憑證名稱。例如:sql_backup_credentials
  • BUCKET_NAME:您在步驟 1 中建立的值區名稱。
  • FOLDER_NAME:要儲存備份檔案的資料夾名稱。
  • BACKUP_FILE_NAME 備份檔的名稱。

指令中使用的備份參數說明如下:

  • FORMAT:覆寫現有的備份檔案,並建立新的媒體集。
  • STATS:回報備份進度。
  • COMPRESSION:壓縮備份檔,可縮減檔案大小和上傳時間。
  • MAXTRANSFERSIZE:建議使用此選項,以免大型備份檔案發生 I/O 錯誤。

詳情請參閱「將 SQL Server 備份至與 S3 相容的物件儲存空間的網址」。

如果是非常大的資料庫,您可以按照下列步驟將備份檔分割成多個檔案。

BACKUP DATABASE DATABASE_NAME
TO
    URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME_0.bak',
    URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME_1.bak'
    -- ... more files
WITH
    CREDENTIAL = 'CREDENTIAL_NAME',
    FORMAT,
    STATS = 10,
    MAXTRANSFERSIZE = 10485760,
    COMPRESSION;

從 Cloud Storage 還原資料

您可以使用 RESTORE DATABASE 指令,直接從儲存在 Cloud Storage 的備份檔案還原資料庫,如下所示。

RESTORE DATABASE DATABASE_NAME
FROM URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME.bak'
WITH
    CREDENTIAL = 'CREDENTIAL_NAME';

更改下列內容:

  • CREDENTIAL_NAME:您在步驟 3 建立的憑證名稱。例如:sql_backup_credentials
  • BUCKET_NAME:您在步驟 1 中建立的值區名稱。
  • FOLDER_NAME:要儲存備份檔案的資料夾名稱。
  • BACKUP_FILE_NAME 備份檔的名稱。