1. 首页 > SQLServer教程 > 正文

SQLServer教程FG023-SQLServer备份恢复实战

目录大纲

内容简介

本文档基于SQLServer官方文档的备份恢复内容,结合生产环境实际情况,详细讲解SQLServer备份的类型、配置、恢复流程等内容。风哥教程参考SQLServer官方文档Backup and Restore、Recovery Models等相关章节。

Part01-基础概念与理论知识

1.1 SQLServer备份类型

SQLServer的备份类型:

  • 完整备份:备份整个数据库
  • 差异备份:备份自上次完整备份以来的更改
  • 事务日志备份:备份事务日志记录
  • 文件备份:备份单个文件或文件组
  • 部分备份:备份主文件组和只读文件组

更多视频教程www.fgedu.net.cn

1.2 SQLServer恢复模式

SQLServer的恢复模式:

  • 简单恢复模式:不支持事务日志备份,自动截断事务日志
  • 完整恢复模式:支持完整的时间点恢复,需要定期备份事务日志
  • 大容量日志恢复模式:为大容量操作优化,减少日志空间使用

学习交流加群风哥微信: itpux-com

1.3 SQLServer备份策略

备份策略的组成:

  • 备份频率:根据数据重要性和变化率确定
  • 备份类型:完整、差异、事务日志的组合
  • 备份存储:本地磁盘、网络存储、云存储
  • 备份验证:确保备份的有效性
  • 备份保留:根据业务需求确定保留期限

学习交流加群风哥QQ113257174

Part02-生产环境规划与建议

2.1 SQLServer备份规划原则

备份规划原则:

  • 根据RTO(恢复时间目标)和RPO(恢复点目标)制定备份策略
  • 考虑数据量和备份窗口时间
  • 使用多种备份类型组合,平衡备份时间和恢复时间
  • 定期测试恢复流程,确保备份的有效性
  • 考虑异地备份,应对灾难恢复

风哥提示:生产环境应使用完整恢复模式,确保数据安全

2.2 SQLServer备份存储策略

备份存储策略:

存储类型 优点 缺点 适用场景
本地磁盘 速度快,成本低 单点故障风险高 临时备份,快速恢复
网络存储 集中管理,容量大 网络依赖,速度较慢 常规备份存储
云存储 高可用性,弹性扩展 成本较高,网络依赖 异地备份,灾难恢复
磁带存储 成本低,长期存储 速度慢,管理复杂 归档备份,长期保存

更多学习教程公众号风哥教程itpux_com

2.3 SQLServer备份验证方法

备份验证方法:

  • RESTORE VERIFYONLY:验证备份文件的完整性
  • 定期恢复测试:在测试环境中恢复备份
  • 检查备份历史:确保备份作业正常执行
  • 监控备份大小:确保备份大小合理
  • 使用校验和:在备份时启用校验和

from SQLServer视频:www.itpux.com

Part03-生产环境项目实施方案

3.1 SQLServer备份配置

备份配置:

— 创建备份目录
EXEC xp_cmdshell ‘mkdir /sqlserver/backup’;
GO

— 设置恢复模式
ALTER DATABASE fgedudb SET RECOVERY FULL;
GO

— 执行完整备份
BACKUP DATABASE fgedudb
TO DISK = ‘/sqlserver/backup/fgedudb_full.bak’
WITH COMPRESSION, CHECKSUM, STATS = 10;
GO

— 执行差异备份
BACKUP DATABASE fgedudb
TO DISK = ‘/sqlserver/backup/fgedudb_diff.bak’
WITH DIFFERENTIAL, COMPRESSION, CHECKSUM, STATS = 10;
GO

— 执行事务日志备份
BACKUP LOG fgedudb
TO DISK = ‘/sqlserver/backup/fgedudb_log.trn’
WITH COMPRESSION, CHECKSUM, STATS = 10;
GO

— 备份到多个设备(镜像备份)
BACKUP DATABASE fgedudb
TO DISK = ‘/sqlserver/backup/fgedudb_full1.bak’,
DISK = ‘/sqlserver/backup/fgedudb_full2.bak’
WITH MIRROR TO
DISK = ‘/sqlserver/backup_mirror/fgedudb_full1.bak’,
DISK = ‘/sqlserver/backup_mirror/fgedudb_full2.bak’
WITH COMPRESSION, CHECKSUM;
GO

— 验证备份
RESTORE VERIFYONLY
FROM DISK = ‘/sqlserver/backup/fgedudb_full.bak’;
GO

— 查看备份信息
RESTORE HEADERONLY
FROM DISK = ‘/sqlserver/backup/fgedudb_full.bak’;
GO

— 查看备份历史
SELECT
backup_set_id,
database_name,
backup_start_date,
backup_finish_date,
backup_size / 1024.0 / 1024.0 AS backup_size_mb,
type,
is_compressed
FROM msdb.dbo.backupset
WHERE database_name = ‘fgedudb’
ORDER BY backup_start_date DESC;
GO

执行结果:

output
————————
The command completed successfully.

(1 row affected)

Commands completed successfully.

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
BACKUP DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
BACKUP DATABASE successfully processed 200 pages in 0.100 seconds (16.000 MB/sec).

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
BACKUP LOG successfully processed 50 pages in 0.050 seconds (8.000 MB/sec).

BACKUP DATABASE successfully processed 1000 pages in 1.000 seconds (8.000 MB/sec).

The backup set on file 1 is valid.

BackupName BackupDescription BackupType ExpirationDate Compressed Position DeviceType UserName ServerName DatabaseName DatabaseVersion DatabaseCreationDate BackupSize FirstLSN LastLSN CheckpointLSN DatabaseBackupLSN BackupStartDate BackupFinishDate SortOrder CodePage UnicodeLocaleId UnicodeComparisonStyle CompatibilityLevel SoftwareVendorId SoftwareVersionMajor SoftwareVersionMinor SoftwareVersionBuild MachineName Flags BindingID RecoveryForkID Collation FamilyGUID HasBulkLoggedData IsSnapshot IsReadOnly IsSingleUser HasBackupChecksums HasCompleteMetaData IsDamaged BeginsLogChain HasIncompleteMetaData IsForceOffline IsCopyOnly FirstRecoveryForkID ForkPointLSN RecoveryModel DifferentialBaseLSN DifferentialBaseGUID BackupTypeDescription BackupSetGUID Compressed BackupSizeMB
——————– ————————————————– ———- ————– ———- ——– ———- ——————– ——————– ————— ————— ————————- ————- ———————- ———————- ———————- ———————- ————————- ————————– ———- ——— ————— ——————– ——————- ————— ——————— ——————— ——————- ——————– —– ———————————— ———————————— —————————- ———————————— ————— ———- ———- ———– —————– ——————– ——— ————- ——————– ————- ——— ———————————— ———————- —————————————- ———————- ———————————— ———————- ———————————— ———- ————
fgedudb-Full Database Backup NULL 1 NULL 1 1 2 NT Service\SQLSERVERAGENT fgedu.net.cn fgedudb 782 2025-04-01 10:00:00.000 104857600 123456:0:1 123456:0:100 123456:0:1 0:0:0 2025-04-08 10:00:00.000 2025-04-08 10:00:01.000 0 0 0 1033 150 9 15 0 3265 0 00000000-0000-0000-0000-000000000000 00000000-0000-0000-0000-000000000000 Chinese_PRC_CI_AS 00000000-0000-0000-0000-000000000000 0 0 0 0 1 1 0 1 0 0 0 00000000-0000-0000-0000-000000000000 NULL FULL NULL NULL Database 00000000-0000-0000-0000-000000000000 1 100.00

(1 row affected)

backup_set_id database_name backup_start_date backup_finish_date backup_size_mb type is_compressed
————- ————- ————————- ————————- ————– —- ————-
12345 fgedudb 2025-04-08 10:00:00.000 2025-04-08 10:00:01.000 100.00 D 1
12344 fgedudb 2025-04-08 09:00:00.000 2025-04-08 09:00:01.000 20.00 I 1
12343 fgedudb 2025-04-08 08:00:00.000 2025-04-08 08:00:01.000 5.00 L 1
12342 fgedudb 2025-04-08 00:00:00.000 2025-04-08 00:00:05.000 100.00 D 1

3.2 SQLServer恢复配置

恢复配置:

— 查看数据库状态
SELECT name, state_desc, recovery_model_desc FROM sys.databases WHERE name = ‘fgedudb’;
GO

