首页 > 代码库 > MSSQL 2012 日志还原

MSSQL 2012 日志还原

日志还原条件

--条件一:检查数据库的恢复模式:Full
--条件二:有最后一次的完整备份
--条件三:完整备份后未强制截断日志
--条件四:故障发生后做过日志备份

CREATE TABLE [dbo].[tb](
    [姓名] [varchar](10) NULL,
    [课程] [varchar](10) NULL,
    [分数] [int] NULL
) ON [PRIMARY]

Insert into tb (姓名,课程, 分数 ) values (‘张三1‘, ‘语文‘, 80),(‘张三‘, ‘语文‘, 80),(‘张三2‘, ‘数学‘, 90),(‘张三3‘, ‘英语‘, 70)

---完整备份:

Use master
GO
Backup Database Test
    To Disk=‘D:\Backup\TEST_FullDB_20141103.bak‘
    With  init


---模拟故障时间,记录前后时间
Use Test
GO
Select GETDATE () --2014-11-03 21:39:30.323
UPdate tb
SET 分数 = 150   --120
Select GETDATE () -- 2014-11-03 21:39:30.323

 

---故障后未强制截断日志备份
Backup Log Test
    To Disk=‘D:\Backup\TEST_Log_20141103_2.trn‘
    With  No_Truncate, init


--- 还原到另一个数据库. NORECOVERY 模式(因测试环境只一个数据库实例,故路径要写明)
USE [master]
RESTORE DATABASE [TEST_New]
FROM  DISK = N‘D:\Backup\TEST_FullDB_20141103.bak‘
WITH FILE = 1,
MOVE N‘Test‘ TO N‘D:\Backup\Test.ndf‘,  
MOVE N‘Test_log‘ TO N‘D:\Backup\Test.ldf‘,  
NORECOVERY

 

----日志还原反复执行直到真正的时间点,使用STANDBY的目的是担心时间点选择不够准确,

还可以继续恢复日志备份
USE [master]
RESTORE LOG [TEST_New]
    FROM  DISK =N‘D:\Backup\TEST_Log_20141103_2.trn‘
    WITH  FILE = 1,  
    STANDBY = N‘D:\Backup\ROLLBACK_UNDO_TEST_New.BAK‘,  
    STOPAT = N‘ 2014-11-03 21:39:30.323‘


-----查看结果
Use TEST_New
-- Use TEST
Select * From dbo.tb (nolock)
-- 2014-11-03 21:32:19.070
 

---最后更新....

MSSQL 2012 日志还原