我注意到我不能拥有一个 SQL Server 数据库的多个快照,然后从其中一个恢复(我不相信,删除除了我想要恢复的以外的所有快照)。
有没有办法保留同一个数据库的多个快照并能够恢复到其中任何一个?
还是购买一些执行此操作的第 3 方软件或对每个版本的数据库进行完整备份的唯一方法?
我注意到我不能拥有一个 SQL Server 数据库的多个快照,然后从其中一个恢复(我不相信,删除除了我想要恢复的以外的所有快照)。
有没有办法保留同一个数据库的多个快照并能够恢复到其中任何一个?
还是购买一些执行此操作的第 3 方软件或对每个版本的数据库进行完整备份的唯一方法?
数据库快照在写时复制的基础上工作。自拍摄快照以来未更改的数据的读取操作由原始数据库中的页面完成。如果数据已更改,则会将数据的原始版本复制到快照中,以便将来的查询将使用快照中的页面。当您有多个快照时,每个快照中可能存在复杂的页面集合,具体取决于发生了多少写入活动以及其中有多少是针对相同数据的。您最终可能会得到多代数据,其中每一代都驻留在其中一个快照中。
这意味着所有快照都是单独的,与原始数据库紧密耦合。如果您使用其中一个快照恢复原始数据库,那会有效地破坏所有其他快照的耦合,因此这是不允许的。
来自存储供应商的第三方解决方案通过保留和跟踪每个快照所依赖的块来保存数据副本。这意味着您最终可能会消耗原始数据库大小数倍的存储空间,具体取决于您拥有多少快照和进行的恢复。它很快变得昂贵且非常复杂。
如果您使用多个快照来获取不同的时间点数据,建议您考虑使用 SQL Server 2016 中的时态表。