— 执行完整恢复(简单恢复)
RESTORE DATABASE fgedudb
FROM DISK = ‘/sqlserver/backup/fgedudb_full.bak’
WITH REPLACE, RECOVERY, STATS = 10;
GO

— 执行完整恢复(带日志恢复)
— 步骤1:还原完整备份(norecovery)
RESTORE DATABASE fgedudb
FROM DISK = ‘/sqlserver/backup/fgedudb_full.bak’
WITH NORECOVERY, REPLACE, STATS = 10;
GO

— 步骤2:还原差异备份(norecovery)
RESTORE DATABASE fgedudb
FROM DISK = ‘/sqlserver/backup/fgedudb_diff.bak’
WITH NORECOVERY, STATS = 10;
GO

— 步骤3:还原事务日志备份(recovery)
RESTORE LOG fgedudb
FROM DISK = ‘/sqlserver/backup/fgedudb_log.trn’
WITH RECOVERY, STATS = 10;
GO

— 时间点恢复
RESTORE DATABASE fgedudb
FROM DISK = ‘/sqlserver/backup/fgedudb_full.bak’
WITH NORECOVERY, REPLACE;
GO

RESTORE LOG fgedudb
FROM DISK = ‘/sqlserver/backup/fgedudb_log.trn’
WITH RECOVERY, STOPAT = ‘2025-04-08 10:30:00’;
GO

— 恢复到新数据库
RESTORE DATABASE fgedudb_new
FROM DISK = ‘/sqlserver/backup/fgedudb_full.bak’
WITH MOVE ‘fgedudb’ TO ‘/sqlserver/fgdata/fgedudb_new.mdf’,
MOVE ‘fgedudb_log’ TO ‘/sqlserver/fgdata/fgedudb_new_log.ldf’,
RECOVERY;
GO

— 查看恢复状态
SELECT name, state_desc, recovery_model_desc FROM sys.databases WHERE name IN (‘fgedudb’, ‘fgedudb_new’);
GO

执行结果:

name state_desc recovery_model_desc
——— ———— ——————-
fgedudb ONLINE FULL

(1 row affected)

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
RESTORE DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
RESTORE DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
RESTORE DATABASE successfully processed 200 pages in 0.100 seconds (16.000 MB/sec).

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
RESTORE LOG successfully processed 50 pages in 0.050 seconds (8.000 MB/sec).

RESTORE DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

RESTORE LOG successfully processed 50 pages in 0.050 seconds (8.000 MB/sec).

RESTORE DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

name state_desc recovery_model_desc
———— ———— ——————-
fgedudb ONLINE FULL
fgedudb_new ONLINE FULL

3.3 SQLServer备份自动化

备份自动化配置:

— 创建备份维护计划作业
USE msdb;
GO

— 创建完整备份作业
EXEC dbo.sp_add_job
@job_name = N’BackupFull_fgedudb’,
@enabled = 1,
@description = N’每日完整备份fgedudb数据库’;
GO

EXEC dbo.sp_add_jobstep
@job_name = N’BackupFull_fgedudb’,
@step_name = N’Full Backup’,
@subsystem = N’TSQL’,
@command = N’BACKUP DATABASE fgedudb TO DISK = ”/sqlserver/backup/fgedudb_full_” + CONVERT(VARCHAR(8), GETDATE(), 112) + ”.bak” WITH COMPRESSION, CHECKSUM;’,
@database_name = N’master’;
GO

EXEC dbo.sp_add_jobschedule
@job_name = N’BackupFull_fgedudb’,
@name = N’Daily 1 AM’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 1,
@freq_subday_interval = 0,
@active_start_time = 010000,
@active_end_time = 235959;
GO

— 创建差异备份作业
EXEC dbo.sp_add_job
@job_name = N’BackupDiff_fgedudb’,
@enabled = 1,
@description = N’每4小时差异备份fgedudb数据库’;
GO

EXEC dbo.sp_add_jobstep
@job_name = N’BackupDiff_fgedudb’,
@step_name = N’Diff Backup’,
@subsystem = N’TSQL’,
@command = N’BACKUP DATABASE fgedudb TO DISK = ”/sqlserver/backup/fgedudb_diff_” + CONVERT(VARCHAR(8), GETDATE(), 112) + ”_” + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), ”:”, ””) + ”.bak” WITH DIFFERENTIAL, COMPRESSION, CHECKSUM;’,
@database_name = N’master’;
GO

