SQL Server学习笔记:备份与恢复
2018年4月5日 · 1394 字
学习背景
在上一篇笔记中,我学习了SQL Server的索引和视图。今天的学习主题是SQL Server的备份和恢复,这是数据库管理的重要组成部分,能够确保数据的安全性和可靠性。
备份概述
1. 备份的重要性
备份是数据库管理的关键环节,它具有以下重要性:
- 防止数据丢失:保护数据免受意外删除、硬件故障、自然灾害等影响
- 支持灾难恢复:在发生灾难时快速恢复数据
- 支持数据迁移:在不同服务器之间移动数据
- 支持测试和开发:为测试和开发环境提供数据副本
2. 备份类型
完整备份
- 备份整个数据库的所有数据和对象
- 包含足够的日志记录,使数据库在恢复后保持一致
- 是其他备份类型的基础
差异备份
- 备份自上次完整备份以来更改的数据
- 比完整备份小,备份速度快
- 恢复时需要先恢复完整备份,再恢复差异备份
事务日志备份
- 备份自上次事务日志备份以来的事务日志记录
- 支持将数据库恢复到特定时间点
- 用于实现完整恢复模式
文件和文件组备份
- 备份数据库的特定文件或文件组
- 适用于大型数据库,减少备份时间和空间
- 恢复时可以只恢复特定文件或文件组
3. 恢复模式
简单恢复模式
- 不保留所有事务日志记录
- 事务日志会自动截断
- 无法将数据库恢复到特定时间点
- 适用于对数据安全性要求不高的环境
完整恢复模式
- 保留所有事务日志记录
- 支持将数据库恢复到特定时间点
- 需要定期备份事务日志
- 适用于对数据安全性要求高的环境
大容量日志恢复模式
- 是完整恢复模式的变体
- 对大容量操作使用最小日志记录
- 提高大容量操作的性能
- 但可能会限制时间点恢复的能力
备份操作
1. 使用SQL Server Management Studio (SSMS)备份
- 打开SSMS,连接到SQL Server实例
- 展开"数据库"节点
- 右键单击要备份的数据库,选择"任务" > "备份..."
- 在"备份数据库"对话框中,选择备份类型和目标
- 点击"确定"执行备份
2. 使用T-SQL备份
完整备份
BACKUP DATABASE TestDB
TO DISK = 'D:\SQLBackups\TestDB_Full.bak'
WITH DESCRIPTION = '完整备份',
COMPRESSION;
GO
差异备份
BACKUP DATABASE TestDB
TO DISK = 'D:\SQLBackups\TestDB_Diff.bak'
WITH DIFFERENTIAL,
DESCRIPTION = '差异备份',
COMPRESSION;
GO
事务日志备份
BACKUP LOG TestDB
TO DISK = 'D:\SQLBackups\TestDB_Log.trn'
WITH DESCRIPTION = '事务日志备份',
COMPRESSION;
GO
3. 备份策略
- 完整备份:每周执行一次
- 差异备份:每天执行一次
- 事务日志备份:每小时执行一次
- 文件备份:对于大型数据库,每周执行一次文件备份
恢复操作
1. 使用SQL Server Management Studio (SSMS)恢复
- 打开SSMS,连接到SQL Server实例
- 右键单击"数据库"节点,选择"还原数据库..."
- 在"还原数据库"对话框中,选择要还原的备份集
- 点击"确定"执行恢复
2. 使用T-SQL恢复
完整恢复
RESTORE DATABASE TestDB
FROM DISK = 'D:\SQLBackups\TestDB_Full.bak'
WITH REPLACE,
RECOVERY;
GO
完整备份 + 差异备份恢复
-- 恢复完整备份(使用NORECOVERY)
RESTORE DATABASE TestDB
FROM DISK = 'D:\SQLBackups\TestDB_Full.bak'
WITH NORECOVERY;
-- 恢复差异备份(使用RECOVERY)
RESTORE DATABASE TestDB
FROM DISK = 'D:\SQLBackups\TestDB_Diff.bak'
WITH RECOVERY;
GO
完整备份 + 事务日志备份恢复
-- 恢复完整备份(使用NORECOVERY)
RESTORE DATABASE TestDB
FROM DISK = 'D:\SQLBackups\TestDB_Full.bak'
WITH NORECOVERY;
-- 恢复事务日志备份(使用NORECOVERY)
RESTORE LOG TestDB
FROM DISK = 'D:\SQLBackups\TestDB_Log1.trn'
WITH NORECOVERY;
-- 恢复最后一个事务日志备份(使用RECOVERY)
RESTORE LOG TestDB
FROM DISK = 'D:\SQLBackups\TestDB_Log2.trn'
WITH RECOVERY;
GO
时间点恢复
-- 恢复完整备份(使用NORECOVERY)
RESTORE DATABASE TestDB
FROM DISK = 'D:\SQLBackups\TestDB_Full.bak'
WITH NORECOVERY;
-- 恢复事务日志备份到特定时间点
RESTORE LOG TestDB
FROM DISK = 'D:\SQLBackups\TestDB_Log.trn'
WITH RECOVERY,
STOPAT = '2018-04-05 12:00:00';
GO
3. 恢复注意事项
- 确保有足够的磁盘空间用于恢复
- 恢复过程中数据库会处于不可用状态
- 恢复后需要验证数据的完整性
- 对于生产环境,建议在非高峰期执行恢复操作
实践练习
练习1:备份策略
- 为TestDB数据库创建完整备份
- 对数据库进行一些修改
- 创建差异备份
- 对数据库进行更多修改
- 创建事务日志备份
练习2:恢复操作
- 删除TestDB数据库
- 从完整备份恢复数据库
- 从完整备份和差异备份恢复数据库
- 从完整备份和事务日志备份恢复数据库到特定时间点
总结
通过今天的学习,我掌握了SQL Server的备份和恢复操作。备份和恢复是数据库管理的重要组成部分,能够确保数据的安全性和可靠性。在实践过程中,我了解到不同类型的备份和恢复模式适用于不同的场景,需要根据实际需求制定合适的备份策略。接下来,我将学习SQL Server的安全管理,确保数据库的安全性。