共用方式為


教學課程:搭配 SQL Server 使用 Azure Blob 儲存體

適用於: SQL Server 2016 (13.x) 和更新版本

本教學課程可協助您瞭解如何在 SQL Server 2016 (13.x) 和更新版本中使用 Azure Blob 儲存體進行資料檔案和備份。

SQL Server 2012 (11.x) Service Pack 1 CU2 中引進了 SQL Server 中 Azure Blob 儲存體的支援,並在更新版本中增強。 如需使用此功能的功能和優點概觀,請參閱 Microsoft Azure 中的 SQL Server 資料檔案

本教學課程會在多個區段中示範如何使用 Azure Blob 儲存體中的 SQL Server 資料檔案。 每個部分都側重於特定任務,您應該按順序完成這些部分。 首先,您將瞭解如何使用預存的存取原則和共用存取簽章,在 Blob 儲存體中建立新的容器。 然後,您將瞭解如何建立 SQL Server 認證,以將 SQL Server 與 Azure Blob 儲存體整合。 接下來,您會將資料庫備份至 Blob 記憶體,並將其還原至 Azure 虛擬機。 然後,您可以使用 SQL Server 檔案快照集交易記錄備份,還原至某個時間點和新的資料庫。 最後,本教學課程示範如何使用中繼資料系統預存程式和函式,以協助您瞭解及使用檔案快照集備份。

先決條件

若要完成本教學課程,您必須熟悉 SQL Server 備份與還原概念以及 T-SQL 語法。

若要使用本教學課程,您需要 Azure 儲存體帳戶、SQL Server Management Studio (SSMS)、內部部署 SQL Server 執行個體的存取權、執行 SQL Server 2016 (13.x) 或更新版本執行個體的 Azure 虛擬機器 (VM) 的存取權,以及 AdventureWorks2025 資料庫。 此外,用來發出 和 BACKUPRESTORE 命令的帳戶應該處於 db_backupoperator 資料庫角色中,並具有 變更任何認證 權限。

這很重要

SQL Server 不支援 Azure Data Lake Storage。 請確定未在本教學課程所用儲存體帳戶上啟用階層 式命名空間

1 - 建立預存存取原則和共用存取儲存體

在本節中,您會使用 Azure PowerShell 指令碼,使用預存的存取原則,在 Azure Blob 儲存體容器上建立共用存取簽章。

備註

此指令碼是使用 Azure PowerShell 5.0.10586 所撰寫。

共用存取簽章是一個 URI,會將有限的存取權限授與容器、Blob、佇列或資料表。 預存的存取原則可對伺服器端的共用存取簽章提供額外層級的控制,包括撤銷、到期或延長存取權。 使用這項新的增強功能時,您需要在容器上建立具有最低讀取、寫入和列出權限的原則。

您可以使用 Azure PowerShell、Azure 儲存體 SDK、Azure REST API 或協力廠商公用程式,建立預存存取原則和共用存取簽章。 本教學課程示範如何使用 Azure PowerShell 指令碼來完成這項工作。 此指令碼會使用資源管理員部署模型,並建立下列新的資源

  • 資源群組
  • 記憶體帳戶
  • Azure Blob 儲存體容器
  • SAS 原則

此指令碼會先宣告數個變數,以指定先前資源的名稱,以及下列必要輸入值的名稱:

  • 用來命名其他資源物件的前置名稱
  • 訂閱名稱
  • 資料中心位置

指令碼會藉由產生您在 2 中使用的適當 CREATE CREDENTIAL 陳述式 - 使用共用存取簽章建立 SQL Server 認證來完成。 系統會為您將此陳述式複製到剪貼簿,並輸出到主控台以供檢視。

