是否可以对 Azure 中的数据库进行快照?

是否可以对 Azure 中的数据库进行快照?

因此,需要澄清的是,我知道我可以使用为数据库编写的、对 Azure 一无所知的工具转储数据库。

我知道我可以做进出口

我知道我可以延长时间点恢复保留DB 的期限。

但我想要的比这简单得多。我不需要能够备份到过去十年的任意时间点;我只需要正常的时间点保留期,能够对特定时刻进行快照(可能需要停机才能进行完整备份),并且那个特定的备份正常保留期结束后仍继续存在。

在 AWS 中,我使用 RDS 快照实现了这一点。我在 Google 上搜索了很多次,也阅读了 Azure 文档。这似乎是一个非常基本和基础的功能。我居然还没有找到它,这着实让我感到惊讶,但我还是相信微软,并假设他们已经实现了该功能,而我只是(不知何故)无法找到它。

答案1

据我所知,目前,Azure SQL 数据库(Paas)不支持快照。您可以选择多种方式备份 SQL 数据库,请参阅此博客:备份 Windows Azure SQL 数据库的不同方法

但对于Azure VM 上的 SQL 服务器 (Iaas),Azure VM 支持创建快照。您可以在 Azure 门户上轻松完成此操作。

在此处输入图片描述

有关 Azure VM 上的 SQL 数据库和 SQL 服务器之间的区别的更多信息,请参阅此关联

答案2

更新:

2020 年 4 月,微软更新了有关 Azure SQL 数据库复制功能的文档澄清一下Azure SQL 中的数据库副本不是即时快照

虽然数据库复制功能创建事务一致的快照,拍摄快照的时间点不是瞬时的,可能是发出数据库复制请求和未定义时间点之间的任何时间点,可能是几小时后(尽管根据我的经验。

因此,当数据库复制快照 - 您必须等待(可能要几个小时)sys.databases并确认复制已成功完成,然后才能对源数据库进行任何更改sys.dm_database_copiessys.dm_operation_status

替代方法:

另一种更安全的选择是使用 Azure SQL 的内置时间点恢复将数据库“还原”到新的单独数据库 - 这样您就可以确定数据库的确切日期和时间 - 但它仍然不是即时快照。

原始(且不正确)答案:

是的,你可以 - 尽管微软将其称为复制或拷贝现有 Azure SQL 数据库的过程。源数据库已快照在创建副本时 - 因此在数据库复制完成之前对源数据库的任何进一步写入都不会包含在最终副本中,就像使用卷影复制的本地 SQL Server 快照的工作方式一样。

此处记录了这一点:https://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy

数据库副本是复制请求时源数据库的快照。

数据库副本是源数据库的事务一致的快照自发起复制请求后的某个时间点起

您可以通过不同的方式实现此目的:

请注意,由于数据库的副本是单独的数据库实例,因此您必须为该副本付费 - 但至少可以对数据库副本使用不同的定价层。

使用 Azure 门户:

Azure 门户数据库视图的屏幕截图,其中突出显示了“复制”按钮

使用 PowerShell:

New-AzureRmSqlDatabaseCopy -ResourceGroupName "myResourceGroup" `
    -ServerName $sourceserver `
    -DatabaseName "MySampleDatabase" `
    -CopyResourceGroupName "myResourceGroup" `
    -CopyServerName $targetserver `
    -CopyDatabaseName "CopyOfMySampleDatabase"

使用 T-SQL:

  1. 首先,运行此命令发起复制操作:

    CREATE DATABASE Database2 AS COPY OF Database1;
    

    上述命令将在与源数据库相同的 Azure SQL“服务器”中创建副本。根据我的经验,无论数据库的定价层大小如何,此步骤大约需要 40-50 秒才能完成。

    您还可以通过连接到目标目的地服务器并运行此命令:

    CREATE DATABASE Database2 AS COPY OF server1.Database1;
    

    ...其中server1是已配置的外部数据源。请参见本文了解更多详细信息和说明,例如重新映射登录。

  2. 虽然上述命令将在约 40-50 秒内完成,但这仅意味着复制已开始:这并不意味着复制已完成

    您需要照看 SSMS 并每隔几分钟运行此查询以获取复制操作完成时的状态更新:

    USE [master];
    
    SELECT * FROM sys.databases;
    SELECT * FROM sys.dm_database_copies;
    SELECT * FROM sys.dm_operation_status;
    

    在第三个查询结果 ( SELECT * FROM sys.dm_operation_status) 中,您将看到operation: CREATE DATABASE COPY, stat_desc: IN_PROGRESS, percent_complete: 50。该sys.dm_operation_status.percent_complete列将仅显示50100

    要获得稍微更准确的进度信息,请使用sys.dm_database_copies.percent_complete(尽管它仍然不完全准确)。请注意,具有更高定价层的数据库将更快地执行其复制操作。新的数据库副本将具有与源数据库相同的定价层 - 因此为了加快速度,我建议将您的 DTO 或 vCore 数量调得非常高(如果您在之后立即恢复 DTO 或 vCore 数量,这不会花费您超过几美元)。如果复制数据库不会被使用,您可以在复制操作完成后安全地将其设置为 S1 层或更低层。

    根据我的经验,在同一台服务器上使用 Gen5 4x vCores 进行 50GB 大小的数据库复制,复制操作可在 7 分钟内完成- 当然你的旅费可能会改变

    请注意,您将看到两sys.dm_operation_status行:

    • CREATE DATABASE COPY
      • 使用start_time命令CREATE DATABASElast_modify_time and astart_time` about 40-50 seconds after
    • TERMINATE CONTINUOUS DATABASE COPY
      • 在 和start_time之间last_modify_time相隔几秒,复制就完成了,这将在 之后大约 6-7 CREATE DATABASE COPY分钟start_time

相关内容