设为首页 加入收藏

TOP

SQL Server中的事务日志管理(5/9):完整恢复模式里的日志管理(三)
2015-11-21 01:40:55 来源: 作者: 【 】 浏览:4
Tags:SQL Server 事务 日志 管理 5/9 完整 恢复 模式
current set 21 RESTORE HEADERONLY 22 FROM DISK = 'C:\Backups\TestDB.bak' 23 GO 24 25 -- Back up the tail of the log to prepare for restore 26 -- This will become the third file of the bakup set 27 BACKUP Log TestDB 28 TO DISK = 'C:\Backups\TestDB.bak' 29 WITH NORECOVERY; 30 GO 31 32 -- Restore the full backup 33 RESTORE DATABASE TestDB 34 FROM DISK = 'C:\Backups\TestDB.bak' 35 WITH FILE=1, NORECOVERY; 36 37 -- Apply the transaction log backup 38 RESTORE LOG TestDB 39 FROM DISK = 'C:\Backups\TestDB.bak' 40 WITH FILE=2, NORECOVERY; 41 42 -- Apply the tail log backup 43 RESTORE LOG TestDB 44 FROM DISK = 'C:\Backups\TestDB.bak' 45 WITH FILE=3, NORECOVERY; 46 47 -- Recover the database 48 RESTORE DATABASE TestDB 49 WITH RECOVERY; 50 GO

?

?
(代码5.2:备份到,从备份集恢复,不推荐。)
?
但是,使用备份集看起来是数据库备份到磁带时留下的遗物。当备份到磁盘时,使用这个计划是个不好的想法,显然,备份文件会增长非常迅速。
?
实际上,常见的是每个完整备份和事务日志备份文件的每个文件名都不一样,都标记上备份发生的日期和时间。例如,大多数第三方备份工具,流行社区生成的脚本,加上SSMS里的维护计划向导/设计器,都会创建各个日期标记的文件,例如WIN8X64_AdventureWorks2008R2_FULL_20151025_120003.bak。
?
这样的话,更常见的备份和还原计划会使用唯一命名的备份,如下所示:
 1 USE master;
 2 BACKUP DATABASE TestDB
 3 TO DISK ='C:\Backups\TestDB.bak'
 4 WITH INIT;
 5 GO
 6 
 7 -- Perform a transaction log backup of the Test database
 8 BACKUP Log TestDB
 9 TO DISK ='C:\Backups\TestDB_log.bak'
10 WITH INIT;
11 GO
12 
13 -- ........
14 
15 -- Back up the tail of the log to prepare for restore
16 BACKUP Log TestDB
17 TO DISK ='C:\Backups\TestDB_taillog.bak'
18 WITH NORECOVERY, INIT;
19 GO
20 
21 -- Restore the full backup
22 RESTORE DATABASE TestDB
23 FROM DISK = 'C:\Backups\TestDB.bak'
24 WITH NORECOVERY;
25 
26 -- Apply the transaction log backup
27 RESTORE LOG TestDB
28 FROM DISK = 'C:\Backups\TestDB_log.bak'
29 WITH NORECOVERY;
30 
31 -- Apply the tail log backup
32 RESTORE LOG TestDB
33 FROM DISK = 'C:\Backups\TestDB_taillog.bak'
34 WITH NORECOVERY;
35 
36 -- Recover the database
37 RESTORE DATABASE TestDB
38 WITH RECOVERY;
39 GO
(代码5.3:备份到,从唯一命名备份文件集还原)
?
恢复到上次正确日志备份的时间点
?
有时候很遗憾,不能进行完整恢复:例如由于灾难当前事务日志不可用。这样的话,我们会需要还原数据库导最近日志备份的末尾。我们要为这个可能做好准备,例如损坏的硬盘包含事务日志,这就决定了事务日志备份的频率。如果每15分钟备份一次,那么你就有丢失15分钟数据的风险。
?
假设我们已经进行了如下的一系列备份。为了演示需要,我们覆盖了先前的备份文件,实际的备份文件集明显比这个更短。
 1 -- FULL BACKUP at 2AM
 2 USE master ;
 3 BACKUP DATABASE TestDB
 4 TO DISK = 'C:\Backups\TestDB.bak'
 5 WITH INIT ;
 6 GO
 7 
 8 -- LOG BACKUP 1 at 2.15 AM
 9 USE master ;
10 BACKUP LOG TestDB
11 TO DISK = 'C:\Backups\TestDB_log.bak'
12 WITH INIT ;
13 GO
14 
15 -- LOG BACKUP 2 at 2.30 AM
16 USE master ;
17 BACKUP LOG TestDB
18 TO DISK = 'C:\Backups\TestDB_log2.bak'
19 WITH INIT ;
20 GO
(代码5.4:一个简短序列的日志备份)
?
如果灾难性故障发生在上午2:30,我们将需要恢复数据库到上午2:30的尾日志备份状态。
?
在这个例子的恢复步骤和我们在代码5.3里看到的非常类似,但因为不能进行尾日志备份,我们只能恢复到特定点,我们要使用代码5.5里所显示的STOPAT选项。
 1 --RESTORE Full backup
 2 RESTORE DATABASE TestDB
 3 FROM DISK = 'C:\Backups\TestDB.bak'
 4 WITH NORECOVERY;
 5 
 6 --RESTORE Log file 1
 7 RESTORE LOG TestDB
 8 FROM DISK = 'C:\Backups\TestDB_log.bak'
 9 WITH NORECOVERY, STOPAT = 'Jan 01, 2020 12:00 AM';
10 
11 --RESTORE Log file 2
12 RESTORE LOG TestDB
13 FROM DISK = 'C:\Backups\TestDB_Log2.bak'
14 WITH NORECOVERY, STOPAT = 'Jan 01, 2020 12:00 AM';
15 
16 --Recover the database
17 RESTORE DATABASE TestDB
18 WITH RECOVERY;
19 GO
(代码5.5:使用STOPAT恢复到时间点)
?
因为我们在将来指定了STO
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQL从入门到基础 - 02 SQLServer.. 下一篇SQL从入门到基础?03 SQLServer基..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: