昨天问了大家完整,差异,日志备份的问题,然后以下代码是roy网友给的解答代码,就这个代码我有了以下疑问。
希望能得到大家的帮助解答。谢谢
为了查看方便,但凡有SQL格式的都是解答的代码。然后跟着红字部分是我的疑问。
(附:昨天的帖子:http://topic.csdn.net/u/20111031/16/748a6b63-d45f-4413-bb7c-e224d98976b9.html)
--创建测试
CREATE DATABASE db
GO--正常备份
BACKUP DATABASE db TO DISK='c:\1.bak' WITH FORMAT
BACKUP LOG db TO DISK='c:\2.bak' WITH FORMAT
BACKUP LOG db TO DISK='c:\3.bak' WITH FORMAT
BACKUP DATABASE db TO DISK='c:\4.bak' WITH FORMAT
BACKUP DATABASE db TO DISK='c:\5.bak' WITH FORMAT,DIFFERENTIAL
BACKUP LOG db TO DISK='c:\6.bak' WITH FORMAT
BACKUP LOG db TO DISK='c:\7.bak' WITH FORMAT --我自己加了这个代码GO
Q0:这里面有个WITH FORMAT,查看了SQL的F1,只说是什么媒体头,还是不明白。请问FORMAT的意义和用途--下面是用于日志备份和差异备份还原中易犯的错误--1. 恢复时使用错误的日志顺序
IF DB_ID('db') IS NOT NULL DROP DATABASE db
RESTORE DATABASE db FROM DISK='c:\1.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\3.bak'
/*--收到信息
服务器: 消息 4305,级别 16,状态 1,行 5
此备份集中的日志开始于 LSN 6000000002800001,该 LSN 太晚,无法应用到数据库。包含 LSN 6000000002500001 的较早的日志备份可以还原。
--*/
GO
Q1:这个3.BAK也不是差异备份,如果按照昨天的帖子里说的可以覆盖之前的log备份,那为何会出现这个错误呢?那岂不是还得把log备份全留着,然后回复的时候从老到新的顺序回复
Q2:如果以上面的backup代码为准,那么需要回复到这个数据库最新!的数据,请问我以下的恢复代码中的顺序和参数对吗?如果不对,那应该怎么写才是正确的
RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY
RESTORE DATABASE db FROM DISK='c:\5.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\6.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\7.bak'Q3:继续Q2,如果在恢复操作中因为不小心,只回复了database,忘记恢复log操作了
RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY
RESTORE DATABASE db FROM DISK='c:\5.bak'
然后这个时候应该如何补救6和7?是重新drop掉db,重新执行Q2的全部步骤?
Q4:昨天在进行这些测试的时候,总提示db正在使用,什么无排他权,所以我总之把绿色小箭头停止了再启动,很不方便,请问有什么比较方便的代码吗?问题有点多了,我还是抱着希望有高人,热心人,路人来热心解答的,不胜感激!
希望能得到大家的帮助解答。谢谢
为了查看方便,但凡有SQL格式的都是解答的代码。然后跟着红字部分是我的疑问。
(附:昨天的帖子:http://topic.csdn.net/u/20111031/16/748a6b63-d45f-4413-bb7c-e224d98976b9.html)
--创建测试
CREATE DATABASE db
GO--正常备份
BACKUP DATABASE db TO DISK='c:\1.bak' WITH FORMAT
BACKUP LOG db TO DISK='c:\2.bak' WITH FORMAT
BACKUP LOG db TO DISK='c:\3.bak' WITH FORMAT
BACKUP DATABASE db TO DISK='c:\4.bak' WITH FORMAT
BACKUP DATABASE db TO DISK='c:\5.bak' WITH FORMAT,DIFFERENTIAL
BACKUP LOG db TO DISK='c:\6.bak' WITH FORMAT
BACKUP LOG db TO DISK='c:\7.bak' WITH FORMAT --我自己加了这个代码GO
Q0:这里面有个WITH FORMAT,查看了SQL的F1,只说是什么媒体头,还是不明白。请问FORMAT的意义和用途--下面是用于日志备份和差异备份还原中易犯的错误--1. 恢复时使用错误的日志顺序
IF DB_ID('db') IS NOT NULL DROP DATABASE db
RESTORE DATABASE db FROM DISK='c:\1.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\3.bak'
/*--收到信息
服务器: 消息 4305,级别 16,状态 1,行 5
此备份集中的日志开始于 LSN 6000000002800001,该 LSN 太晚,无法应用到数据库。包含 LSN 6000000002500001 的较早的日志备份可以还原。
--*/
GO
Q1:这个3.BAK也不是差异备份,如果按照昨天的帖子里说的可以覆盖之前的log备份,那为何会出现这个错误呢?那岂不是还得把log备份全留着,然后回复的时候从老到新的顺序回复
Q2:如果以上面的backup代码为准,那么需要回复到这个数据库最新!的数据,请问我以下的恢复代码中的顺序和参数对吗?如果不对,那应该怎么写才是正确的
RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY
RESTORE DATABASE db FROM DISK='c:\5.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\6.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\7.bak'Q3:继续Q2,如果在恢复操作中因为不小心,只回复了database,忘记恢复log操作了
RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY
RESTORE DATABASE db FROM DISK='c:\5.bak'
然后这个时候应该如何补救6和7?是重新drop掉db,重新执行Q2的全部步骤?
Q4:昨天在进行这些测试的时候,总提示db正在使用,什么无排他权,所以我总之把绿色小箭头停止了再启动,很不方便,请问有什么比较方便的代码吗?问题有点多了,我还是抱着希望有高人,热心人,路人来热心解答的,不胜感激!
解决方案 »
- 新手上路:两个简单的sql语句问题:
- 一张表两个字段的关系查询问题
- ~~~~~~~~--散分--~~~~~~~~~~
- 这个条件,如何写SQL语句???
- 急!触发器
- 一个关于数据库的设计问题。。。
- win7下适用MSDE2000
- MSSql2005无法存储早于1753年日期,已用varchar,但是仍有问题,如何进行日期比较运算?
- 在SQL SERVER 当中如何取得汉字拼音的首字母!
- 后台用DB2,中间层用VC、IBM C,前端用VB,直接用WINSOCK通讯;关于应用程序的优化,是否有想法。
- sql2000关于一个表嵌套的sql语句的写法?
- 存储过程“因为它不存在或者您没有所需的权限”的问题
Q2:恢复到最新:
RESTORE DATABASE db FROM DISK='c:\4.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\6.bak' WITH NORECOVERY
RESTORE LOG db FROM DISK='c:\7.bak'
Q3:恢复到最新时,Restore 5.bak是没有必要的
Q4:总提示db正在使用,什么无排他权,是因为你已经recovery了,此时,如果你想重新做还原测试,可以先删除该数据库。
这样容易区分,在操作时也容易判断。
我测试了下,的确是5是没必要的了。
那可否这么说,如果策略是只做完整备份+log备份,那么都可以不用进行差异备份了?
如果你能保证每个log都不丢失,也不怕麻烦逐个恢复,也可以不备差异。
差异是最后一个全备之后的全部数据变化,它是可以覆盖之前log备份的,所以还原时,可以采用全备+差异+log备的方法。比如你的备份依次为:
1.bak 2.trn 3.trn 4.dif 5.trn 6.trn
你可以用1.bak+2.trn+3.trn+5.trn+6.trn
也可以用1.bak+4.dif+5.trn+6.trn 当你有太多的trn时,用dif来还原时还是有一定写法上的优势的。而且它还能做为trn损坏的一个备份。
參照:13樓perfectaction方法理解