假定有一个事务:
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文件什么时候用?干什么用?作用是什么?
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文件什么时候用?干什么用?作用是什么?
写日志的原则。为提交的事务即使写入硬盘了也可以通过日志来进行恢复。
数据库启动的时候,会自动前滚已经提交的事务,回滚未提交的事务。
2.answer:如果数据文件的硬盘空间满了,而日志文件的空间没有满,那么对数据库
不会有什么影响,DB可以把改变的数据(脏页)保存在内存中。而如果日志文件
的空间满了,那么事务就不能提交了,数据库就处于挂起的状态了。3.answer:ndf也是数据文件。是对主数据文件的扩展。使用多个数据文件不仅
可以扩大数据库的空间,还可以提高数据库的读写性能。比如有的操作系统
对单个文件的大小有限制,就可以通过多个数据文件进行扩展。
设置这个就会全部提交。。