活锁是指当若干事务要对同一数据项加锁时,造成一些事务的永远等待,得不到控制权的现象;死锁是指两个以上事务集合中的每个事务都在等待加锁当前已被另一事务加锁的数据项,从而造成相互等待的现象。
数据库中解决死锁的常用方法有:
⑴、要求每个事务一次就将所有要使用的数据全部加锁,否则就不能执行。
⑵、采用按序加锁法。
⑶、不采取任何措施来预防死锁的发生,而是周期性的检查系统中是否有死锁。
可串行化的调度:如果几个事务并行(交错)执行的结果和按次序串行执行的结果相同,则称该并行执行结果是正确的。这样的调度称为可串行化的调度。
两段锁协议是指所有事务必须分两个阶段对数据库项加锁和解锁。
两段锁协议规定所有的事务应遵守下列规则:
⑴、在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁。
⑵、在释放一个封锁之后,事务再获得任何其他封锁。
所谓“两段”锁含义是:事务分为两个阶段。第一阶段是获得封锁,也称为扩展阶段。在该阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在该阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。
数据库系统故障可分为:事务内部的故障、系统故障、介质故障、计算机病毒。
转储:静态转储(转储期间不允许对数据库进行任何存取、修改活动)
动态转储(转储期间允许对数据进行存取或修改)
海量转储(每次转储全部数据库)
增量转储(每次只转储上次转储后更新过的数据)
日志文件是用来记录对数据库每一次更新活动的文件。在转储中必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。
利用日志文件恢复事务的过程:
①从头扫描日志文件,找出哪些事务在故障发生时已经结束,哪些事务尚未结束;
②对尚未结束的事务进行撤销处理,对已经结束的事务进行重做处理。
①硬件故障;病毒破坏:当数据库本身被破坏时,可重装转储数据库的后备副本,然后运行日志文件,执行事务恢复,这样就可以重建数据库。
②发生事务故障;系统故障:当数据库本身没被破坏,但内容已经不可靠时,可利用日志文件恢复事务,从而使数据库回到某一正确状态,这时不必重装后备副本。