首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

RECOVERY与NORECOVERY是否这样理解?该怎么解决

2012-03-07 
RECOVERY与NORECOVERY是否这样理解?事务如:BEGINTRANUPDATETBL_HYCSETSCORE85WHEREUSRNAME HYC--假设原

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

热点排行