Sql-Server
SQL Server 2016 SP1 + 長期版本保留策略(快照、時態表等?)
我們有一個來自上游數據倉庫的數據集市,我們從中為外部各方生成報告。我有一個業務需求,即在每個月末保留數據庫的狀態,以確保結果的可重複性,以防我們被要求在同一時間段內進行更多分析。數據庫 <100GB,大約 40-50 個表,沒什麼太瘋狂的。
我知道 SQL 2016 SP1 中有一些有趣的新選項需要考慮。我在這裡的目標不是關於快速/輕鬆訪問前幾個月,而是更多關於數據的完整性/不變性,但是任何涵蓋後者同時在前者中領先的解決方案都會贏得這一輪。
哪種方法在這裡最有意義?
- 傳統備份:存檔到外部儲存,按需恢復。但這顯然是 DBA 方面最麻煩的,也是自助服務最少的選項。注意:由於我需要保留所有副本,因此這將是很多儲存空間。
- 數據庫快照:創建快照並無限期保留。但是我不知道有任何解決方案可以讓我保護快照本身,如果伺服器上有任何損壞,那麼您的快照就會被破壞,並且無法重現它們。但自助服務方面看起來很難被擊敗。是否有我缺少的第 3 方解決方案?
- 臨時表:2016 年很酷的新功能,有人在用嗎?重構我們的方案以支持這一點看起來像是一項繁重的工作,所以也許這不在討論範圍內。
- 根據@Max Vernon 的建議…每月恢復到只讀數據庫,可能使用 Stretch Database:這聽起來不錯,因為這將是很多冷數據…。但是有人真的在使用 Stretch Database 嗎?這是微軟會在幾年內悄悄棄用的東西嗎?
- 還有什麼我在這裡完全想念的嗎?
更新:截至 2019 年年中,Stretch Database 的起步成本相當高,僅用於 Azure 中的計算起價約為 1.8K 美元/月(儲存額外費用),所以我想說這讓所有人都望塵莫及,但更大的案例。
由於您正在處理單個數據庫(或一組已知的數據庫),因此只需創建一個 SQL Server 代理作業,將月末備份還原到“月末”數據庫。
將作業安排在每個月的第一天早些時候進行。這項工作將簡單地恢復“昨晚”的完整備份。你在做每晚的備份,對吧?
為了確保月末數據的不變性,只需在還原完成後將數據庫標記為只讀即可。像這樣的東西:
ALTER DATABASE [xyz] SET READ_ONLY WITH ROLLBACK IMMEDIATE;
上述命令的詳細資訊在此處。