如何快速复制 (clone) 20 TB SQL Server 资料库 - 心得分享

DBA Bootcamp

几个月前,Business Intelligence 部门跑来跟 DBA 讨论,希望可以设定一个复制资料库的排程,每天将约 20 TB 的资料库复制到另一个 SQL Server 供数据科学家们 (Data Scientists) 使用。没错!是20 TB, 而且是每天的排程 (on a daily basis)。

设定 backup 与 restore 的复制排程听起来相当容易,但问题是如果使用 SQL Server 内建的复原方法, 20 TB 资料库的复制程序推算大概要花 26个小时才能完成,但每个人每一天都只有24小时,根本就不切实际。所以要达成使命,必须得借助 Storage Admin 的帮忙。

让我们想一想如何在复制程序上利用 SAN storage snapshot 的 magic。通常 Storage Admin 从 SAN 建立 volume (create a volume), 从 volume 裁切 disk luns (cut disk luns),然後附加 disk luns (attach disk luns) 到 SQL Server 的虚拟主机 (VM) 上设定为储存的空间(如 E:\ )。 Snapshot 1GB 的时间跟 snapshot 20 TB 的时间是相同的,大概需要30秒到60秒时间完成。在 Snapshot 之前,系统会将 SQL server 的 I/O 静止 (freeze the I/O), 确认储存拍照时没有任何的资料库活动运作,拍完照後再释放 I/O,让SQL Server 恢复正常使用。

了解了上述 storage 的概念後,现在把所有资料库复制程序归纳如下。

首先,建立安装 一个新的 destination (目的地) SQL server, 然後建立一个空的复制资料库,复制资料库的名称跟档案的名称与 source (来源) 资料库的名称必须一样,并设定好使用者与权限。(举例来说,使用者资料库的 MDF 跟 LDF 都在 E:.)

排程:

  1. 在 source (来源)SQL server, snapshot E:\ drive (包括 MDF 跟 LDF).

  2. 将步骤 1 得到的 snapshot 附加 (attach) 到 destination (目的地)SQL Server 覆盖取代原有的 E:.

  3. 重启 destination (目的地) SQL server service.

就这样,这个 20 TB 资料库每天的复制程序在30分钟内搞定。


<<:  [用 Python 解 LeetCode] (003) 80. Remove Duplicates from Sorted Array II

>>:  Learning How to Make a Movie

【第五天 - Fluter BottomNavigationBar(下)行为分析】

前言 今日的程序码 => GITHUB 我们在开发的时候常常会遇到几种情况 需要 Bottom...

Log Agent - Fluent Bit Output + Loki + Grafana

Fluent bit回顾 Log Agent - Fluent Bit 简介 Log Agent -...

Day 1 - Series Overview

In this series, I want to introduce some concepts ...

KSP Setup

检查 gradle 版本 把 gradle build script 改成 KTS 之後,我们可以先...

Angular 深入浅出三十天:表单与测试 Day05 - 如何写出优秀的测试?

昨天介绍了开始撰写测试之前必须要知道的二三事之後,想必大家已经对如何开始撰写测试有了一些概念,但测...