引言背景
在周三的时候,总监突然找到我,叫我升级一下Sql Server,但是升级前要把数据库备份迁移一下,搞不完加班搞。
内心是崩溃的,手上还有很多个要截单的需求,
都没开发呢,就要做这种麻烦的工作……
打开数据库一看,妈妈呀,有50多个库要迁移……
想象一下手动一个个备份和迁移的工作量,这几乎是不可能在正常工作时间完成的。
所以,为了保住我的周末,为了避免无休止的加班,为了挽救我宝贵的私人时间,为了下班也能自由自在地健身……我决定要把这个过程自动化,让计算机帮我完成这项苦活!
这里记录一下我的自动化备份和迁移过程,也希望可以帮到一些需要帮助的人。
这里就要引入一个重要的工具——sqlcmd!—— SQL Server 的命令行好朋友。
SqlCmd
简介
sqlcmd
是 SQL Server 的一个强大命令行工具,允许用户执行 T-SQL 语句、管理数据库以及执行维护任务。它是自动化 SQL Server 管理任务的理想工具,可以在任何批处理文件中使用。
迁移开始
备份
首先,我们得把所有数据库打包好备份起来,放到要迁移的目标服务器的文件夹去。
一行代码,让电脑为我备份了五十个数据库,我是精通人性的程序猿:
@echo off
SETLOCAL EnableDelayedExpansion
:: 你的 SQL Server 实例名称
set serverInstance=你的实例名
:: 备份文件要放的地方,别放服务器桌面,整齐点
set backupDirectory=你的备份目录
:: 这里是要备份的数据库列表,别漏了
set databases=数据库1 数据库2 数据库3 ...
:: 检查备份目录在不在,不在就给我建一个
if not exist "%backupDirectory%" mkdir "%backupDirectory%"
:: 来吧,开始循环,一个个备份
for %%D in (%databases%) do (
set backupFile=%backupDirectory%%%D.bak
echo 正在备份 %%D...
sqlcmd -S %serverInstance% -Q "BACKUP DATABASE [%%D] TO DISK = N'!backupFile!' WITH NOFORMAT, INIT, NAME = N'%%D-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10;"
echo %%D 备份好了!
)
echo 所有数据库都备份OK了!
还原
备份完成后,可能需要在新服务器上把数据库搬家。接着来是还原脚本:
@echo off
SETLOCAL EnableDelayedExpansion
:: 目标 SQL Server 实例名称
set serverInstance=.
:: 备份文件存放的目录
set backupDirectory=你的目录
:: 数据库列表
set databases=数据库1 数据库2 ……
:: 循环数据库列表进行还原
for %%D in (%databases%) do (
set backupFile=%backupDirectory%%%D.bak
echo 正在还原数据库: %%D
sqlcmd -S %serverInstance% -Q "RESTORE DATABASE [%%D] FROM DISK = N'!backupFile!' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10;"
echo 还原完成: %%D
)
echo 所有数据库都搬完了,关灯锁门,下班走人!
结语
通过这些小小的命令行操作,你的数据库就可以安全地搬到新家了,不用加班,不用熬夜!
希望能帮助你节省宝贵的时间,让你在忙碌工作之余也能享受生活。