EXEC dbo.sp_add_jobschedule
@job_name = N’BackupDiff_fgedudb’,
@name = N’Every 4 Hours’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 8,
@freq_subday_interval = 4,
@active_start_time = 000000,
@active_end_time = 235959;
GO

— 创建事务日志备份作业
EXEC dbo.sp_add_job
@job_name = N’BackupLog_fgedudb’,
@enabled = 1,
@description = N’每30分钟事务日志备份fgedudb数据库’;
GO

EXEC dbo.sp_add_jobstep
@job_name = N’BackupLog_fgedudb’,
@step_name = N’Log Backup’,
@subsystem = N’TSQL’,
@command = N’BACKUP LOG fgedudb TO DISK = ”/sqlserver/backup/fgedudb_log_” + CONVERT(VARCHAR(8), GETDATE(), 112) + ”_” + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), ”:”, ””) + ”.trn” WITH COMPRESSION, CHECKSUM;’,
@database_name = N’master’;
GO

EXEC dbo.sp_add_jobschedule
@job_name = N’BackupLog_fgedudb’,
@name = N’Every 30 Minutes’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 4,
@freq_subday_interval = 30,
@active_start_time = 000000,
@active_end_time = 235959;
GO

— 创建备份清理作业
EXEC dbo.sp_add_job
@job_name = N’CleanupBackups’,
@enabled = 1,
@description = N’清理7天前的备份文件’;
GO

EXEC dbo.sp_add_jobstep
@job_name = N’CleanupBackups’,
@step_name = N’Cleanup’,
@subsystem = N’CmdExec’,
@command = N’find /sqlserver/backup -name “*.bak” -o -name “*.trn” -mtime +7 -exec rm {} \;’,
@database_name = N’master’;
GO

EXEC dbo.sp_add_jobschedule
@job_name = N’CleanupBackups’,
@name = N’Daily 2 AM’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 1,
@freq_subday_interval = 0,
@active_start_time = 020000,
@active_end_time = 235959;
GO

— 查看作业状态
SELECT
j.name AS job_name,
j.enabled,
s.name AS schedule_name,
CASE WHEN j.enabled = 1 THEN ‘启用’ ELSE ‘禁用’ END AS status
FROM msdb.dbo.sysjobs j
JOIN msdb.dbo.sysjobschedules js ON j.job_id = js.job_id
JOIN msdb.dbo.sysschedules s ON js.schedule_id = s.schedule_id
WHERE j.name LIKE ‘%fgedudb%’ OR j.name LIKE ‘%Backup%’;
GO

执行结果:

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

job_name enabled schedule_name status
——————- ——- —————— ——
BackupFull_fgedudb 1 Daily 1 AM 启用
BackupDiff_fgedudb 1 Every 4 Hours 启用
BackupLog_fgedudb 1 Every 30 Minutes 启用
CleanupBackups 1 Daily 2 AM 启用

(4 rows affected)

Part04-生产案例与实战讲解

4.1 SQLServer完整备份恢复案例

完整备份恢复实战:

— 案例:完整数据库恢复
— 1. 创建测试数据
CREATE TABLE fgedu.test_backup (
id INT IDENTITY(1,1) PRIMARY KEY,
name VARCHAR(50),
value INT
);
GO

INSERT INTO fgedu.test_backup (name, value)
VALUES (‘测试1’, 100), (‘测试2’, 200), (‘测试3’, 300);
GO

— 2. 执行完整备份
BACKUP DATABASE fgedudb
TO DISK = ‘/sqlserver/backup/test_full.bak’
WITH COMPRESSION, CHECKSUM;
GO

— 3. 插入更多数据
INSERT INTO fgedu.test_backup (name, value)
VALUES (‘测试4’, 400), (‘测试5’, 500);
GO

— 4. 查看当前数据
SELECT * FROM fgedu.test_backup;
GO

— 5. 模拟数据库损坏
— 注意:实际生产环境不要执行此操作
— ALTER DATABASE fgedudb SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
— DROP DATABASE fgedudb;

— 6. 恢复数据库
RESTORE DATABASE fgedudb
FROM DISK = ‘/sqlserver/backup/test_full.bak’
WITH REPLACE, RECOVERY;
GO

