假定有一个事务:
begin tran t1
update ...
update...
if(...)
  rollback tran t1
else
  commit tran t1这个里面的rollback回滚是针对于不符合业务需求而所做的回滚,那么我现在有几个问题:
1.既然事务具有原子性和一致性,那假定第一个update执行刚结束,第二个update还没有开始,突然断电了,当重新来电启动数据库服务器,那么服务器中有没有第一个update所做的修改?
我真的是不知道,大胆多问几句
   <1>如果没有的话,是不是可以反映出事务在commit之前执行的这些update都会存在于内存或虚拟内存当中,只有commit后才会写回硬盘
   <2>如果有的话,是不是可以反映事务在commit之前都已经陆续在硬盘反映update的结果,如果回滚就会将硬盘的数据重新恢复到之前的值,利用ldf文件实现?
   <3>数据库的事务日志文件.ldf文件当中存储的都是什么?好像事务会将它自己在执行过程中的数据变化存放到ldf文件当中,真的是这样吗,如果存放的话,存放的到底是什么东西呢?
2.问题1中如果没有断电,是硬盘空间满了,那么会不会回滚?我觉得应该会吧,如果会的话,整个的执行事务的过程和回滚过程是什么样子的,能不能描述一下?
3.ndf文件什么时候用?干什么用?作用是什么?

解决方案 »

  1.   

    那假定第一个update执行刚结束,第二个update还没有开始,突然断电了,当重新来电启动数据库服务器,那么服务器中有没有第一个update所做的修改?没有吧,事务都没提交~
      

  2.   

    1.answer:我觉得是写硬盘还是写内存是无关紧要的,因为数据库采用的是先
    写日志的原则。为提交的事务即使写入硬盘了也可以通过日志来进行恢复。
    数据库启动的时候,会自动前滚已经提交的事务,回滚未提交的事务。
    2.answer:如果数据文件的硬盘空间满了,而日志文件的空间没有满,那么对数据库
    不会有什么影响,DB可以把改变的数据(脏页)保存在内存中。而如果日志文件
    的空间满了,那么事务就不能提交了,数据库就处于挂起的状态了。3.answer:ndf也是数据文件。是对主数据文件的扩展。使用多个数据文件不仅
    可以扩大数据库的空间,还可以提高数据库的读写性能。比如有的操作系统
    对单个文件的大小有限制,就可以通过多个数据文件进行扩展。
      

  3.   

    我也认真的话你知,在commit之前的一切事物都不会提交,他们都是在日志文件中呆的.
      

  4.   

    那么如果事务执行完了,提交成功了,在ldf文件当中会最终会存放的是什么呢,是事务对数据库所作的任何修改或者变化都存放到了ldf文件当中了吗?
      

  5.   

    SET XACT_ABORT { ON | OFF }
    设置这个就会全部提交。。
      

  6.   

    没明天楼上说的全部提交什么意思,我想要知道当事务成功执行完了,ldf中存放的是什么?