Created
May 22, 2024 07:46 AM
Tags
系统中同时运行多个事务,若其中某一个事务因为自身故障被系统强行退出,而其它事务仍正常运行,这种故障称为()。该故障发生时,会造成本数据库的一致性破坏,解决的方法是()。
题一:
A. 事务故障
B. 系统故障
C. 介质故障
D. 程序bug
题二:
A. 由用户对该事务进行回滚
B. 由程序对该事务进行补偿操作
C. 由DBMS对该事务进行回滚
D. 由DBA对该事务进行回滚
答案及解析:
A C
数据库系统故障分为三类:事务故障、系统故障和介质故障。事务故障是单独一个事务出问题而不能执行下去,并不影响其他事务的执行;系统故障是故障导致系统重启,当前运行中的事务及刚刚提交的事务会导致数据库不一致;介质故障则是数据库文件的存储介质如硬盘发生故障导致数据丢失。DBMS对不同种类的故障使用不同的恢复方法。其中事务故障和系统故障由DBMS来完成事务级别的恢复,即根据日志文件对未完成的事务进行UNDO操作,对已完成的事务进行REDO操作,使数据库恢复到故障前的一致性状态;介质故障则需要DBA介入,装载备份文件后交由DBMS进行恢复。
题一的答案是 **A. 事务故障**。事务故障指的是事务在运行过程中由于程序错误、逻辑错误或者违反了某些约束条件等原因导致事务无法继续执行,必须中止的情况。
题二的答案是 **C. 由DBMS对该事务进行回滚**。当事务故障发生时,为保持数据库的一致性,数据库管理系统(DBMS)会自动对该事务进行回滚(Rollback)操作,撤销该事务已经完成的所有操作,使数据库回到事务开始前的一致状态。这是DBMS提供的恢复机制的一部分,无需用户或数据库管理员(DBA)手动介入。
运行中的系统因为故障导致服务器重启,正在执行的事务中断,破坏了事务的原子性,恢复的方法是利用日志进行Undo操作;
而已经提交的事务在故障发生时尚未写入磁盘,破坏了事务的持久性,恢复的方法是利用日志进行Redo操作.
故障导致服务器重启,故障时正在执行的任务的原子性被破坏,即任务没有执行完,其对数据库的部分更新可能已经被写入硬盘上的数据库文件,重启后这部分更新使得数据库处于不一致性状态,应对对其进行处理,撤销故障时未完成的任务对数据库的更新,使数据库还原到未完成任务执行前的状态,相当于这些任务没有执行。这种恢复操作借助于日志文件来完成。日志按照时间顺序记录了所有事务对数据库的更新操作。而且在对数据库的更新之前已被写入硬盘。可以逆向扫描日志记录,找出未完成的事务,将其对数据库的修改还原,称为Undo操作。
同样,故障发生时已经完成提交的事务,其对数据库的修改可能还在内存中的I/O缓冲区中,没来得及写入硬盘,重启后这部分修改会丢失,破坏了事务的持久性。同样借助于日志文件,找到故障前已提交的事务,将其对数据库的更新重做一遍,即可完成对应事务的更新操作。这一操作称为Redo操作。