在事务故障恢复和系统故障恢复必须用日志文件。
在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数
据库。
在静态转储中也建立日志文件……
8.登记日志文件(对数据库的操作记录)。
登记的次序严格按并发事务执行的时间次序。 必须先写日志文件,后写数据库。
9.事务故障的恢复。
恢复子系统应利用日志文件撤销此事务已对数据库进行的修改,系统自动进行。
10.系统故障恢复。
导致故障原因可能有两个:
1. 未完成事务对数据库的更新可能已写入数据库。
2. 已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。
恢复策略是撤销故障发生时未完成的事物,重做已完成的事物。 11.介质故障的恢复。
数据库副本。
第十一章
1.并发操作带来的数据不一致性。并发操作破坏了事务的隔离性。
丢失修改:两个事务同时读入同一数据并修改,T2提交的结构破坏了T1提交的结果,
导致T1的修改被丢失。
不可重复读:事务1读取数据后,事务2执行更新操作,使T1无法再现前一次读取结
果。
读脏数据:事务1修改某一数据并将其写回磁盘,事务2读取同一数据后,T1由于某
种原因被撤销,这时被T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为脏数据,即不正确的数据。 2.并发控制的主要技术。
封锁、时间戳、乐观控制法、多版本并发控制等。
3. 封锁。
封锁就是事务T对某个数据对象操作之前,先向系统发出请求,对该数据对象进行加锁。
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。 4.封锁类型。
排他锁(写锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任
何事务都不能再对A加任何类型的锁,直到T释放A上的锁为止。保证了其他事务在T释放A上的锁之前不能再读取和修改A。
共享锁(读锁):若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,
其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁为止。保证了其他事务可以读A,但在T释放S锁之前不能对A做任何修改。 5.封锁协议。
一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
可防止丢失修改,保证事务T是可恢复的。
二级封锁协议:在一级封锁协议基础上增加事务T在读取数据R之前必须先对其加S
锁,读完后即可释放S锁。二级封锁协议可以防止丢失修改和读“脏”数据
三级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S
锁,直到事务结束才释放。三级封锁协议可防止丢失修改、读脏数据和不可重复读,容易造成比较多的死锁。 6.活锁和死锁
活锁:有一个事务一直等待无法执行。 死锁:T1等待T2,T2等待T1。 避免活锁:采用先来先服务的策略。 预防死锁的方法:一次封锁法、顺序封锁法 死锁的诊断:超时法、事务等待图法 7.可串行化调度。
多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的
结果相同。
可串行性是并发事务正确调度的准则。一个给定的并发调度,当且仅当它是可串行化的,
才认为是正确调度。 8.两段锁协议。
实现并发调度的可串行性,从而保证调度的正确性。
9.所有事务必须分两个阶段对数据项加锁和解锁。
在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。 在释放一个封锁之后,事务不在申请和获得任何其他封锁。
指事务分为两个阶段:一、获得封锁,事务可以申请获得任何数据项上的任何类型的锁,不能释放任何锁。二:释放封锁,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。
事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。
若调度是遵守两段锁协议的,因此一定是一个可串行化调度。反之不然。
应用题
1.授权例题
把对Student表和Course表的全部权限授予用户U2和U3 GRANT ALL PRIVILIGES ON TABLE Student, Course TO U2, U3;
把对表SC的查询权限授予所有用户 GRANT SELECT ON TABLE SC TO PUBLIC
把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户 GRANT INSERT ON TABLE SC TO U5
WITH GRANT OPTION;