SQL Server 2016 SP1 + 长期版本保留策略(快照、时态表、其他?)

cmc*_*lan 3 sql-server best-practices snapshot temporal-tables sql-server-2016

我们有一个从上游数据仓库提供的数据集市,我们为外部各方生成报告。我有一个业务需求,要在每个月末保留数据库的状态,以确保结果的可重复性,以防我们被要求在同一时间段内进行更多分析。数据库 <100GB,大约 40-50 个表,没什么太疯狂的。

我知道 SQL 2016 SP1 中有一些有趣的新选项需要考虑。我在这里的目标不是快速/轻松访问前几个月,而是更多关于数据的完整性/不变性,但任何涵盖后者同时在前者中领先的解决方案都会赢得这一轮。

哪种方法在这里最有意义?

  1. 传统备份:存档到外部存储,根据需要恢复。但这显然是 DBA 方面最麻烦的,也是自助服务最少的选项。注意:由于我需要保留所有副本,之后这将是很多存储空间。
  2. 数据库快照:创建快照并无限期保留。但是我不知道有什么解决方案可以让我保护快照本身,如果服务器上有任何损坏,那么我的快照就会被冲洗掉,并且无法重现它们。但自助服务方面似乎很难被击败。是否有我缺少的第 3 方解决方案?
  3. 时态表:2016 年很酷的新功能,有人真的在用吗?重构我们的方案以支持这一点看起来像是一项繁重的工作,所以这可能是不可能的。
  4. 基于@Max Vernon 的建议......每月恢复到只读数据库,也许使用 Stretch Database:这听起来不错,因为这将是很多冷数据......但实际上有人使用 Stretch Database 吗?这是微软会在几年内悄悄弃用的东西吗?
  5. 我在这里完全失踪的其他东西?

更新:截至 2019 年年中,Stretch Database 的启动成本相当高,仅用于 Azure 中的计算(额外存储)的起价约为 1800 美元/月,所以我想说这使得它无法实现更大的用例。

Han*_*non 5

由于您正在处理单个数据库(或一组已知的数据库),因此只需创建一个 SQL Server 代理作业,将月末备份还原到“月末”数据库。

将作业安排在每个月的第一天早些时候进行。这项工作将简单地恢复“昨晚”的完整备份。您正在每晚进行备份,对吗?

为了保证月末数据的不变性,只需在恢复完成后将数据库标记为只读即可。像这样的东西:

ALTER DATABASE [xyz] SET READ_ONLY WITH ROLLBACK IMMEDIATE;
Run Code Online (Sandbox Code Playgroud)

上述命令的详细信息在这里