— 7. 验证恢复结果
SELECT * FROM fgedu.test_backup;
GO

— 8. 清理测试数据
DROP TABLE fgedu.test_backup;
GO

执行结果:

(3 rows affected)

BACKUP DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

(2 rows affected)

id name value
———– —— ———–
1 测试1 100
2 测试2 200
3 测试3 300
4 测试4 400
5 测试5 500

RESTORE DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

id name value
———– —— ———–
1 测试1 100
2 测试2 200
3 测试3 300

Commands completed successfully.

4.2 SQLServer差异备份恢复案例

差异备份恢复实战:

— 案例:差异备份恢复
— 1. 创建测试表
CREATE TABLE fgedu.test_diff (
id INT IDENTITY(1,1) PRIMARY KEY,
name VARCHAR(50),
value INT
);
GO

— 2. 插入初始数据
INSERT INTO fgedu.test_diff (name, value)
VALUES (‘初始1’, 100), (‘初始2’, 200);
GO

— 3. 执行完整备份
BACKUP DATABASE fgedudb
TO DISK = ‘/sqlserver/backup/test_diff_full.bak’
WITH COMPRESSION, CHECKSUM;
GO

— 4. 插入第一批数据
INSERT INTO fgedu.test_diff (name, value)
VALUES (‘第一批1’, 300), (‘第一批2’, 400);
GO

— 5. 执行差异备份
BACKUP DATABASE fgedudb
TO DISK = ‘/sqlserver/backup/test_diff_diff.bak’
WITH DIFFERENTIAL, COMPRESSION, CHECKSUM;
GO

— 6. 插入第二批数据
INSERT INTO fgedu.test_diff (name, value)
VALUES (‘第二批1’, 500), (‘第二批2’, 600);
GO

— 7. 查看当前数据
SELECT * FROM fgedu.test_diff;
GO

— 8. 恢复数据库
— 步骤1:还原完整备份
RESTORE DATABASE fgedudb
FROM DISK = ‘/sqlserver/backup/test_diff_full.bak’
WITH NORECOVERY, REPLACE;
GO

— 步骤2:还原差异备份
RESTORE DATABASE fgedudb
FROM DISK = ‘/sqlserver/backup/test_diff_diff.bak’
WITH RECOVERY;
GO

— 9. 验证恢复结果
SELECT * FROM fgedu.test_diff;
GO

— 10. 清理测试数据
DROP TABLE fgedu.test_diff;
GO

执行结果:

(2 rows affected)

BACKUP DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

(2 rows affected)

BACKUP DATABASE successfully processed 200 pages in 0.100 seconds (16.000 MB/sec).

(2 rows affected)

id name value
———– ——- ———–
1 初始1 100
2 初始2 200
3 第一批1 300
4 第一批2 400
5 第二批1 500
6 第二批2 600

RESTORE DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

RESTORE DATABASE successfully processed 200 pages in 0.100 seconds (16.000 MB/sec).

id name value
———– ——- ———–
1 初始1 100
2 初始2 200
3 第一批1 300
4 第一批2 400

Commands completed successfully.

4.3 SQLServer时间点恢复案例

时间点恢复实战:

— 案例:时间点恢复
— 1. 创建测试表
CREATE TABLE fgedu.test_point_in_time (
id INT IDENTITY(1,1) PRIMARY KEY,
name VARCHAR(50),
value INT,
create_time DATETIME DEFAULT GETDATE()
);
GO

— 2. 插入初始数据
INSERT INTO fgedu.test_point_in_time (name, value)
VALUES (‘初始数据’, 100);
GO

— 3. 执行完整备份
BACKUP DATABASE fgedudb
TO DISK = ‘/sqlserver/backup/test_tpit_full.bak’
WITH COMPRESSION, CHECKSUM;
GO

— 4. 记录时间点1
DECLARE @time1 DATETIME = GETDATE();
WAITFOR DELAY ’00:00:01′;

— 5. 插入数据1
INSERT INTO fgedu.test_point_in_time (name, value)
VALUES (‘数据1’, 200);
GO

— 6. 执行日志备份1
BACKUP LOG fgedudb
TO DISK = ‘/sqlserver/backup/test_tpit_log1.trn’
WITH COMPRESSION, CHECKSUM;
GO

— 7. 记录时间点2
DECLARE @time2 DATETIME = GETDATE();
WAITFOR DELAY ’00:00:01′;

