在 Azure SQL Edge 中備份和還原資料庫

重要

Azure SQL Edge 不再支援 ARM64 平台。

Azure SQL Edge 是以最新版的 Microsoft SQL Database 引擎為基礎所建置。 可提供備份和還原資料庫功能,類似 Linux 上的 SQL Server 和容器中執行的 SQL Server 所提供的功能。 備份和還原元件提供基本的防護措施,可保護 Azure SQL Edge 資料庫中所儲存的資料。

若要將重大資料遺失的風險降至最低,您應定期備份資料庫,以定期保存您對資料所做的修改。 規劃完善的備份和還原策略有助於保護資料庫,以防止各種失敗所導致的資料遺失。 藉由還原一組備份並復原資料庫來測試您的策略,以做好有效因應災害的準備。

若要深入了解備份為何重要,請參閱 SQL Server 資料庫的備份與還原

Azure SQL Edge 可讓您從本機儲存體和 Azure Blob 備份和還原。 如需詳細資訊,請參閱 SQL Server 備份及還原與 Azure Blob 儲存體對 URL 進行 SQL Server 備份

在 Azure SQL Edge 中備份資料庫

Azure SQL Edge 支援的備份類型和 SQL Server 支援的類型一樣。 如需完整的清單,請參閱備份概觀

重要

根據預設,Azure SQL Edge 中建立的資料庫會使用簡單復原模式。 因此,您無法在這些資料庫上執行記錄備份。 如果您需要這樣做,您需要系統管理員協助,才能將資料庫復原模式變更為完整復原模式。 如需 SQL Server 支援的復原模式完整清單,請查看復原模式概觀

備份至本機磁碟

在下列範例中,您會使用 BACKUP DATABASE Transact-SQL 命令,在容器中建立資料庫備份。 在此範例中,您會建立名為 backup 的新資料夾,用於儲存備份檔案。

  1. 建立用於備份的資料夾。 請在 Azure SQL Edge 容器執行所在的主機上執行此命令。 在下列命令中,以您部署中的 Azure SQL Edge 容器名稱取代 <AzureSQLEdge_Container_Name>

    sudo docker exec -it <AzureSQLEdge_Container_Name> mkdir /var/opt/mssql/backup
    
  2. 使用 SQL Server Management Studio (SSMS) 或使用 Azure Data Studio 連線到 Azure SQL Edge 執行個體。 執行 BACKUP DATABASE 命令以備份使用者資料庫。 在下列範例中,您會備份 IronOreSilicaPrediction 資料庫。

    BACKUP DATABASE [IronOreSilicaPrediction] TO DISK = N'/var/opt/mssql/backup/IronOrePredictDB.bak'
    WITH NOFORMAT,
        NOINIT,
        NAME = N'IronOreSilicaPrediction-Full Database Backup',
        SKIP,
        NOREWIND,
        NOUNLOAD,
        COMPRESSION,
        STATS = 10;
    GO
    
  3. 執行命令且資料庫備份成功後,您會在 SSMS 或 Azure Data Studio 的結果區段中看到類似下列的訊息。

    10 percent processed.
    20 percent processed.
    30 percent processed.
    40 percent processed.
    50 percent processed.
    60 percent processed.
    70 percent processed.
    80 percent processed.
    90 percent processed.
    100 percent processed.
    Processed 51648 pages for database 'IronOreSilicaPrediction', file 'IronOreSilicaPrediction' on file 1.
    Processed 2 pages for database 'IronOreSilicaPrediction', file 'IronOreSilicaPrediction_log' on file 1.
    BACKUP DATABASE successfully processed 51650 pages in 3.588 seconds (112.461 MB/sec).
    
    Completion time: 2020-04-09T23:54:48.4957691-07:00
    

備份至 URL

