备份与恢复
数据可能因硬件故障、软件故障、病毒、误操作、自然灾害、盗窃等原因丢失或被破坏。备份就是对数据库或事务日志进行拷贝并记录数据状态,以便数据库遭破坏时能及时恢复。这篇讲备份权限、备份方式、恢复模式,以及备份/恢复的命令。
备份权限
以下角色的成员具有备份数据库的权限:
sysadmindb_ownerdb_backupoperator
备份方式
| 方式 | 内容 | 特点 | 依赖 |
|---|---|---|---|
| 完全备份 | 所有数据库及数据库对象 | 速度慢、时间长、占空间大,频率通常比其他两种低 | 无 |
| 事务日志备份 | 上次日志备份节点之后的事务日志 | 速度快、占空间少,操作复杂 | 必须有完整数据库备份 |
| 差异备份 | 当前数据库与上一次完全备份之间的差异部分 | 速度一般、时间短、占空间少,需要经常备份 | 必须有完整数据库备份 |
恢复模式
数据库的恢复模式决定了能做哪种备份、能恢复到哪个时间点:
| 恢复模式 | 说明 |
|---|---|
| 简单恢复(Simple) | 不保留事务日志(自动截断),不允许做日志备份,只能恢复到最近一次完全/差异备份 |
| 完整恢复(Full) | 完整保留事务日志,可配合日志备份恢复到任意时间点,数据安全性最高 |
| 大容量日志恢复(Bulk-logged) | 对大容量操作(如 BULK INSERT)做最小日志记录,介于简单与完整之间 |
备份设备
备份文件常用 .bak 后缀。备份设备可图形化创建,也可用 T-SQL:
-- 创建备份设备
sp_addumpdevice '磁盘类型', '备份设备逻辑名称', '备份设备物理名称'
-- 删除备份设备
EXEC sp_dropdevice '备份设备逻辑名称', 'delfile'备份命令
-- 完全备份(init 重写 / noinit 追加,默认 noinit)
BACKUP DATABASE 数据库名 TO 永久设备逻辑名 WITH INIT
BACKUP DATABASE 数据库名 TO 永久设备逻辑名 WITH NOINIT
-- 差异备份
BACKUP DATABASE 数据库名 TO 永久备份设备逻辑名 WITH DIFFERENTIAL
-- 日志备份(恢复模式为简单时不允许做日志备份)
BACKUP LOG 数据库名 TO 永久备份设备逻辑名 WITH INIT
-- 备份到临时设备
BACKUP DATABASE 数据库名 TO DISK = '物理路径'恢复命令
-- 从完全备份恢复
RESTORE DATABASE 数据库名 FROM 永久备份设备逻辑名
-- 恢复日志备份
RESTORE LOG 数据库名 FROM 永久备份设备逻辑名
-- 从临时设备恢复
RESTORE DATABASE 数据库名 FROM DISK = '物理路径'
-- 分步恢复
RESTORE DATABASE 数据库名 FROM 永久备份设备名 WITH FILE = n, RECOVERY | NORECOVERY分步恢复参数说明:
FILE = n:备份设备中的第几个文件(从 1 开始数)。RECOVERY:使数据库可以运行,但无法再还原其他事务。NORECOVERY:数据库不运行,但可以继续还原其他事务(用于先恢复完全备份、再依次恢复差异/日志备份的场景)。
查看备份文件信息:
RESTORE HEADERONLY FROM 设备名最后更新于