SeekCyber's Blog

SeekCyber's Blog

SQL Server学习笔记:备份与恢复

2018年4月5日 · 1394

学习背景

在上一篇笔记中,我学习了SQL Server的索引和视图。今天的学习主题是SQL Server的备份和恢复,这是数据库管理的重要组成部分,能够确保数据的安全性和可靠性。

备份概述

1. 备份的重要性

备份是数据库管理的关键环节,它具有以下重要性:

  • 防止数据丢失:保护数据免受意外删除、硬件故障、自然灾害等影响
  • 支持灾难恢复:在发生灾难时快速恢复数据
  • 支持数据迁移:在不同服务器之间移动数据
  • 支持测试和开发:为测试和开发环境提供数据副本

2. 备份类型

完整备份

  • 备份整个数据库的所有数据和对象
  • 包含足够的日志记录,使数据库在恢复后保持一致
  • 是其他备份类型的基础

差异备份

  • 备份自上次完整备份以来更改的数据
  • 比完整备份小,备份速度快
  • 恢复时需要先恢复完整备份,再恢复差异备份

事务日志备份

  • 备份自上次事务日志备份以来的事务日志记录
  • 支持将数据库恢复到特定时间点
  • 用于实现完整恢复模式

文件和文件组备份

  • 备份数据库的特定文件或文件组
  • 适用于大型数据库,减少备份时间和空间
  • 恢复时可以只恢复特定文件或文件组

3. 恢复模式

简单恢复模式

  • 不保留所有事务日志记录
  • 事务日志会自动截断
  • 无法将数据库恢复到特定时间点
  • 适用于对数据安全性要求不高的环境

完整恢复模式

  • 保留所有事务日志记录
  • 支持将数据库恢复到特定时间点
  • 需要定期备份事务日志
  • 适用于对数据安全性要求高的环境

大容量日志恢复模式

  • 是完整恢复模式的变体
  • 对大容量操作使用最小日志记录
  • 提高大容量操作的性能
  • 但可能会限制时间点恢复的能力

备份操作

1. 使用SQL Server Management Studio (SSMS)备份

  1. 打开SSMS,连接到SQL Server实例
  2. 展开"数据库"节点
  3. 右键单击要备份的数据库,选择"任务" > "备份..."
  4. 在"备份数据库"对话框中,选择备份类型和目标
  5. 点击"确定"执行备份

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)恢复

  1. 打开SSMS,连接到SQL Server实例
  2. 右键单击"数据库"节点,选择"还原数据库..."
  3. 在"还原数据库"对话框中,选择要还原的备份集
  4. 点击"确定"执行恢复

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:备份策略

  1. 为TestDB数据库创建完整备份
  2. 对数据库进行一些修改
  3. 创建差异备份
  4. 对数据库进行更多修改
  5. 创建事务日志备份

练习2:恢复操作

  1. 删除TestDB数据库
  2. 从完整备份恢复数据库
  3. 从完整备份和差异备份恢复数据库
  4. 从完整备份和事务日志备份恢复数据库到特定时间点

总结

通过今天的学习,我掌握了SQL Server的备份和恢复操作。备份和恢复是数据库管理的重要组成部分,能够确保数据的安全性和可靠性。在实践过程中,我了解到不同类型的备份和恢复模式适用于不同的场景,需要根据实际需求制定合适的备份策略。接下来,我将学习SQL Server的安全管理,确保数据库的安全性。