若要在容器上建立原則並產生共用存取簽章 (SAS),請遵循下列步驟執行:

  1. 開啟 Window PowerShell 或 Windows PowerShell ISE (請參閱舊版需求)。

  2. 編輯,然後執行下列指令碼:

    # Define global variables for the script
    $prefixName = '<a prefix name>'               # used as the prefix for the name for various objects
    $subscriptionID = '<your subscription ID>'    # the ID  of subscription name you will use
    $locationName = '<a data center location>'    # the data center region you will use
    $storageAccountName = $prefixName + 'storage' # the storage account name you will create or use
    $containerName = $prefixName + 'container'    # the storage container name to which you will attach the SAS policy with its SAS token
    $policyName = $prefixName + 'policy'          # the name of the SAS policy
    
    # Set a variable for the name of the resource group you will create or use
    $resourceGroupName = $prefixName + 'rg'
    
    # Add an authenticated Azure account for use in the session
    Connect-AzAccount
    
    # Set the tenant, subscription and environment for use in the rest of
    Set-AzContext -SubscriptionId $subscriptionID
    
    # Create a new resource group - comment out this line to use an existing resource group
    New-AzResourceGroup -Name $resourceGroupName -Location $locationName
    
    # Create a new Azure Resource Manager storage account - comment out this line to use an existing Azure Resource Manager storage account
    New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Type Standard_RAGRS -Location $locationName
    
    # Get the access keys for the Azure Resource Manager storage account
    $accountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName
    
    # Create a new storage account context using an Azure Resource Manager storage account
    $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].Value
    
    # Creates a new container in Blob Storage
    $container = New-AzStorageContainer -Context $storageContext -Name $containerName
    
    # Sets up a Stored Access Policy and a Shared Access Signature for the new container
    $policy = New-AzStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -StartTime $(Get-Date).ToUniversalTime().AddMinutes(-5) -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission rwld
    
    # Gets the Shared Access Signature for the policy
    $sas = New-AzStorageContainerSASToken -name $containerName -Policy $policyName -Context $storageContext
    Write-Host 'Shared Access Signature= '$($sas.Substring(1))''
    
    # Sets the variables for the new container you just created
    $container = Get-AzStorageContainer -Context $storageContext -Name $containerName
    $cbc = $container.CloudBlobContainer
    
    # Outputs the Transact SQL to the clipboard and to the screen to create the credential using the Shared Access Signature
    Write-Host 'Credential T-SQL'
    $tSql = "CREATE CREDENTIAL [{0}] WITH IDENTITY='SHARED ACCESS SIGNATURE', SECRET='{1}'" -f $cbc.Uri, $sas
    Set-Clipboard -Value $tSql
    Write-Host $tSql
    
    # Once you're done with the tutorial, remove the resource group to clean up the resources.
    # Remove-AzResourceGroup -Name $resourceGroupName
    
  3. 指令碼完成後,該 CREATE CREDENTIAL 陳述式將位於剪貼簿中,以供下一節使用。

2 - 使用共用存取簽章建立 SQL Server 認證

在本節中,您會建立認證來儲存安全性資訊,SQL Server 會使用該認證來寫入您在上一個步驟中建立的 Azure Blob 儲存體容器,並從中讀取。

SQL Server 認證是用來儲存連接到 SQL Server 外部資源所需之驗證資訊的物件。 認證會儲存 Azure Blob 儲存體容器的 URI 路徑,以及該容器的共用存取簽章金鑰值。

若要建立 SQL Server 認證,請依照下列步驟進行:

  1. 啟動 SSMS。

  2. 開啟新的查詢視窗,並連線到內部部署環境中資料引擎的 SQL Server 執行個體。

  3. 在新的查詢視窗中,貼上 CREATE CREDENTIAL 具有第 1 節共用存取簽章的陳述式,然後執行該腳本。

    指令碼看起來像以下程式碼。

    /* Example:
          USE master
          CREATE CREDENTIAL [https://msfttutorial.blob.core.windows.net/containername]
          WITH IDENTITY='SHARED ACCESS SIGNATURE'
          , SECRET = 'sharedaccesssignature'
         GO */
    USE master;
    
    CREATE CREDENTIAL [https://<storage-account>.blob.core.windows.net/<container-name>]
    -- this name must match the container path, start with https and must not contain a forward slash at the end
        WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
        -- this is a mandatory string and should not be changed
        SECRET = 'sharedaccesssignature';
        -- this is the shared access signature key that you obtained in section 1.
    GO
    
  4. 若要查看所有可用的認證,您可以在已連接到執行個體的查詢視窗中執行下列陳述式:

    SELECT *
    FROM sys.credentials;
    
  5. 開啟新的查詢視窗,並連線到您 Azure 虛擬機器中資料庫引擎的 SQL Server 執行個體。

  6. 在新的查詢視窗中,貼上 CREATE CREDENTIAL 具有第 1 節共用存取簽章的陳述式,然後執行該腳本。

  7. 如果您想要讓任何其他 SQL Server 執行個體擁有容器的存取權,請重複步驟 5 和 6。

3 - 資料庫備份至 URL

在本節中,您會將 SQL Server 執行個體中的資料庫備份 AdventureWorks2025 至您在 第 1 節中建立的容器。

若要將資料庫備份至 Blob 儲存體,請遵循下列步驟:

  1. 啟動 SSMS。

  2. 開啟新的查詢視窗,並連線到您 Azure 虛擬機器中的 SQL Server 執行個體。

  3. 將下列 Transact-SQL 指令碼複製並貼入 [查詢] 視窗中。 適當地修改儲存體帳戶名稱以及您在第 1 節中所指定容器的 URL,然後執行此指令碼。

    -- To permit log backups, before the full database backup, modify the database to use the full recovery model.
    USE master;
    ALTER DATABASE AdventureWorks2022
        SET RECOVERY FULL;
    
    -- Back up the full AdventureWorks2022 database to the container that you created in section 1
    BACKUP DATABASE AdventureWorks2022
        TO URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak';
    
  4. 開啟物件總管,並使用您的儲存體帳戶和帳戶金鑰連接到 Azure 儲存體。

    1. 展開 [容器],展開您在第 1 節中建立的容器,並確認先前步驟 3 中的備份顯示在此容器中。

    連線到 Azure 儲存體帳戶的多步驟程式螢幕擷取畫面。

4 - 從 URL 將資料庫還原至虛擬機器

在本節中,您會將 AdventureWorks2025 資料庫還原至 Azure 虛擬機器中的 SQL Server 執行個體。

備註

為了本教學課程的簡單起見,我們會針對資料庫備份所用的資料和記錄檔使用相同的容器。 在生產環境中,您可能會使用多個容器,通常也可能會使用多個資料檔案。 您也可以考慮將備份資料分散到多個 Blob,以提升備份大型資料庫時的備份效能。

若要將 AdventureWorks2025 資料庫從 Azure Blob 儲存體還原至 Azure 虛擬機器中的 SQL Server 2016 執行個體,請遵循下列步驟:

  1. 啟動 SSMS。

  2. 開啟新的查詢視窗,並連線到您 Azure 虛擬機器中資料庫引擎的 SQL Server 執行個體。

  3. 將下列 Transact-SQL 指令碼複製並貼入 [查詢] 視窗中。 適當地修改儲存體帳戶名稱以及您在第 1 節中所指定容器的 URL,然後執行此指令碼。

    -- Restore AdventureWorks2022 from URL to SQL Server instance using Azure Blob Storage for database files
    RESTORE DATABASE AdventureWorks2022
        FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak'
    WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Data.mdf',
         MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Log.ldf';
         --, REPLACE
    
  4. 開啟物件總管,並連接到您的 Azure SQL Server 執行個體。

  5. 在「物件總管」中,展開「 資料庫」 節點,並確認 AdventureWorks2025 資料庫已還原(視需要重新整理節點)。

    1. 右鍵點選 AdventureWorks2025,然後選擇 屬性

    2. 選取 [檔案],並確認兩個資料庫檔案的路徑是指向 Azure Blob 儲存體容器中 Blob 的 URL (完成時請選取 [取消])。

    Azure VM 上 AdventureWorks2022 資料庫的 SSMS 螢幕擷取畫面。

  6. 在物件總管中,連接到 Azure 儲存體。

    1. 展開 [容器],展開您在第 1 節中建立的容器,並確認AdventureWorks2022_Data.mdfAdventureWorks2022_Log.ldf和步驟 3 稍早出現在此容器中,以及第 3 節的備份文件(視需要重新整理節點)。

    SSMS 中物件總管的螢幕擷取畫面,顯示容器內的資料檔案,在 Azure 上,在 SQL Server 執行個體專案下方。

5 - 使用檔案快照集備份來備份資料庫

在本節中,您會 AdventureWorks2025 使用檔案快照集備份備份 Azure 虛擬機器中的資料庫,以使用 Azure 快照集執行幾乎即時的備份。 如需檔案快照集備份的詳細資訊,請參閱 Azure 中資料庫檔案的檔案快照集備份

若要使用快照集檔案備份來備份 AdventureWorks2025 資料庫,請遵循下列步驟:

  1. 啟動 SSMS。

  2. 開啟新的查詢視窗,並連線到您 Azure 虛擬機器中資料庫引擎的 SQL Server 執行個體。

  3. 將下列 Transact-SQL 腳本複製、貼上並執行到查詢視窗中 (請勿關閉此查詢視窗 - 您會在步驟 5 中再次執行此腳本)。 此系統預存程序可讓您檢視組成指定資料庫之每個檔案的現有檔案快照集備份。 您可以看到此資料庫沒有檔案快照集備份。

    -- Verify that no file snapshot backups exist
    SELECT *
    FROM sys.fn_db_backup_file_snapshots('AdventureWorks2022');
    
  4. 將下列 Transact-SQL 指令碼複製並貼入 [查詢] 視窗中。 適當地修改儲存體帳戶名稱以及您在第 1 節中所指定容器的 URL,然後執行此指令碼。 注意此備份速度有多快。

    -- Backup the AdventureWorks2022 database with FILE_SNAPSHOT
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Azure.bak'
       WITH FILE_SNAPSHOT;
    
  5. 確認步驟 4 中的指令碼順利執行之後,請再次執行下列指令碼。 步驟 4 中檔案快照集備份作業會產生數據和記錄檔的檔案快照集。

    -- Verify that two file-snapshot backups exist
    SELECT *
    FROM sys.fn_db_backup_file_snapshots('AdventureWorks2022');
    

    fn_db_backup_file_snapshots結果的 SSMS 螢幕快照,其中顯示快照集。

  6. 在 [物件總管] 中,在您的 Azure 虛擬機器上的 SQL Server 執行個體中,展開 [資料庫] 節點,並確認 資料庫已還原至此執行個體(必要時請重新整理節點)。

  7. 在物件總管中,連接到 Azure 儲存體。

  8. 展開 容器,展開您在第 1 節中建立的容器,並確認先前步驟 4 中的 出現在 AdventureWorks2022_Azure.bak 此容器中,以及第 3 節中的備份檔案和第 4 節中的資料庫檔案 (視需要重新整理節點)。

    SSMS 中物件總管的螢幕擷取畫面,顯示 Azure 上的快照集備份。

6 - 使用檔案快照集備份來產生活動和備份記錄

在本節中,您會在資料庫中 AdventureWorks2025 產生活動,並使用檔案快照集備份定期建立交易記錄備份。 如需如何使用檔案快照集備份的詳細資訊,請參閱 Azure 中資料庫檔案的檔案快照集備份

若要使用檔案快照集備份,在 AdventureWorks2025 資料庫中產生活動並定期建立交易記錄備份,請遵循下列步驟:

  1. 啟動 SSMS。

  2. 開啟兩個新的查詢視窗,並將這兩個視窗都連接到 Azure 虛擬機器中資料庫引擎的 SQL Server 執行個體。

  3. 將下列 Transact-SQL 指令碼複製並貼入其中一個查詢視窗中,然後執行此指令碼。 在步驟 4 中新增資料列之前,表格 Production.Location 有 14 列。

    -- Verify row count at start
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    
  4. 將下列兩個 Transact-SQL 指令碼複製並分別貼入這兩個查詢視窗中。 適當地修改儲存體帳戶名稱以及您在第 1 節中所指定容器的 URL,然後分別在這兩個查詢視窗中同時執行這些指令碼。 這些指令碼需要幾分鐘才能完成。

    -- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2022 database in batches of 75
    DECLARE @count AS INT = 1, @inner AS INT;
    
    WHILE @count < 400
        BEGIN
            BEGIN TRANSACTION;
            SET @inner = 1;
            WHILE @inner <= 75
                BEGIN
                    INSERT INTO AdventureWorks2022.Production.Location (
                        Name,
                        CostRate,
                        Availability,
                        ModifiedDate
                    )
                    VALUES (NEWID(), .5, 5.2, GETDATE());
                    SET @inner = @inner + 1;
                END
            COMMIT TRANSACTION;
            WAITFOR DELAY '00:00:01';
            SET @count = @count + 1;
        END
    
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    
    --take 7 transaction log backups with FILE_SNAPSHOT, one per minute, and include the row count and the execution time in the backup file name
    DECLARE @count INT=1, @device NVARCHAR(120), @numrows INT;
    WHILE @count <= 7
       BEGIN
             SET @numrows = (SELECT COUNT (*) FROM AdventureWorks2022.Production.Location);
             SET @device = 'https://<storage-account>.blob.core.windows.net/<container-name>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak';
             BACKUP LOG AdventureWorks2022 TO URL = @device WITH FILE_SNAPSHOT;
             SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
          WAITFOR DELAY '00:1:00';
             SET @count = @count + 1;
       END;
    
  5. 檢閱第一個指令碼的輸出,並注意現在最後的資料列計數是 29,939。

    SSMS 的螢幕擷取畫面,顯示資料列計數為 29,939 的結果集。

  6. 檢閱第二個指令碼的輸出,並注意每次執行陳述式時 BACKUP LOG ,都會建立兩個新的檔案快照集,一個記錄檔的檔案快照集,以及一個資料檔的檔案快照集,每個資料庫檔案總共有兩個檔案快照集。 第二個指令碼完成之後,請注意現在總共有 16 個檔案快照集,每個資料庫檔案 8 個 - 一個來自 BACKUP DATABASE 陳述式,一個用於陳述式的執行 BACKUP LOG

    SSMS 的螢幕擷取畫面,顯示備份快照集歷程記錄的結果集。

  7. 在物件總管中,連接到 Azure 儲存體。

  8. 展開 [容器],然後展開您在第 1 節所建立的容器,確認其中出現七個新的備份檔案和先前章節的資料檔案 (可視需要重新整理節點)。

    SSMS 中物件總管的螢幕擷取畫面,其中包含 Azure 容器中的多個快照集。

7 - 將資料庫還原至某個時間點

在本節中,您會將 AdventureWorks2025 資料庫還原至兩個交易記錄備份之間的時間點。

使用傳統備份時,為了完成時間點還原,您必須使用完整資料庫備份 (可能是差異備份),以及您想要還原的時間點之前及剛好超過此時間點的所有交易記錄檔。 使用檔案快照備份時,您只需要兩個相鄰的記錄備份檔案,這些檔案可以界定您希望還原到的時間範圍。 您只需要兩個記錄檔案快照集備份組,因為每個記錄備份都會建立每個資料庫檔案的檔案快照集 (每個資料檔案和記錄檔)。

若要將資料庫從檔案快照集備份組還原至指定的時間點,請遵循下列步驟:

  1. 啟動 SSMS。

  2. 開啟新的查詢視窗,並連線到您 Azure 虛擬機器中資料庫引擎的 SQL Server 執行個體。

  3. 將下列 Transact-SQL 指令碼複製並貼入查詢視窗中,然後執行此指令碼。 確認 Production.Location 資料表有 29,939 個資料列,再將它還原至步驟 4 中有較少資料列的時間點。

    -- Verify row count at start
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    

    SSMS 結果的螢幕擷取畫面,顯示資料列計數為 29,939。

  4. 將下列 Transact-SQL 指令碼複製並貼入 [查詢] 視窗中。 選取兩個相鄰的記錄備份檔案,並將檔案名稱轉換為此指令碼所需的日期和時間。 針對您的儲存體帳戶名稱和您在第 1 節中指定的容器適當地修改 URL。 提供第一個和第二個備份檔名,以 的STOPAT格式提供June 26, 2018 01:48 PM時間,然後執行此腳本。 需要幾分鐘才能完成。

    -- restore and recover to a point in time between the times of two transaction log backups, and then verify the row count
    ALTER DATABASE AdventureWorks2022
        SET SINGLE_USER
        WITH ROLLBACK IMMEDIATE;
    
    RESTORE DATABASE AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<firstbackupfile>.bak'
        WITH NORECOVERY, REPLACE;
    
    RESTORE LOG AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<secondbackupfile>.bak'
        WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM';
    
    ALTER DATABASE AdventureWorks2022
        SET MULTI_USER;
    
    -- get new count
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    
  5. 檢查輸出。 還原後,資料列計數為 18,389,這是記錄備份 5 和 6 之間的資料列計數數字 (您的資料列計數可能會有所不同)。

    18,000 行的屏幕截圖。

8 - 從記錄備份還原為新的資料庫

在本節中,您會從檔案快照集事務歷史記錄備份將資料庫還原 AdventureWorks2025 為新的資料庫。

在此案例中,您會在不同的虛擬機上執行 SQL Server 實例的還原,以便進行商務分析和報告。 將資料還原至不同虛擬機器上的另一個執行個體,能夠將工作負載卸載到專門為此目的而設計並調整大小的虛擬機器上,從而解除交易系統的資源需求。

使用檔案快照備份從交易記錄備份還原速度很快,比傳統串流備份快得多。 使用傳統串流備份時,您必須使用完整資料庫備份,可能是差異備份,以及部分或全部交易記錄備份 (或新的完整資料庫備份)。 不過,使用檔案快照日誌備份時,您只需要最新的日誌備份(或任何其他日誌備份,或者任意兩個相鄰的日誌備份,以將系統還原至兩個日誌備份時間之間的某個特定時間點)。 明確來說,您只需要一個日誌檔案快照備份組,因為每次檔案快照日誌備份都會為每個資料庫檔案(包括每個資料檔和日誌檔)建立檔案快照。

若要使用檔案快照集備份從交易記錄備份將資料庫還原到新的資料庫,請執行下列步驟︰

  1. 啟動 SSMS。

  2. 開啟新的查詢視窗,並連接到 Azure 虛擬機器中資料庫引擎的 SQL Server 執行個體。

    如果這是與您之前用於先前章節不同的 Azure 虛擬機器,請確定您遵循 2 - 使用共用存取簽章建立 SQL Server 認證中的步驟進行。 若您想要還原到不同容器,請遵循 1 - 建立預存存取原則和共用存取儲存體中的步驟。

  3. 將下列 Transact-SQL 指令碼複製並貼入 [查詢] 視窗中。 選取您想要使用的記錄備份檔案。 適當地修改儲存體帳戶名稱以及您在第 1 節中所指定容器的 URL,並提供記錄備份檔案名稱,然後執行此指令碼。

    -- restore as a new database from a transaction log backup file
    RESTORE DATABASE AdventureWorks2022_EOM
        FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<logbackupfile.bak>'
    WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Data.mdf',
         MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Log.ldf',
         RECOVERY;
         --, REPLACE
    
  4. 請檢閱輸出,確認還原成功。

  5. 在物件總管中,連接到 Azure 儲存體。

  6. 展開 [容器],展開您在第 1 節所建立的容器 (必要時,請重新整理),確認新資料和記錄檔案與先前章節的 Blob 一同出現在該容器中。

    SQL Server Management Studio Azure 容器儲存體瀏覽器的螢幕擷取畫面,其中顯示新資料庫的資料和記錄檔。

9 - 管理備份組和檔案快照集備份

在本節中,您會使用 sp_delete_backup 系統預存程式刪除備份集。 這個系統預存程序會刪除備份檔案以及與這個備份組相關聯的每個資料庫檔案上的檔案快照集。

備註

如果您嘗試從 Azure Blob 記憶體容器刪除備份文件來刪除備份集,則只會刪除備份檔本身 - 相關聯的檔案快照集仍會保留。 如果您在此案例中找到自己,請使用 sys.fn_db_backup_file_snapshots 系統函式來識別孤立檔案快照集的 URL,並使用 sp_delete_backup_file_snapshot 系統預存程式刪除每個孤立的檔案快照集。 如需詳細資訊,請參閱 Azure 中資料庫檔案的檔案快照集備份

若要刪除檔案快照集備份組,請遵循下列步驟:

  1. 啟動 SSMS。

  2. 開啟新的查詢視窗,並連接到您的 Azure 虛擬機器中資料庫引擎的 SQL Server 執行個體 (或具有這個容器之讀取和寫入權限的任何 SQL Server 執行個體)。

  3. 將下列 Transact-SQL 指令碼複製並貼入 [查詢] 視窗中。 選擇您想要刪除的記錄備份與其相關聯的檔案快照集。 適當地修改儲存體帳戶名稱以及您在第 1 節中所指定容器的 URL,並提供記錄備份檔案名稱,然後執行此指令碼。

    EXECUTE sys.sp_delete_backup 'https://<storage-account>.blob.core.windows.net/<container-name>/tutorial-21764-20181003205236.bak';
    
  4. 在物件總管中,連接到 Azure 儲存體。

  5. 展開 容器,然後展開您在第 1 部分中建立的容器,確認您在步驟 3 中使用的備份檔案不再出現在此容器中(必要時,請重新整理節點)。

    SQL Server Management Studios 儲存器瀏覽器的螢幕快照,其中顯示 Azure 容器和刪除事務歷史記錄備份 Blob。

  6. 將下列 Transact-SQL 指令碼複製並貼入查詢視窗中,然後執行此指令碼,確認已刪除兩個檔案快照集。

    -- verify that two file snapshots have been removed
    SELECT *
    FROM sys.fn_db_backup_file_snapshots('AdventureWorks2022');
    

    SSMS 結果窗格的螢幕快照,其中顯示已刪除兩個檔案快照集。

10 - 移除資源

當您完成本教學課程後,若要節省資源,請務必刪除在本教學課程中建立的資源群組。

若要刪除資源群組,請執行下列 PowerShell 程式碼:

# Define global variables for the script
$prefixName = '<prefix name>' # should be the same as the beginning of the tutorial

# Set a variable for the name of the resource group you will create or use
$resourceGroupName = $prefixName + 'rg'

# Adds an authenticated Azure account for use in the session
Connect-AzAccount

# Set the tenant, subscription and environment for use in the rest of
Set-AzContext -SubscriptionId $subscriptionID

# Remove the resource group
Remove-AzResourceGroup -Name $resourceGroupName