![是否可以对 Azure 中的数据库进行快照?](https://linux22.com/image/708762/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%AF%B9%20Azure%20%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9B%E8%A1%8C%E5%BF%AB%E7%85%A7%EF%BC%9F.png)
因此,需要澄清的是,我知道我可以使用为数据库编写的、对 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_copies
。sys.dm_operation_status
替代方法:
另一种更安全的选择是使用 Azure SQL 的内置时间点恢复将数据库“还原”到新的单独数据库 - 这样您就可以确定数据库的确切日期和时间 - 但它仍然不是即时快照。
原始(且不正确)答案:
是的,你可以 - 尽管微软将其称为复制或拷贝现有 Azure SQL 数据库的过程。源数据库已快照在创建副本时 - 因此在数据库复制完成之前对源数据库的任何进一步写入都不会包含在最终副本中,就像使用卷影复制的本地 SQL Server 快照的工作方式一样。
此处记录了这一点:https://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy
数据库副本是复制请求时源数据库的快照。
数据库副本是源数据库的事务一致的快照自发起复制请求后的某个时间点起。
您可以通过不同的方式实现此目的:
请注意,由于数据库的副本是单独的数据库实例,因此您必须为该副本付费 - 但至少可以对数据库副本使用不同的定价层。
使用 Azure 门户:
使用 PowerShell:
New-AzureRmSqlDatabaseCopy -ResourceGroupName "myResourceGroup" `
-ServerName $sourceserver `
-DatabaseName "MySampleDatabase" `
-CopyResourceGroupName "myResourceGroup" `
-CopyServerName $targetserver `
-CopyDatabaseName "CopyOfMySampleDatabase"
使用 T-SQL:
首先,运行此命令发起复制操作:
CREATE DATABASE Database2 AS COPY OF Database1;
上述命令将在与源数据库相同的 Azure SQL“服务器”中创建副本。根据我的经验,无论数据库的定价层大小如何,此步骤大约需要 40-50 秒才能完成。
您还可以通过连接到目标目的地服务器并运行此命令:
CREATE DATABASE Database2 AS COPY OF server1.Database1;
...其中
server1
是已配置的外部数据源。请参见本文了解更多详细信息和说明,例如重新映射登录。虽然上述命令将在约 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
列将仅显示50
或100
。要获得稍微更准确的进度信息,请使用
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 DATABASE
last_modify_timeand a
start_time`about 40-50 seconds after
。
- 使用
TERMINATE CONTINUOUS DATABASE COPY
- 在 和
start_time
之间last_modify_time
相隔几秒,复制就完成了,这将在 之后大约 6-7CREATE DATABASE COPY
分钟start_time
。
- 在 和