ChⅤ 数据库系统管理
数据库管理
数据库管理(Database Management)是指为保证数据库系统的正常运行和服务质量必须进行的系统管理工作。
为什么需要数据库管理
- 数据库系统随规模增大,系统会变得异常复杂
- 多用户数据库应用带来数据库访问复杂性
- 数据安全和数据隐私对机构和用户都非常重要
- 数据库系统随数据量增加和使用时间增长其性能会降低系统遭遇意外事件,数据库损坏或数据丢失
数据库管理目标
- 保障数据库系统正常稳定运行
- 充分发挥数据库系统的软硬件处理能力
- 确保数据库系统安全和用户数据隐私性
- 有效管理数据库用户及其角色权限
- 解决数据库系统性能优化、系统故障与数据损坏等问题
- 最大程度地发挥数据库对其所属机构的作用
DBMS 功能
- 数据库定义
- 数据库结构创建,结构修改,完整性约束定义,索引结构定义
- 数据库运行管理
- 系统启停控制,并发控制,事务管理,安全性控制,完整性控制,日志管理,性能监控
- 数据库组织与存储
- 缓冲区管理,数据组织,数据存取
- 数据库维护
- 数据载入,数据转换,数据库备份&恢复,数据库重构,性能优化
- 数据库通信
- 数据的同步、复制、传输
事务管理
为什么需要事务管理
在数据库应用系统中,完成一个业务处理通常需要多个操作步骤才能完成处理。在每个操作步骤中,都可能遭遇失败,若没有一个处理机制,就可能造成操作数据混乱,从而破坏数据一致性。
事务的概念
[DataBase03#事务 Transaction]
在数据库中,事务(Transaction)是指由构成单个业务处理单元的一组数据库访问操作,要求它们要么都成功执行,要么都不执行。
- 最小的 DBMS 执行任务单元
- 最小的故障恢复任务单元
- 最小的并发控制任务单元
事务特性
- 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成。如果事务中的某个操作失败,那么整个事务将被回滚,数据库状态不会改变。
- 一致性(Consistency):事务确保数据库从一个一致的状态转换到另一个一致的状态。事务开始和结束时,所有的业务规则都必须保持一致。
- 隔离性(Isolation):每个事务都在一个独立的工作区中执行,事务之间不会互相影响。这意味着并发事务的修改必须被隔离,直到事务提交,其他事务才能看到这些修改。
- 持久性(Durability):一旦事务被提交,它对数据库的更改就是永久性的。即使发生系统故障,更改也不会丢失。
事务并发执行是指多个事务程序在数据库系统中同一时段运行,从而改善系统的资源利用率、减少事务运行的平均等待时间
事务 SQL 程序:
并发控制
为什么需要并发控制?
当多个事务程序在 DBMS 系统中同时运行时,可能会出现对一些共享数据同时进行访问操作,如一些事务修改数据,另一些事务读取数据。这些并发的共享数据操作,如果在 DBMS 中没有一定的约束控制情况下,可能会带来数据不一致性或事务程序死锁问题。因此,在多个事务并发运行时必须进行并发控制处理
并发控制目的
- 支持并发事务处理,使更多用户并行操作,提高系统的并发访问能力。
- 保证一个事务工作不会对另一个事务工作产生不合理的影响。
并发控制需解决的问题
丢失更新 lost update
两个事务同时读取同一数据,其中一个事务修改数据后,另一个事务也修改了同一数据,导致其中一个事务的修改被覆盖。脏读 dirty read
事务 T1 更新了数据,但没有 Commit,T2 读取了 T1 更新的数据,但 T1 通过 ROLLBACK 撤销事务,即 T2 读取到脏数据。不可重复读 nonrepeatable read
事务 T1 读取 a,T2 修改 a 并提交,T1 再次读取 a,发现 a 的值发生了变化。即一个事务的两次读取相同的资源但得到不同的值幻读 phantom read
事务 T1 按一定条件从数据库中读取某些数据记录后,事务 T2 在其中插入了一些记录,当 T1 再次按相同条件读取数据时,发现多了一些记录。称为幻读。与不可重复读类似。
A transaction re-executes a query returning a set of rows that satisfy a search condition and finds that the set of rows satisfying the condition has changed due to another recently-committed transaction.serialization anomaly
The result of successfully committing a group of transactions is inconsistent with all possible orderings of running those transactions one at a time.
加锁协议
一级加锁协议:任何事务在修改共享数据对象之前,必须对该数据执行排它锁定指令,直到该事务处理完成,才进行解锁指令执行。
特点:使用一级加锁协议,可避免出现更新丢失问题。但不能解决“不可重复读取”、“脏读”等数据不一致问题
二级加锁协议:在一级加锁协议基础上,针对并发事务的共享数据读操作,必须对该数据执行共享锁定指令,读完数据后即刻释放共享锁定。
特点:该加锁协议不但可以防止丢失更新,脏读问题。但有可能会出现“不可重复读取”的数据不一致问题。
三级加锁协议:在一级加锁协议基础上,针对并发事务对共享数据进行读操作,必须对该数据执行共享锁定指令,直到该事务处理结束才释放共享锁定。
特点:该加锁协议可以防止丢失更新、脏读、不可重复读取
两阶段锁定协议
并发事务的正确调度准则:
一个给定的并发事务调度,当且仅当它是可串行化时,才能保证正确调度。
保证可串行化的一个协议是:二阶段锁定协议
二阶段锁定协议规定每个事务必须分两个阶段提出加锁和解锁申请:
增长阶段,事务只能获得锁,但不能释放锁。
缩减阶段,事务只能释放锁,但不能获得新锁。
结论:若并发事务执行的所有事务都遵从两阶段锁定协议,则这些事务的任何并发调度都是可串行化调度,即这些并发调度执行结果可以保证数据库一致性。
数据库备份与恢复
数据库备份——是指将数据库当前数据和状态进行副本复制,以便当数据库受到破坏或丢失数据时可以进行修复。
数据库恢复——是指数据库中数据丢失或被破坏时,从备份副本将数据库从错误状态恢复到某一正确状态。
备份方法:
完全数据库备份
差异数据库备份
事务日志备份
文件备份
备份方式
热备份 Hot Backup,也被称为在线备份,是在数据库仍在运行和处理事务的同时进行的备份。这种备份方式的主要优点是它不会中断数据库服务,但可能会稍微影响数据库的性能。
冷备份 Cold Backup:也被称为离线备份,是在数据库完全关闭的情况下进行的备份。这种备份方式可以确保备份的数据一致性,但在备份期间,数据库无法提供服务。
备份时机:当系统数据库重要数据被修改、日志被清理、用户数据库创建、用户数据库加载等事件出现时。
数据库备份实现