日期:2014-05-18  浏览次数:20566 次

RECOVERY与NORECOVERY是否这样理解?
事务   如:
BEGIN   TRAN
UPDATE   TBL_HYC   SET   SCORE=85  
WHERE   USRNAME= 'HYC '   --假设原来该记录中SCORE=65
COMMIT   TRAN
在高速缓存中执行前先预写日志
当在系统发生故障后导致数据库文件损坏的时候,刚处于执行,但未提交更改到磁盘时,它已经被写进了LOG
在利用日志还原的时候
应用NORECOVERY时
上面说到的事务会继续执行提交,恢复后HYC的SCORE=85  

而应用RECOVERY时     恢复后HYC的SCORE=65  

是不是这样来理解呢?

------解决方案--------------------
应该不是这样理解的.
在还原过程中, 最后一个 restore 命令 应该必须带上with recovery
以便让数据库进行前滚和后滚.

你的情况,要看数据库DOWN的时候,有没有执行到COMMIT;
如果没有执行到COMMIT;
数据库在恢复时会后滚.(即对没有做COMMIT的数据进行还原)
即恢复到65
,如果在DOWN的时候,COMMIT已经被执行过了.
那么,数据库会前滚, 这时,HYC的值为85