数据库系统中可能发生各种各样的故障:
1、事务内部的故障
事务内部的故障有的是可以通过事务程序本身发现的。从程序的角度来认识。例如银行转账:
begin transaction
读取账户甲余额balance
balance=balance-amount(转账金额)
if (balance<0)then
{
打印金额不足
rollback
}
else 写回balance
{
读取账户乙的余额balance1
balance1=balance1+amount
写回banlance1
commit
}
这个操作包含两个更新要么全都做要不都不做。否则数据库就出现不一致的问题。事务故障说明事务没有达到预期的终点。需要撤销操作即事务撤销(undo)。注意关键词的使用commit 和rollback。
2、系统故障(软故障)影响当前事务,但并不破坏数据库。例如特定类型的硬件错误,操作系统故障,dbms代码错误,停电等。当尚未完成的事务结果可能写入物理数据库,造成数据库可能处于不正确的状态。这就需要保证数据的一致性,需要清楚这些事务对数据库的修改。
恢复系统时需要在系统重启时让所有非正常终止的事务回滚,强行撤销所有未完成的任务。
另一方面未写入物理数据库的数据,要重新写入。需要执行redo 操作。保证数据库的一致状态。
3介质故障又称为硬故障,硬盘损坏磁场干扰等。