sql server 2008 数据库备份还原问题
System.Data.SqlClient.SqlError: 尚未备份数据库 "company" 的日志尾部
网上的查到的资料很多都是转载,原文如下
原因分析:
这是因为在线还原的数据库在最后备份后又产生了新的日志,所以按照默认设置的备份选项,系统将提示备份日志尾部以免造成事务中断。
解决方法:
如果需要备份尾部日志则进行备份。如果不需要,则可以在还原数据库的的选项卡中选择【覆盖现有数据库】复选框。
另一种解决方式就是使用备份进行日志备份,然后在备份选项里选中备份日志尾部,将数据库置为还原状态,这样就不用在还原的时候选覆盖数据选项了,不过数据库在还原状态下不可用。
看不明白,尾部日志是什么意思?具体的操作也不是很明白,有时候可以还原,有时候不行。
我自己的具体操作如下:
一:对数据库company进行完整备份
二:对数据库中某张表添加一项数据
三:对数据库company进行差异备份
四:我对数据库进行还原,然后出现上面出现的情况
麻烦哪位大大能够解释一下为什么出现这种情况,网上的理解不了
------解决方案--------------------我的没问题的:
create database wcc
go
backup database wcc
from disk = 'c:\wcc.bak'
backup database wcc
to disk = 'c:\wcc_diff.bak'
with differential
go
select * into wcc.dbo.xxx
from sys.objects
delete top (1) from wcc.dbo.xxx
go
restore database wcc
from disk = 'c:\wcc.bak'
with replace,norecovery
restore database wcc
from disk = 'c:\wcc_diff.bak'
with recovery
------解决方案--------------------假如你1pm 做了全备,2pm做了差异备份,3pm去做database restore. 2pm-3pm之间没有任何备份发生,这个数据库在2pm-3pm间肯定还所有事务日至吧,这些事务日至没有被备份,就是所谓的tailed log.
你恢复的目标数据库是不是原库?如果你在DB1上备份恢复到DB2上就会收到这个警告信息。
如果你在GUI界面上没有选replace the existing database,那么肯定会收到这个警告信息。你自己也贴出了这个警告信息的解决方案:如果需要备份尾部日志则进行备份如果不需要,则可以在还原数据库的的选项卡中选择【覆盖现有数据库】复选框。
yupeigu 贴出的是正确的恢复命令,可以尝试。
数据库恢复机制是,先restore file, 然后apply full backup 中的 log, diff backup 中的log, transactional log 做redo (前滚),然后再对committed transaction做undo (回滚)
------解决方案--------------------日志为了保护你的数据,除非使用覆盖原有数据库,否则不会给你乱动的,做日志备份即可。其实就好像2005以后的SSMS,你点【删除数据库】,如果默认选择,只要有人连着数据库你是删不了的,要用【关闭现有连接】那个选项
------解决方案--------------------比如你做了一次完备A,删除之前做了差异B,删了再做差异C,那么你只需要还原A,B就可以恢复数据了
------解决方案--------------------我这里有日志恢复的例子http://blog.csdn.net/dba_huangzj/article/details/8491327