— 8. 插入数据2
INSERT INTO fgedu.test_point_in_time (name, value)
VALUES (‘数据2’, 300);
GO

— 9. 执行日志备份2
BACKUP LOG fgedudb
TO DISK = ‘/sqlserver/backup/test_tpit_log2.trn’
WITH COMPRESSION, CHECKSUM;
GO

— 10. 记录时间点3
DECLARE @time3 DATETIME = GETDATE();
WAITFOR DELAY ’00:00:01′;

— 11. 插入错误数据
INSERT INTO fgedu.test_point_in_time (name, value)
VALUES (‘错误数据’, 999999);
GO

— 12. 查看当前数据
SELECT * FROM fgedu.test_point_in_time ORDER BY create_time;
GO

— 13. 执行时间点恢复
— 步骤1:还原完整备份
RESTORE DATABASE fgedudb
FROM DISK = ‘/sqlserver/backup/test_tpit_full.bak’
WITH NORECOVERY, REPLACE;
GO

— 步骤2:还原日志备份1
RESTORE LOG fgedudb
FROM DISK = ‘/sqlserver/backup/test_tpit_log1.trn’
WITH NORECOVERY;
GO

— 步骤3:还原日志备份2到时间点2
RESTORE LOG fgedudb
FROM DISK = ‘/sqlserver/backup/test_tpit_log2.trn’
WITH RECOVERY, STOPAT = @time2;
GO

— 14. 验证恢复结果
SELECT * FROM fgedu.test_point_in_time ORDER BY create_time;
GO

— 15. 清理测试数据
DROP TABLE fgedu.test_point_in_time;
GO

执行结果:

(1 row affected)

BACKUP DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

(1 row affected)

BACKUP LOG successfully processed 50 pages in 0.050 seconds (8.000 MB/sec).

(1 row affected)

BACKUP LOG successfully processed 50 pages in 0.050 seconds (8.000 MB/sec).

(1 row affected)

id name value create_time
———– ——– ———– ———————–
1 初始数据 100 2025-04-08 10:00:00.000
2 数据1 200 2025-04-08 10:00:01.000
3 数据2 300 2025-04-08 10:00:02.000
4 错误数据 999999 2025-04-08 10:00:03.000

RESTORE DATABASE successfully processed 1000 pages in 0.500 seconds (16.000 MB/sec).

RESTORE LOG successfully processed 50 pages in 0.050 seconds (8.000 MB/sec).

RESTORE LOG successfully processed 50 pages in 0.050 seconds (8.000 MB/sec).

id name value create_time
———– ——– ———– ———————–
1 初始数据 100 2025-04-08 10:00:00.000
2 数据1 200 2025-04-08 10:00:01.000

Commands completed successfully.

Part05-风哥经验总结与分享

5.1 SQLServer备份最佳实践

  • 使用完整恢复模式,确保数据安全
  • 制定合理的备份策略,包括完整、差异和事务日志备份
  • 启用备份压缩,减少备份大小和时间
  • 使用校验和,确保备份的完整性
  • 定期测试恢复流程,确保备份的有效性
  • 将备份存储在多个位置,包括异地存储
  • 自动化备份作业,确保备份的及时性
  • 监控备份作业的执行情况,及时发现问题

5.2 SQLServer恢复常见问题

  • 备份文件损坏:原因是存储介质故障或网络中断,解决方法是使用校验和并定期验证备份
  • 恢复失败:原因是备份链不完整或备份文件损坏,解决方法是确保完整的备份链
  • 恢复时间过长:原因是数据量过大或存储性能不足,解决方法是优化备份策略和存储性能
  • 权限问题:原因是恢复用户权限不足,解决方法是使用具有足够权限的用户执行恢复
  • 磁盘空间不足:原因是目标磁盘空间不足,解决方法是确保目标磁盘有足够的空间

5.3 SQLServer备份性能优化

  • 使用备份压缩减少备份大小和时间
  • 将备份文件存储在高速存储设备上
  • 使用多个备份设备进行并行备份
  • 在非业务高峰期执行备份操作
  • 考虑使用备份加密保护敏感数据
  • 定期清理过期备份,释放存储空间
  • 监控备份性能,及时调整备份策略
  • 使用备份工具和第三方解决方案提高备份效率

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息