急:在恢复数据时出现的问题
小弟误操作,删除了一部分数据.在网上找到用日志恢复的方法,
RESTORE DATABASE message from disk='D:\message.bak' WITH NORECOVERY
RESTORE LOG message
FROM disk='D:\20041203.logs' WITH RECOVERY,STOPAT='12/03/2004 01:00'
但是在实际使用的时候出现了错误:因为数据库正在使用,所以未能获得对数据库的排它访问权。
请问是怎么回事啊?我已经在企业管理器中删除了所有message库的进程了.
上面两句SQL是在查询分析器中执行的.
问题点数:0、回复次数:5Top
1 楼yelook(香槟酒)回复于 2004-12-03 12:08:28 得分 0
能这样还原吗,表示怀疑Top
2 楼liounzhou(潇潇夜雨)回复于 2004-12-03 12:56:51 得分 0
当然可以了.
原文如下:
DB2中可以使得数据库回复到指定的时间点,SQL Server数据库的Recovery Model为full 或者Bulk copy的时候,是可以从日志来恢复数据库的。实际上日志中记录的一条一条的transact sql语句,恢复数据库的时候会redo这些sql语句。
前提条件:myBBS是数据库test中的一个表,
数据库test的Recovery Model为Full,Auto Close,Auto Shrink两个选项未选中。
数据库test的data files和log files均为默认的自动增长状态。
A:2004/10/13,16:00进行数据库备份,backup database test to disk='d:\db\1600.bak' with init
B:2004/10/14,13:00对数据库进行了update,delete等操作;
C:2004/10/15,18:00使用delete mybbs where id>300时,语句误写成delete mybbs,因而删除了表mybbs中的所有数据。
现在在C点,C点对数据库进行了误操作,我们希望数据库能够恢复到C之前的状态,比如恢复到10月15日17:59分的状态。
要恢复数据库B点,使用的是A点备分的数据库1600.bak;而使用的日志备分是最新的备分1820.logs;因而进行如下操作:
--备分日志:
BACKUP LOG test TO DISK='d:\1820.logs' WITH INIT
--恢复数据库1600.bak,使用WITH NORECOVERY参数:
RESTORE DATABASE test from disk='d:\db\1640.bak' WITH NORECOVERY
--使用日志恢复数据库到10月15日17:59分:
RESTORE LOG test
FROM disk='d:\1820.logs' WITH RECOVERY,STOPAT='10/15/2004 17:59'
上面的三条Transact SQL语句的对应过程:
1.恢复数据库到A点;
2.执行A-B之间的log记录,把数据库恢复到B点.
这样就恢复数据库到了指定的时间点。如果恢复不成功,可能的原因是:1.未使用正确的备分数据库;2.数据库选项选中了Auto Shrink.
Top
3 楼yelook(香槟酒)回复于 2004-12-03 13:05:52 得分 0
据我所知,sqlserver是还原数据库时选择同一数据库不同时间的日志来还原的,当然有前提得定时备份事务日志,DB2的这种功能sqlserver好像没法做到Top
4 楼liounzhou(潇潇夜雨)回复于 2004-12-03 14:22:00 得分 0
先不管是否能恢复,现在执行这两句语句就出错啊Top
5 楼yosonlin()回复于 2004-12-03 14:28:22 得分 0
用指定时间来还原,首先是你在在这个时刻做过备份,然后才可以恢复.
我觉得用语句还不如用企业管理器,用语句可做的也许它都可以做Top




