SQL Server:日志备份和差异备份还原中的常见问题示例

 
 
日志备份和差异备份还原中的常见问题示例
ContractedBlock.gif ExpandedBlockStart.gif 代码
 1  -- 创建测试
 2  CREATE   DATABASE  db
 3  GO
 4 
 5  -- 正常备份
 6  BACKUP   DATABASE  db  TO   DISK = ' c:\1.bak '   WITH  FORMAT
 7  BACKUP   LOG  db  TO   DISK = ' c:\2.bak '   WITH  FORMAT
 8  BACKUP   LOG  db  TO   DISK = ' c:\3.bak '   WITH  FORMAT
 9  BACKUP   DATABASE  db  TO   DISK = ' c:\4.bak '   WITH  FORMAT
10  BACKUP   DATABASE  db  TO   DISK = ' c:\5.bak '   WITH  FORMAT,DIFFERENTIAL
11  BACKUP   LOG  db  TO   DISK = ' c:\6.bak '   WITH  FORMAT
12  GO
13 
14  -- 下面是用于日志备份和差异备份还原中易犯的错误
15 
16  -- 1. 恢复时使用错误的日志顺序
17  IF   DB_ID ( ' db ' IS   NOT   NULL   DROP   DATABASE  db
18  RESTORE   DATABASE  db  FROM   DISK = ' c:\1.bak '   WITH  NORECOVERY
19  RESTORE   LOG  db  FROM   DISK = ' c:\3.bak '
20  /* --收到信息
21  服务器: 消息 4305,级别 16,状态 1,行 5
22  此备份集中的日志开始于 LSN 6000000002800001,该 LSN 太晚,无法应用到数据库。包含 LSN 6000000002500001 的较早的日志备份可以还原。
23  -- */
24  GO
25 
26  -- 2. 恢复时,将日志备份应用于错误的完全备份
27  IF   DB_ID ( ' db ' IS   NOT   NULL   DROP   DATABASE  db
28  RESTORE   DATABASE  db  FROM   DISK = ' c:\4.bak '   WITH  NORECOVERY
29  RESTORE   LOG  db  FROM   DISK = ' c:\2.bak '
30  /* --收到错误信息
31  服务器: 消息 4326,级别 16,状态 1,行 5
32  此备份集中的日志终止于 LSN 6000000002800001,该 LSN 太早,无法应用到数据库。包含 LSN 6000000003000001 的较新的日志备份可以还原。
33  -- */
34  GO
35 
36  -- 3. 将日志备份用于RESTORE DATABASE
37  IF   DB_ID ( ' db ' IS   NOT   NULL   DROP   DATABASE  db
38  RESTORE   DATABASE  db  FROM   DISK = ' c:\2.bak '   WITH  NORECOVERY
39  /* --收到错误信息
40  服务器: 消息 3135,级别 16,状态 2,行 4
41  文件 'c:\2.bak' 中的备份集是由 BACKUP LOG 创建的,无法用于此还原操作。
42  -- */
43  GO
44 
45  -- 4. 将差异备份用于RESTORE LOG
46  IF   DB_ID ( ' db ' IS   NOT   NULL   IF   DB_ID ( ' db ' IS   NOT   NULL   DROP   DATABASE  db
47  RESTORE   DATABASE  db  FROM   DISK = ' c:\4.bak '   WITH  NORECOVERY
48  RESTORE   LOG  db  FROM   DISK = ' c:\5.bak '
49  /* --收到错误信息
50  服务器: 消息 3135,级别 16,状态 2,行 3
51  文件 'c:\5.bak' 中的备份集是由 BACKUP DATABASE WITH DIFFERENTIAL 创建的,无法用于此还原操作。
52  -- */
53  GO
54 
55  -- 5. 将差异备份用于RESTORE LOG
56  IF   DB_ID ( ' db ' IS   NOT   NULL   IF   DB_ID ( ' db ' IS   NOT   NULL   DROP   DATABASE  db
57  RESTORE   DATABASE  db  FROM   DISK = ' c:\4.bak '   WITH  NORECOVERY
58  RESTORE   LOG  db  FROM   DISK = ' c:\5.bak '
59  /* --收到错误信息
60  服务器: 消息 3135,级别 16,状态 2,行 3
61  文件 'c:\5.bak' 中的备份集是由 BACKUP DATABASE WITH DIFFERENTIAL 创建的,无法用于此还原操作。
62  -- */
63  GO
64 
65  -- 6. 将差异备份用于错误的完全备份中
66  IF   DB_ID ( ' db ' IS   NOT   NULL   IF   DB_ID ( ' db ' IS   NOT   NULL   DROP   DATABASE  db
67  RESTORE   DATABASE  db  FROM   DISK = ' c:\1.bak '   WITH  NORECOVERY
68  RESTORE   DATABASE  db  FROM   DISK = ' c:\5.bak '
69  /* --收到错误信息
70  服务器: 消息 3136,级别 16,状态 1,行 3
71  无法将设备 'c:\5.bak' 上的备份应用于数据库 'db'。
72  -- */
73  GO
74 
75  -- 7. 直接使用日志备份或者差异备份还原
76  IF   DB_ID ( ' db ' IS   NOT   NULL   IF   DB_ID ( ' db ' IS   NOT   NULL   DROP   DATABASE  db
77  RESTORE   DATABASE  db  FROM   DISK = ' c:\5.bak '
78  RESTORE   LOG  db  FROM   DISK = ' c:\2.bak '
79  /* --收到错误信息
80  服务器: 消息 913,级别 16,状态 8,行 3
81  未能找到 ID 为 65535 的数据库。可能该数据库尚未激活,也可能正在转换过程中。
82  -- */
83  GO
84 
85  -- 8. 还原完全备份时,未使用NORECOVERY,导致不能正确还原日志备份或者差异备份
86  IF   DB_ID ( ' db ' IS   NOT   NULL   IF   DB_ID ( ' db ' IS   NOT   NULL   DROP   DATABASE  db
87  RESTORE   DATABASE  db  FROM   DISK = ' c:\1.bak '
88  RESTORE   LOG  db  FROM   DISK = ' c:\2.bak '
89  /* --收到错误信息
90  服务器: 消息 4306,级别 16,状态 1,行 4
91  先前的还原操作未指定 WITH NORECOVERY 或 WITH STANDBY。请在除最后步骤之外的所有其他步骤中指定 WITH NORECOVERY 或 WITH STANDBY 后,重新启动该还原序列。
92  -- */
93  GO
94 
95  -- 删除测试
96  IF   DB_ID ( ' db ' IS   NOT   NULL   DROP   DATABASE  db
97 
98 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值