Azure SQL Edge 支援備份至分頁 Blob 和區塊 Blob。 如需詳細資訊,請參閱備份至區塊 Blob 與分頁 Blob。 在下列範例中,IronOreSilicaPrediction 資料庫會備份至區塊 Blob。

  1. 若要設定區塊 Blob 的備份,首先請產生共用存取簽章 (SAS) 權杖,以用來在 Azure SQL Edge 上建立 SQL Server 認證。 此指令碼會建立關聯到預存存取原則的 SAS。 如需詳細資訊,請參閱共用存取簽章,第 1 部分:了解 SAS 模型。 這個指令碼也會撰寫在 SQL Server 上建立認證所需的 T-SQL 命令。 下方指令碼會假設您已有 Azure 訂閱,而且其中包含用於備份的儲存體帳戶和儲存體容器。

    # Define global variables for the script
    $subscriptionName='<your subscription name>'   # the name of subscription name you will use
    $resourcegroupName = '<your resource group name>' # the name of resource group you will use
    $storageAccountName= '<your storage account name>' # the storage account name you will use for backups
    $containerName= '<your storage container name>'  # the storage container name to which you will attach the SAS policy with its SAS token
    $policyName = 'SASPolicy' # the name of the SAS policy
    
    # adds an authenticated Azure account for use in the session
    Login-AzAccount
    
    # set the tenant, subscription and environment for use in the rest of
    Select-AzSubscription -Subscription $subscriptionName
    
    # Generate the SAS token
    $sa = Get-AzStorageAccount -ResourceGroupName $resourcegroupName -Name $storageAccountName
    $storagekey = Get-AzStorageAccountKey -ResourceGroupName $resourcegroupName -Name $storageAccountName
    $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storagekey[0].Value
    $cbc = Get-AzStorageContainer -Name $containerName -Context $storageContext
    $policy = New-AzStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission "rwld"
    $sas = New-AzStorageContainerSASToken -Policy $policyName -Context $storageContext -Container $containerName
    Write-Host 'Shared Access Signature= '$($sas.Substring(1))''
    
    # 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.CloudBlobContainer.Uri.AbsoluteUri,$sas.Substring(1)
    $tSql | clip
    Write-Host $tSql
    

    成功執行指令碼之後,請將 CREATE CREDENTIAL 命令複製到查詢工具。 然後連線到 SQL Server 執行個體,再執行命令,以使用 SAS 建立認證。

  2. 使用 SSMS 或 Azure Data Studio 連線到 Azure SQL Edge 執行個體,並使用前一步驟的命令來建立認證。 請務必將 CREATE CREDENTIAL 命令取代為上一個步驟的實際輸出。

    IF NOT EXISTS
    (SELECT * FROM sys.credentials
    WHERE name = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>')
    CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>]
       WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
       SECRET = '<SAS_TOKEN>';
    
  3. 下列命令會將 IronOreSilicaPrediction 備份至 Azure 儲存體容器。

    BACKUP DATABASE IronOreSilicaPrediction
    TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/IronOreSilicaPrediction.bak'
    With MAXTRANSFERSIZE = 4194304,BLOCKSIZE=65536;
    GO
    

在 Azure SQL Edge 中還原資料庫

在 Azure SQL Edge 中,您可以從本機磁碟、網路位置或 Azure Blob 儲存體帳戶進行還原。 如需有關在 SQL Server 中還原和復原的詳細資訊,請參閱還原和復原概觀。 如需 SQL Server 中簡單復原模式的概觀,請參閱完整資料庫還原 (簡單復原模式)

重要

Azure SQL Edge 中建立的資料庫無法在 Microsoft SQL Server 或 Azure SQL 執行個體上還原。 此外,在 Microsoft SQL Server 或 Azure SQL 上建立的資料庫可以在 Azure SQL Edge 上還原,前提是資料庫不包含 Azure SQL Edge 不支援的任何功能。

從本機磁碟還原

此範例使用您在上一個範例中所做的 IronOreSilicaPrediction 備份。 現在,您會將其還原為具有不同名稱的新資料庫。

  1. 如果資料庫備份檔案尚未出現在容器中,您可以使用下列命令將檔案複製到容器中。 下列範例會假設備份檔案存在於本機主機上,而我們要將其複製到 /var/opt/mssql/backup 資料夾中,名為 sql1 的 Azure SQL Edge 容器。

    sudo docker cp IronOrePredictDB.bak sql1:/var/opt/mssql/backup
    
  2. 使用 SSMS 或 Azure Data Studio 連線至 Azure SQL Edge 執行個體,以執行還原命令。 在下列範例中,會還原 IronOrePredictDB.bak 以建立新的資料庫,IronOreSilicaPrediction_2

    Restore FilelistOnly from disk = N'/var/opt/mssql/backup/IronOrePredictDB.bak'
    
    Restore Database IronOreSilicaPrediction_2
    From disk = N'/var/opt/mssql/backup/IronOrePredictDB.bak'
    WITH MOVE 'IronOreSilicaPrediction' TO '/var/opt/mssql/data/IronOreSilicaPrediction_Primary_2.mdf',
    MOVE 'IronOreSilicaPrediction_log' TO '/var/opt/mssql/data/IronOreSilicaPrediction_Primary_2.ldf';
    
  3. 執行還原命令後,若還原作業成功,您就會在輸出視窗中看到類似下列內容的訊息。

    Processed 51648 pages for database 'IronOreSilicaPrediction_2', file 'IronOreSilicaPrediction' on file 1.
    Processed 2 pages for database 'IronOreSilicaPrediction_2', file 'IronOreSilicaPrediction_log' on file 1.
    RESTORE DATABASE successfully processed 51650 pages in 6.543 seconds (61.670 MB/sec).
    
    Completion time: 2020-04-13T23:49:21.1600986-07:00
    

從 URL 還原

Azure SQL Edge 也支援從 Azure 儲存體帳戶還原資料庫。 您可以從區塊 Blob 或分頁 Blob 備份執行還原。 在下列範例中,我們會還原區塊 Blob 上的 IronOreSilicaPrediction_2020_04_16.bak 資料庫備份檔案,然後建立 IronOreSilicaPrediction_3 資料庫。

RESTORE DATABASE IronOreSilicaPrediction_3
FROM URL = 'https://mystorageaccount.blob.core.windows.net/mysecondcontainer/IronOreSilicaPrediction_2020_04_16.bak'
WITH MOVE 'IronOreSilicaPrediction' TO '/var/opt/mssql/data/IronOreSilicaPrediction_Primary_3.mdf',
MOVE 'IronOreSilicaPrediction_log' TO '/var/opt/mssql/data/IronOreSilicaPrediction_Primary_3.ldf',
STATS = 10;