
第5章数据库安全ppt课件.ppt
336页第第5章章 数据库安全数据库安全l5.1 安全性安全性l5.2 完整性完整性l5.3 并发控制并发控制l5.4 恢复恢复l5.5 数据库复制与数据库镜像数据库复制与数据库镜像第第5章章 数据库安全数据库安全l5.1 安全性安全性l5.2 完整性完整性l5.3 并发控制并发控制l5.4 恢复恢复l5.5 数据库复制与数据库镜像数据库复制与数据库镜像5.1 5.1 安全性安全性l 问题的提出问题的提出–数据库的一大特点是数据可以共享数据库的一大特点是数据可以共享–但数据共享必然带来数据库的安全性问题但数据共享必然带来数据库的安全性问题–数数据据库库系系统统中中的的数数据据共共享享不不能能是是无无条条件件的的共共享享例:军事秘密、例:军事秘密、 国家机密、国家机密、 新产品实验数据、新产品实验数据、 市场需求分析、市场营销策略、销售计划、市场需求分析、市场营销策略、销售计划、 客户档案、客户档案、 医疗档案、医疗档案、 银行储蓄数据银行储蓄数据安全性(续)安全性(续)–数数据据库库中中数数据据的的共共享享是是在在DBMS统统一一的的严严格格的的控控制制之之下下的的共共享享,,即即只只允允许许有有合合法法使使用用权权限的用户访问允许他存取的数据限的用户访问允许他存取的数据–数数据据库库系系统统的的安安全全保保护护措措施施是是否否有有效效是是数数据据库系统主要的性能指标之一库系统主要的性能指标之一安全性(续)安全性(续)l什么是数据库的安全性什么是数据库的安全性–数数据据库库的的安安全全性性是是指指保保护护数数据据库库,,防防止止因因用用户户非非法法使使用用数数据据库库造造成成数数据据泄泄露露、、更更改改或或破破坏。
坏l什么是数据的保密什么是数据的保密–数数据据保保密密是是指指用用户户合合法法地地访访问问到到机机密密数数据据后后能否对这些数据保密能否对这些数据保密–通过制订法律道德准则和政策法规来保证通过制订法律道德准则和政策法规来保证5.1 安全性安全性5.1.1 安全性控制的一般方法安全性控制的一般方法5.1.2 Oracle数据库的安全性措施数据库的安全性措施5.1 安全性安全性5.1.1 安全性控制的一般方法安全性控制的一般方法5.1.2 Oracle数据库的安全性措施数据库的安全性措施5.1.1 安全性控制的一般方法安全性控制的一般方法l非法使用数据库的情况非法使用数据库的情况–用户编写一段合法的程序绕过用户编写一段合法的程序绕过DBMS及其授及其授权机制,通过操作系统直接存取、修改或备权机制,通过操作系统直接存取、修改或备份数据库中的数据;份数据库中的数据;–直接或编写应用程序执行非授权操作;直接或编写应用程序执行非授权操作;数据库安全性控制概述(续)数据库安全性控制概述(续)–通过多次合法查询数据库从中推导出一些保通过多次合法查询数据库从中推导出一些保密数据密数据 例:某数据库应用系统禁止查询单个人的工资,但例:某数据库应用系统禁止查询单个人的工资,但允许查任意一组人的平均工资。
用户甲想了解张三允许查任意一组人的平均工资用户甲想了解张三的工资,于是他:的工资,于是他: 首先查询包括张三在内的一组人的平均工资首先查询包括张三在内的一组人的平均工资 然后查用自己替换张三后这组人的平均工资然后查用自己替换张三后这组人的平均工资 从而推导出张三的工资从而推导出张三的工资–破坏安全性的行为可能是无意的,故意的,破坏安全性的行为可能是无意的,故意的,恶意的数据库安全性控制概述(续)数据库安全性控制概述(续) 应用应用DBMSOS DB 低低 高高安全性控制层次安全性控制层次 方法:方法: 用户标识用户标识和鉴定和鉴定 存取控制存取控制审计审计视图视图 操作系统操作系统 安全保护安全保护 密码存储密码存储l计算机系统中的安全模型计算机系统中的安全模型 数据库安全性控制概述(续)数据库安全性控制概述(续)l数据库安全性控制的常用方法数据库安全性控制的常用方法–用户标识和鉴定用户标识和鉴定–存取控制存取控制–视图视图–审计审计–密码存储密码存储1. 用户标识与鉴定用户标识与鉴定l用户标识与鉴别(用户标识与鉴别(Identification & Authentication))–系统提供的最外层安全保护措施系统提供的最外层安全保护措施用户标识与鉴定(续)用户标识与鉴定(续)l基本方法基本方法–系统提供一定的方式让用户标识自己的名字系统提供一定的方式让用户标识自己的名字或身份;或身份;–系统内部记录着所有合法用户的标识;系统内部记录着所有合法用户的标识;–每次用户要求进入系统时,由系统核对用户每次用户要求进入系统时,由系统核对用户提供的身份标识;提供的身份标识;–通过鉴定后才提供机器使用权。
通过鉴定后才提供机器使用权–用户标识和鉴定可以重复多次用户标识和鉴定可以重复多次用户标识与鉴定(续)用户标识与鉴定(续)l让用户标识自己的名字或身份的方法让用户标识自己的名字或身份的方法–用户名用户名/口令口令•简单易行,容易被人窃取简单易行,容易被人窃取–每个用户预先约定好一个每个用户预先约定好一个计算过程计算过程或者或者函数函数•系统提供一个随机数系统提供一个随机数•用户根据自己预先约定的计算过程或者函用户根据自己预先约定的计算过程或者函数进行计算数进行计算•系统根据用户计算结果是否正确鉴定用户系统根据用户计算结果是否正确鉴定用户身份身份2. 存取控制存取控制l存取控制机制的功能存取控制机制的功能–存取控制机制的组成存取控制机制的组成• 定义存取权限定义存取权限• 检查存取权限检查存取权限用户权限定义和合法权检查机制一起组成用户权限定义和合法权检查机制一起组成了了DBMS的安全子系统的安全子系统存取控制(续)存取控制(续)–定义存取权限定义存取权限•在数据库系统中,为了保证用户只能访问在数据库系统中,为了保证用户只能访问他有权存取的数据,必须预先对每个用户他有权存取的数据,必须预先对每个用户定义存取权限。
定义存取权限–检查存取权限检查存取权限•对于通过鉴定获得上机权的用户(即合法对于通过鉴定获得上机权的用户(即合法用户),系统根据他的存取权限定义对他用户),系统根据他的存取权限定义对他的各种操作请求进行控制,确保他只执行的各种操作请求进行控制,确保他只执行合法操作合法操作存取控制(续)存取控制(续)l定义存取权限定义存取权限–存取权限存取权限• 存取权限由两个要素组成存取权限由两个要素组成–数据对象数据对象–操作类型操作类型存取控制(续)存取控制(续)–定义存取权限定义存取权限•定义一个用户可以在哪些数据对象上进行定义一个用户可以在哪些数据对象上进行哪些类型的操作哪些类型的操作•在数据库系统中,定义存取权限称为授权在数据库系统中,定义存取权限称为授权((Authorization))•授权定义经过编译后存放在数据字典中授权定义经过编译后存放在数据字典中存取控制(续)存取控制(续)–关系系统中的存取权限关系系统中的存取权限•类型类型 数据对象数据对象操作类型操作类型模模 式式 模模 式式建立、修改、删除建立、修改、删除外模式外模式 建立、删除建立、删除 内模式内模式建立、删除建立、删除数数 据据 表表查找、插入、修改、删除查找、插入、修改、删除属性列属性列查找、插入、修改、删除查找、插入、修改、删除存取控制(续)存取控制(续)–关系系统中的存取权限关系系统中的存取权限(续续)•定义方法定义方法–GRANT/REVOKE自主存取控制方法(续)自主存取控制方法(续)–关系系统中的存取权限关系系统中的存取权限(续续)•例例: 一张授权表一张授权表 用户名用户名 数据对象名数据对象名 允许的操作类型允许的操作类型 王平王平 关系关系Student SELECT 李青李青 关系关系Student UPDATE 李青李青 关系关系Course ALL 李青李青 关系关系SC UPDATE 李青李青 关系关系SC SELECT 李青李青 关系关系SC SELECT存取控制(续)存取控制(续)l检查存取权限检查存取权限–对于获得上机权后又进一步发出存取数据库对于获得上机权后又进一步发出存取数据库操作的用户操作的用户•DBMS查找数据字典,根据其存取权限对查找数据字典,根据其存取权限对操作的合法性进行检查操作的合法性进行检查•若用户的操作请求超出了定义的权限,系若用户的操作请求超出了定义的权限,系统将拒绝执行此操作统将拒绝执行此操作存取控制(续)存取控制(续)l 授权粒度授权粒度–授权粒度是指可以定义的数据对象的范围授权粒度是指可以定义的数据对象的范围•它是衡量授权机制是否灵活的一个重要指它是衡量授权机制是否灵活的一个重要指标。
标•授权定义中数据对象的粒度越细,即可以授权定义中数据对象的粒度越细,即可以定义的数据对象的范围越小,授权子系统定义的数据对象的范围越小,授权子系统就越灵活就越灵活存取控制(续)存取控制(续)–关系数据库中授权的数据对象粒度关系数据库中授权的数据对象粒度• 数据库数据库• 表表• 属性列属性列• 行行–能否提供与数据值有关的授权反映了授权子能否提供与数据值有关的授权反映了授权子系统精巧程度系统精巧程度存取控制(续)存取控制(续)l实现与数据值有关的授权实现与数据值有关的授权–利用存取谓词利用存取谓词•存取谓词可以很复杂存取谓词可以很复杂–可以引用系统变量,如终端设备号,可以引用系统变量,如终端设备号,系统时钟等,实现与时间地点有关的系统时钟等,实现与时间地点有关的存取权限,这样用户只能在某段时间存取权限,这样用户只能在某段时间内,某台终端上存取有关数据内,某台终端上存取有关数据 例:规定例:规定“教师只能在每年教师只能在每年1月份和月份和7月份星期一月份星期一至星期五上午至星期五上午8点到下午点到下午5点处理学生成绩数据点处理学生成绩数据”存取控制(续)存取控制(续)例:扩充后的授权表例:扩充后的授权表 用户名用户名 数据对象名数据对象名 允许的操作类型允许的操作类型 存取谓词存取谓词王平王平 关系关系Student SELECT Sdept= CS 张张明明霞霞 关关系系Student UPDATE Sname= 张张明明霞霞 张明霞张明霞 关系关系 Course ALL 空空3. 定义视图定义视图l视图机制把要保密的数据对无权存取这些数据视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,从而自动地对数据提供一定的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
程度的安全保护l 视图机制更主要的功能在于提供数据独立性,视图机制更主要的功能在于提供数据独立性,其安全保护功能太不精细,往往远不能达到应其安全保护功能太不精细,往往远不能达到应用系统的要求用系统的要求定义视图(续)定义视图(续)l在实际应用中通常是视图机制与授权机制配合在实际应用中通常是视图机制与授权机制配合使用,首先用视图机制屏蔽掉一部分保密数据,使用,首先用视图机制屏蔽掉一部分保密数据,然后在视图上面再进一步定义存取权限然后在视图上面再进一步定义存取权限–这时视图机制实际上间接实现了支持存取谓这时视图机制实际上间接实现了支持存取谓词的用户权限定义词的用户权限定义定义视图(续)定义视图(续)例:王平只能检索计算机系学生的信息例:王平只能检索计算机系学生的信息 先建立计算机系学生的视图先建立计算机系学生的视图CS_Student CREATE VIEW CS_Student AS SELECT FROM Student WHERE Sdept='CS';;定义视图(续)定义视图(续)在视图上进一步定义存取权限在视图上进一步定义存取权限 GRANT SELECT ON CS_Student TO 王平王平 ;;4. 审计审计l什么是审计什么是审计–审计功能启用一个专用的审计日志(审计功能启用一个专用的审计日志(Audit Log),),系统自动将用户对数据库的所有操系统自动将用户对数据库的所有操作记录在上面作记录在上面–DBA可以利用审计日志中的追踪信息,重现可以利用审计日志中的追踪信息,重现导致数据库现有状况的一系列事件,以找出导致数据库现有状况的一系列事件,以找出非法存取数据的人非法存取数据的人–C2以上安全级别的以上安全级别的DBMS必须具有审计功能必须具有审计功能审计(续)审计(续)l审计功能的可选性审计功能的可选性–审计很费时间和空间,所以审计很费时间和空间,所以DBMS往往都将往往都将其作为可选特征其作为可选特征•DBA可以根据应用对安全性的要求,灵活可以根据应用对安全性的要求,灵活地打开或关闭审计功能。
地打开或关闭审计功能审计(续)审计(续)–用户识别和鉴定、存取控制、视图等安全性用户识别和鉴定、存取控制、视图等安全性措施均为强制性机制,将用户操作限制在规措施均为强制性机制,将用户操作限制在规定的安全范围内审计技术是预防手段,监定的安全范围内审计技术是预防手段,监测可能的不合法行为测可能的不合法行为审计(续)审计(续)–由于任何系统的安全性措施都不可能是完美由于任何系统的安全性措施都不可能是完美无缺的,蓄意盗窃、破坏数据的人总是想方无缺的,蓄意盗窃、破坏数据的人总是想方设法打破控制所以,当数据相当敏感,或设法打破控制所以,当数据相当敏感,或者对数据的处理极为重要时,就必须使用审者对数据的处理极为重要时,就必须使用审计技术5. 数据加密数据加密l数据加密数据加密–防止数据库中数据在存储和传输中失密的有防止数据库中数据在存储和传输中失密的有效手段效手段l加密的基本思想加密的基本思想–根据一定的算法将原始数据(术语为明文,根据一定的算法将原始数据(术语为明文,Plain text))变换为不可直接识别的格式(术变换为不可直接识别的格式(术语为密文,语为密文,Cipher text))–不知道解密算法的人无法获知数据的内容不知道解密算法的人无法获知数据的内容数据加密(续)数据加密(续)l加密方法加密方法– 替换方法替换方法•使用密钥(使用密钥(Encryption Key))将明文中的每一个将明文中的每一个字符转换为密文中的一个字符字符转换为密文中的一个字符–置换方法置换方法•将明文的字符按不同的顺序重新排列将明文的字符按不同的顺序重新排列– 这两种方法结合能提供相当高的安全程度这两种方法结合能提供相当高的安全程度 例:美国例:美国1977年制定的官方加密标准:数据加密标年制定的官方加密标准:数据加密标准(准(Data Encryption Standard,,简称简称DES))数据加密(续)数据加密(续)lDBMS中的数据加密中的数据加密–有些数据库产品提供了数据加密例行程序有些数据库产品提供了数据加密例行程序–有些数据库产品本身未提供加密程序,但提有些数据库产品本身未提供加密程序,但提供了接口供了接口数据加密(续)数据加密(续)l数据加密功能通常也作为可选特征,允数据加密功能通常也作为可选特征,允许用户自由选择许用户自由选择–数据加密与解密是比较费时的操作数据加密与解密是比较费时的操作–数据加密与解密程序会占用大量系统资源数据加密与解密程序会占用大量系统资源–应该只对高度机密的数据加密应该只对高度机密的数据加密5.1 安全性安全性5.1.1 安全性控制的一般方法安全性控制的一般方法5.1.2 Oracle数据库的安全性措施数据库的安全性措施5.1.2 Oracle数据库的安全性措施数据库的安全性措施lORACLE的安全措施的安全措施:–用户标识和鉴定用户标识和鉴定–授权和检查机制授权和检查机制–审计技术审计技术–用户通过触发器灵活定义自己的安全性措施用户通过触发器灵活定义自己的安全性措施一、一、ORACLE的用户标识和鉴定的用户标识和鉴定lORACLE允许用户重复标识三次允许用户重复标识三次l如果三次仍未通过,系统自动退出如果三次仍未通过,系统自动退出二、二、ORACLE的授权与检查机制的授权与检查机制lORACLE授权和检查机制的特色授权和检查机制的特色–ORACLE的权限包括的权限包括系统权限系统权限和和数据库对象的权限数据库对象的权限–采用非集中式的授权机制采用非集中式的授权机制–每个用户授予与回收自己创建的数据库对象的权限每个用户授予与回收自己创建的数据库对象的权限–DBA负责授予与回收系统权限,也可以授予与回收负责授予与回收系统权限,也可以授予与回收所有数据库对象的权限所有数据库对象的权限–允许重复授权,即可将某一权限多次授予同一用户,允许重复授权,即可将某一权限多次授予同一用户,系统不会出错系统不会出错–允许无效回收,即用户不具有某权限,但回收此权允许无效回收,即用户不具有某权限,但回收此权限的操作仍是成功的。
限的操作仍是成功的ORACLE的授权与检查机制(续)的授权与检查机制(续)lORACLE的权限的权限– 系统权限系统权限– 数据库对象的权限数据库对象的权限1.系统权限系统权限l80多种系统权限多种系统权限– 创建会话创建会话– 创建表创建表– 创建视图创建视图– 创建用户创建用户系统权限(续)系统权限(续)lDBA在创建一个用户时需要将其中的一些权限在创建一个用户时需要将其中的一些权限授予该用户授予该用户l角色角色–ORACLE支持角色的概念支持角色的概念–角色就是一组系统权限的集合,目的在于减角色就是一组系统权限的集合,目的在于减化权限管理化权限管理–ORACLE允许允许DBA定义角色定义角色–ORACLE提供的预定义角色提供的预定义角色• CONNECT• RESOURCE• DBA系统权限(续)系统权限(续)lCONNECT角色角色–允许用户登录数据库并执行数据查询和操纵允许用户登录数据库并执行数据查询和操纵• ALTER TABLE• CREATE VIEW / INDEX • DROP TABLE / VIEW / INDEX• GRANT, REVOKE• INSERT, UPDATE, DELETE• SELETE• AUDIT / NOAUDIT系统权限(续)系统权限(续)lRESOURCE角色角色–允许用户建表,即执行允许用户建表,即执行CREATE TABLE操操作作–由于创建表的用户将拥有该表,因此他具有由于创建表的用户将拥有该表,因此他具有对该表的任何权限对该表的任何权限系统权限(续)系统权限(续)lDBA角色角色–允许用户执行授权命令,建表,对任何表的允许用户执行授权命令,建表,对任何表的数据进行操纵。
数据进行操纵–DBA角色涵盖了前两种角色,此外还可以执角色涵盖了前两种角色,此外还可以执行一些管理操作行一些管理操作–DBA角色拥有最高级别的权限角色拥有最高级别的权限系统权限(续)系统权限(续)例:例:DBA建立一用户建立一用户U12后,欲将后,欲将ALTER TABLE、、CREATE VIEW、、CREATE INDEX、、DROP TABLE、、DROP VIEW、、DROP INDEX, GRANT,REVOKE、、INSERT 、、SELETE、、UPDATE、、DELETE、、AUDIT、、NOAUDIT等系统权限授予等系统权限授予U12,,则可以只简则可以只简单地将单地将CONNECT角色授予角色授予U12即可:即可: GRANT CONNECT TO U12; 这样就可以省略十几条这样就可以省略十几条GRANT语句2.数据库对象的权限数据库对象的权限lORACLE可以授权的数据库对象可以授权的数据库对象– 基本表基本表– 视图视图– 序列序列– 同义词同义词– 存储过程存储过程– 函数函数数据库对象的权限(续)数据库对象的权限(续)l基本表的安全性级别基本表的安全性级别– 表级表级– 行级行级– 列级列级数据库对象的权限(续)数据库对象的权限(续)l表级安全性表级安全性–表的创建者或表的创建者或DBA可以把对表的权限授予其可以把对表的权限授予其他用户他用户数据库对象的权限(续)数据库对象的权限(续)–表级权限表级权限• ALTER:: 修改表定义修改表定义• DELETE::删除表记录删除表记录• INDEX:: 在表上建索引在表上建索引• INSERT:: 向表中插入数据记录向表中插入数据记录• SELECT::查找表中记录查找表中记录• UPDATE::修改表中的数据修改表中的数据• ALL:: 上述所有权限上述所有权限数据库对象的权限(续)数据库对象的权限(续)– 表级授权使用表级授权使用GRANT//REVOKE语句语句 例:例: GRANT SELECT ON SC TO U12;数据库对象的权限(续)数据库对象的权限(续)l行级安全性行级安全性– ORACLE行级安全性由视图间接实现行级安全性由视图间接实现数据库对象的权限(续)数据库对象的权限(续)例:用户例:用户U1只允许用户只允许用户U12查看自己创建的查看自己创建的Student表中有关信息系学生的信息,则首先创表中有关信息系学生的信息,则首先创建视图信息系学生视图建视图信息系学生视图S_IS:: CREATE VIEW S_IS AS SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student WHERE Sdept='IS'; 然后将关于该视图的然后将关于该视图的SELECT权限授予权限授予U12用户:用户: GRANT SELECT ON S_IS TO U12;数据库对象的权限(续)数据库对象的权限(续)l列级安全性列级安全性– 实现方法实现方法• 由视图间接实现由视图间接实现• 直接在基本表上定义直接在基本表上定义数据库对象的权限(续)数据库对象的权限(续)l列级安全性列级安全性(续续)–借助视图实现列级安全性借助视图实现列级安全性CREATE VIEW S_V AS SELECT Sno,Sname FROM Student;; GRANT SELECT ON S_V TO U12;数据库对象的权限(续)数据库对象的权限(续)l列级安全性列级安全性(续续)– 直接在基本表上定义列级安全性直接在基本表上定义列级安全性 例:例:GRANT UPDATE(Sno,Cno) ON SC TO U12;数据库对象的权限(续)数据库对象的权限(续)l三级对象的层次结构三级对象的层次结构–表、行、列三级对象自上而下构成一个层次表、行、列三级对象自上而下构成一个层次结构结构–上一级对象的权限制约下一级对象的权限上一级对象的权限制约下一级对象的权限 例:当一个用户拥有了对某个表的例:当一个用户拥有了对某个表的UPDATE权权 限,即相当于在表的所有列了都拥有了限,即相当于在表的所有列了都拥有了 UPDATE 权限。
权限数据库对象的权限(续)数据库对象的权限(续)lORACLE对数据库对象的权限采用分散控制方对数据库对象的权限采用分散控制方式式–允许具有允许具有WITH GRANT OPTION的用户把的用户把相应权限或其子集传递授予其他用户相应权限或其子集传递授予其他用户lORACLE不允许循环授权,即授权者不能把权不允许循环授权,即授权者不能把权限再授予其授权者或祖先限再授予其授权者或祖先 U1 ───→ U2 ───→ U3 ───→ U4 ↑ │ └───────×─────────┘ORACLE的授权与检查机制(续)的授权与检查机制(续)lORACLE的权限检查机制的权限检查机制–ORACLE把所有权限信息记录在数据字典中把所有权限信息记录在数据字典中–当用户进行数据库操作时,当用户进行数据库操作时,ORACLE首先根首先根据数据字典中的权限信息,检查操作的合法据数据字典中的权限信息,检查操作的合法性。
性–在在ORACLE中,安全性检查是任何数据库操中,安全性检查是任何数据库操作的第一步作的第一步三、三、ORACLE的审计技术的审计技术l审计分类审计分类–审计分类审计分类 •用户级审计用户级审计•系统级审计系统级审计三、三、ORACLE的审计技术的审计技术l审计分类审计分类(续续)– 用户级审计用户级审计•设置者设置者–任何任何ORACLE用户用户•审计对象审计对象–用户针对自己创建的数据库表或视图进行审计用户针对自己创建的数据库表或视图进行审计•审计内容审计内容–所有用户对这些表或视图的一切成功和/或不所有用户对这些表或视图的一切成功和/或不成功的访问要求成功的访问要求–所有用户对这些表或视图的各类所有用户对这些表或视图的各类SQL操作操作ORACLE的审计技术的审计技术(续续)l审计分类审计分类(续续)–系统级审计系统级审计•设置者设置者–DBA•审计对象和内容审计对象和内容–成功或失败的登录要求成功或失败的登录要求–GRANT和和REVOKE操作操作–其他数据库级权限下的操作其他数据库级权限下的操作ORACLE的审计技术(续)的审计技术(续)l 审计设置审计设置– 可以自由设置可以自由设置• 是否使用审计是否使用审计• 对哪些表进行审计对哪些表进行审计• 对哪些操作进行审计对哪些操作进行审计ORACLE的审计技术(续)的审计技术(续)l 审计设置审计设置(续续)–设置方法设置方法• AUDIT::设置审计功能设置审计功能 例:例: AUDIT ALTER,UPDATE ON SC;• NOAUDIT::取消审计功能取消审计功能 例:例: NOAUDIT ALL ON SC;ORACLE的审计技术(续)的审计技术(续)l与审计功能有关的数据字典表与审计功能有关的数据字典表– SYS.TABLES::审计设置审计设置– SYS.AUDIT_TRAIL::审计内容审计内容四、用户定义的安全性措施四、用户定义的安全性措施l用数据库级触发器定义用户级安全性用数据库级触发器定义用户级安全性例:规定只能在工作时间内更新例:规定只能在工作时间内更新Student表表 可以定义如下触发器:可以定义如下触发器: 用户定义的安全性措施(续)用户定义的安全性措施(续)CREATE OR REPLACE TRIGGER secure_studentBEFORE INSERT OR UPDATE OR DELETE ON Student BEGIN IF (TO_CHAR(sysdate,'DY') IN ('SAT','SUN')) OR (TO_NUMBER(sysdate,'HH24') NOT BETWEEN 8 AND 17) THEN RAISE_APPLICATION_ERROR(-20506, 'You may only change data during normal business hours.') END IF;END; 用户定义的安全性措施(续)用户定义的安全性措施(续)–触发器一经定义后,将存放在数据字典中触发器一经定义后,将存放在数据字典中–用户每次对用户每次对Student表执行表执行INSERT、、UPDATE或或DELETE操作时都会自动触发该操作时都会自动触发该触发器,由系统检查当时的系统时间,如果触发器,由系统检查当时的系统时间,如果是周六或周日,或者不是是周六或周日,或者不是8点至点至17点,系统点,系统会拒绝执行用户的更新操作,并提示出错信会拒绝执行用户的更新操作,并提示出错信息。
息用户定义的安全性措施(续)用户定义的安全性措施(续)l利用触发器进一步细化审计规则,使审利用触发器进一步细化审计规则,使审计操作的粒度更细计操作的粒度更细第第5章章 数据库安全数据库安全l5.1 安全性安全性l5.2 完整性完整性l5.3 并发控制并发控制l5.4 恢复恢复l5.5 数据库复制与数据库镜像数据库复制与数据库镜像5.2 完整性完整性l什么是数据库的完整性什么是数据库的完整性–数数据据库库的的完完整整性性是是指指数数据据的的正正确确性性和和相相容容性性,,防止不合语义的数据进入数据库防止不合语义的数据进入数据库例例: 学生的年龄必须是整数,取值范围为学生的年龄必须是整数,取值范围为14--29;; 学生的性别只能是男或女;学生的性别只能是男或女; 学生的学号一定是唯一的;学生的学号一定是唯一的; 学生所在的系必须是学校开设的系;学生所在的系必须是学校开设的系;–数数据据库库是是否否具具备备完完整整性性关关系系到到数数据据库库系系统统能能否否真真实实地地反反映映现现实实世世界界,,因因此此维维护护数数据据库库的的完整性是非常重要的。
完整性是非常重要的完整性(续)完整性(续)l完整性控制机制完整性控制机制1.完整性约束条件定义机制完整性约束条件定义机制2.完整性检查机制完整性检查机制3.违约反应违约反应 完整性(续)完整性(续)l完整性控制机制完整性控制机制(续续)1.完整性约束条件定义机制完整性约束条件定义机制–完整性约束条件是数据模型的一个重要组成完整性约束条件是数据模型的一个重要组成部分部分,它约束了数据库中数据的语义它约束了数据库中数据的语义–DBMS应提供手段让用户根据现实世界的语应提供手段让用户根据现实世界的语义定义数据库的完整性约束条件,并把它们义定义数据库的完整性约束条件,并把它们作为模式的一部分存入数据库中作为模式的一部分存入数据库中 完整性(续)完整性(续)l完整性控制机制完整性控制机制(续续)2.完整性检查机制完整性检查机制–检查用户发出的操作请求是否违背了完整性检查用户发出的操作请求是否违背了完整性约束条件约束条件 完整性(续)完整性(续)l完整性控制机制完整性控制机制(续续)3.违约反应违约反应–如果发现用户的操作请求使数据违背了完整如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据性约束条件,则采取一定的动作来保证数据的完整性。
的完整性5.2 完整性完整性5.2.1 完整性约束条件完整性约束条件5.2.2 完整性控制完整性控制5.2.3 Oracle的完整性的完整性5.2 完整性完整性5.2.1 完整性约束条件完整性约束条件5.2.2 完整性控制完整性控制5.2.3 Oracle的完整性的完整性5.2.1 完整性约束条件完整性约束条件l整个完整性控制都是围绕完整性约束条件进行整个完整性控制都是围绕完整性约束条件进行的,从这个角度说,完整性约束条件是完整性的,从这个角度说,完整性约束条件是完整性控制机制的核心控制机制的核心完整性约束条件(续)完整性约束条件(续)l完整性约束条件作用的对象完整性约束条件作用的对象–对象对象•列列–对属性的取值类型、范围、精度等的对属性的取值类型、范围、精度等的约束条件约束条件•元组元组–对元组中各个属性列间的联系的约束对元组中各个属性列间的联系的约束•关系关系–对若干元组间、关系集合上以及关系对若干元组间、关系集合上以及关系之间的联系的约束之间的联系的约束完整性约束条件(续)完整性约束条件(续)l完整性约束条件作用的对象完整性约束条件作用的对象(续续)–对象的状态对象的状态•静态静态–对静态对象的约束是反映数据库状态对静态对象的约束是反映数据库状态合理性的约束合理性的约束–这是最重要的一类完整性约束这是最重要的一类完整性约束•动态动态–对动态对象的约束是反映数据库状态对动态对象的约束是反映数据库状态变迁的约束变迁的约束完整性约束条件(续)完整性约束条件(续)l完整性约束条件分类完整性约束条件分类六类完整性约束条件六类完整性约束条件– 静态列级约束静态列级约束– 静态元组约束静态元组约束– 静态关系约束静态关系约束– 动态列级约束动态列级约束– 动态元组约束动态元组约束– 动态关系约束动态关系约束完整性约束条件(续)完整性约束条件(续)对象状态对象状态 动态列级约束动态列级约束 动态元组约束动态元组约束 动态关系约束动态关系约束 动态动态 ④④ ⑤⑤ ⑥⑥ 静态列级约束静态列级约束 静态元组约束静态元组约束 静态关系约束静态关系约束 静态静态 ①① ②② ③③ 列列 元组元组 关系关系 对象粒度对象粒度完整性约束条件(续)完整性约束条件(续)l1. 静态列级约束静态列级约束–静态列级约束是对一个列的取值域的说明,静态列级约束是对一个列的取值域的说明,这是最常见最简单同时也最容易实现的一类这是最常见最简单同时也最容易实现的一类完整性约束完整性约束完整性约束条件(续)完整性约束条件(续)–五类静态列级约束五类静态列级约束1) 对数据类型的约束,包括数据的类型、长对数据类型的约束,包括数据的类型、长度、单位、精度等度、单位、精度等 例:规定学生姓名的数据类型应为字符型,例:规定学生姓名的数据类型应为字符型,长度为长度为8。
2) 对数据格式的约束对数据格式的约束例:规定学号的格式为前两位表示入学年份,例:规定学号的格式为前两位表示入学年份,后四位为顺序编号出生日期的格式为后四位为顺序编号出生日期的格式为YY.MM.DD完整性约束条件(续)完整性约束条件(续)3) 对取值范围或取值集合的约束对取值范围或取值集合的约束例:规定成绩的取值范围为例:规定成绩的取值范围为0-100,年龄的,年龄的取值范围为取值范围为14-29,性别的取值集合为,性别的取值集合为[男男,女女]4) 对空值的约束对空值的约束空值表示未定义或未知的值,它与零值和空空值表示未定义或未知的值,它与零值和空格不同有的列允许空值,有的则不允许有的列允许空值,有的则不允许例如规定成绩可以为空值例如规定成绩可以为空值5) 其他约束其他约束例:关于列的排序说明,组合列等例:关于列的排序说明,组合列等完整性约束条件(续)完整性约束条件(续)l2. 静态元组约束静态元组约束–静态元组约束就是规定组成一个元组的各个静态元组约束就是规定组成一个元组的各个列之间的约束关系列之间的约束关系例:订货关系中包含发货量、订货量等列,例:订货关系中包含发货量、订货量等列, 发货量不得超过订货量发货量不得超过订货量 教师关系中包含职称、工资等列,教师关系中包含职称、工资等列, 教授的工资不得低于教授的工资不得低于700元元– 静态元组约束只局限在单个元组上静态元组约束只局限在单个元组上 完整性约束条件(续)完整性约束条件(续)l3. 静态关系约束静态关系约束–在一个关系的各个元组之间或者若干关系之在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束间常常存在各种联系或约束–常见静态关系约束常见静态关系约束1) 实体完整性约束实体完整性约束2) 参照完整性约束参照完整性约束3) 函数依赖约束函数依赖约束4) 统计约束统计约束完整性约束条件(续)完整性约束条件(续)–函数依赖约束函数依赖约束•大部分函数依赖约束都是隐含在关系模式大部分函数依赖约束都是隐含在关系模式结构中的,特别是规范化程度较高的关系结构中的,特别是规范化程度较高的关系模式(例如模式(例如3NF或或BCNF),),都由模式来都由模式来保持函数依赖。
保持函数依赖•但是在实际应用中,为了不使信息过于分但是在实际应用中,为了不使信息过于分离,常常不过分地追求规范化离,常常不过分地追求规范化完整性约束条件(续)完整性约束条件(续)–函数依赖约束函数依赖约束(续续)•这样在关系的字段间就可以存在一些函数这样在关系的字段间就可以存在一些函数依赖需要显式地表示出来依赖需要显式地表示出来例:在学生-课程-教师关系例:在学生-课程-教师关系SJT(S,J,T)中中存在如下的函数依赖存在如下的函数依赖((S,J))→T, T→J),,将将(S,J)作为主码,还需要显式地表示作为主码,还需要显式地表示T→J这个函数依赖这个函数依赖完整性约束条件(续)完整性约束条件(续)–统计约束统计约束•定义某个字段值与一个关系多个元组的统定义某个字段值与一个关系多个元组的统计值之间的约束关系计值之间的约束关系例:规定部门经理的工资不得高于本部门职工平例:规定部门经理的工资不得高于本部门职工平均工资的均工资的5倍,不得低于本部门职工平均工资的倍,不得低于本部门职工平均工资的2倍本部门职工的平均工资值是一个统计计算值本部门职工的平均工资值是一个统计计算值完整性约束条件(续)完整性约束条件(续)l4. 动态列级约束动态列级约束–动态列级约束是修改列定义或列值时应满足动态列级约束是修改列定义或列值时应满足的约束条件的约束条件完整性约束条件(续)完整性约束条件(续)–常见动态列级约束常见动态列级约束1) 修改列定义时的约束修改列定义时的约束例:规定将原来允许空值的列改为不允许空值时,例:规定将原来允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这种修改。
如果该列目前已存在空值,则拒绝这种修改 2) 修改列值时的约束修改列值时的约束•修改列值有时需要参照其旧值,并且新旧修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件值之间需要满足某种约束条件 例:职工工资调整不得低于其原来工资,学生年例:职工工资调整不得低于其原来工资,学生年龄只能增长龄只能增长完整性约束条件(续)完整性约束条件(续)l5. 动态元组约束动态元组约束–动态元组约束是指修改某个元组的值时需要动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种参照其旧值,并且新旧值之间需要满足某种约束条件约束条件例例: 职工工资调整不得低于其原来工资职工工资调整不得低于其原来工资+工龄工龄*1.5完整性约束条件(续)完整性约束条件(续)l6. 动态关系约束动态关系约束–动态关系约束是加在关系变化前后状态上的动态关系约束是加在关系变化前后状态上的限制条件限制条件例:事务一致性、原子性等约束条件例:事务一致性、原子性等约束条件完整性约束条件(续)完整性约束条件(续)l完整性约束条件小结完整性约束条件小结 粒粒 度度状态状态列列 级级 元元 组组 级级 关关 系系 级级 静静 态态 列定义列定义·类型类型·格式格式·值域值域 ·空值空值 元元组组值值应应满满足足的条件的条件 实体完整性约束实体完整性约束 参照完整性约束参照完整性约束 函数依赖约束函数依赖约束 统计约束统计约束 动动 态态 改变列定改变列定义或列值义或列值 元组新旧值之间元组新旧值之间应满足的约束条应满足的约束条件件 关系新旧状态间关系新旧状态间应满足的约束条应满足的约束条件件 5.2 完整性完整性5.2.1 完整性约束条件完整性约束条件5.2.2 完整性控制完整性控制5.2.3 Oracle的完整性的完整性5.2.2 完整性控制完整性控制一、一、DBMS的完整性控制机制的完整性控制机制二、关系系统三类完整性的实现二、关系系统三类完整性的实现三、参照完整性的实现三、参照完整性的实现一、一、DBMS的完整性控制机制的完整性控制机制lDBMS的完整性控制机制的主要功能的完整性控制机制的主要功能1. 定义功能定义功能2. 检查功能检查功能3. 违约反应违约反应DBMS的完整性控制机制(续)的完整性控制机制(续)l1. 定义功能定义功能–一个完善的完整性控制机制应该允许用户定一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。
义各类完整性约束条件DBMS的完整性控制机制(续)的完整性控制机制(续)l2. 检查功能检查功能–立即执行的约束立即执行的约束(Immediate constraints)•检查是否违背完整性约束的时机通常是在检查是否违背完整性约束的时机通常是在一条语句执行完后立即检查,我们称这类一条语句执行完后立即检查,我们称这类约束为立即执行的约束约束为立即执行的约束– 延迟执行的约束延迟执行的约束(Deferred constrainsts)•在某些情况下,完整性检查需要延迟到整在某些情况下,完整性检查需要延迟到整个事务执行结束后再进行,我们称这类约个事务执行结束后再进行,我们称这类约束为延迟执行的约束束为延迟执行的约束DBMS的完整性控制机制(续)的完整性控制机制(续)例:银行数据库中例:银行数据库中“借贷总金额应平衡借贷总金额应平衡”的约束的约束 就应该是延迟执行的约束就应该是延迟执行的约束–从账号从账号A转一笔钱到账号转一笔钱到账号B为一个事务,从为一个事务,从账号账号A转出去钱后账就不平了,必须等转入转出去钱后账就不平了,必须等转入账账号号B后账才能重新平衡,这时才能进行完后账才能重新平衡,这时才能进行完整性检查。
整性检查DBMS的完整性控制机制(续)的完整性控制机制(续)l3. 违约反应违约反应– 拒绝该操作拒绝该操作– 其他处理方法其他处理方法DBMS的完整性控制机制(续)的完整性控制机制(续)l完整性规则的形式化表述完整性规则的形式化表述一条完整性规则可以用一个五元组表示一条完整性规则可以用一个五元组表示:(D,,O,,A,,C,,P)–D((Data)) 约束作用的约束作用的数据对象数据对象;;–O((Operation)) 触发完整性检查的触发完整性检查的数据库操作数据库操作,即,即当用户发出什么操作请求时需要检查该完整性规则,当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查;是立即检查还是延迟检查;–A((Assertion)) 数据对象必须满足的数据对象必须满足的断言断言或或语义约语义约束束,这是规则的主体;,这是规则的主体;– C((Condition)) 选择选择A作用的数据对象值的作用的数据对象值的谓词谓词;;– P((Procedure)) 违反完整性规则时触发的违反完整性规则时触发的过程过程DBMS的完整性控制机制(续)的完整性控制机制(续)例例1:在:在“学号不能为空学号不能为空”的约束中的约束中D 约束作用的对象为约束作用的对象为Sno属性属性O 插入或修改插入或修改Student 元组时元组时A Sno不能为空不能为空C 无(无(A可作用于所有记录的可作用于所有记录的Sno属性)属性)P 拒绝执行该操作拒绝执行该操作DBMS的完整性控制机制(续)的完整性控制机制(续)例例2:在:在“教授工资不得低于教授工资不得低于1000元元”的约束中的约束中D 约束作用的对象为工资约束作用的对象为工资Sal属性属性O 插入或修改职工元组时插入或修改职工元组时A Sal不能小于不能小于1000C 职称职称=′教授教授′(A仅作用于职称仅作用于职称=‘教授教授’的记的记录录)P 拒绝执行该操作拒绝执行该操作二、关系系统三类完整性的实现二、关系系统三类完整性的实现l目前许多关系数据库系统都提供了定义和检查目前许多关系数据库系统都提供了定义和检查实体完整性、参照完整性和用户定义的完整性实体完整性、参照完整性和用户定义的完整性的功能。
的功能l对于违反实体完整性规则和用户定义的完整性对于违反实体完整性规则和用户定义的完整性规则的操作一般都是采用拒绝执行的方式进行规则的操作一般都是采用拒绝执行的方式进行处理l而对于违反参照完整性的操作,并不都是简单而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时还需要采取另一种方法,即地拒绝执行,有时还需要采取另一种方法,即接受这个操作,同时执行一些附加的操作,以接受这个操作,同时执行一些附加的操作,以保证数据库的状态仍然是正确的保证数据库的状态仍然是正确的三、参照完整性的实现三、参照完整性的实现例例:职工-部门数据库包含职工表职工-部门数据库包含职工表EMP和部门表和部门表DEPT–DEPT关系的主码为部门号关系的主码为部门号Deptno–EMP关系的主码为职工号关系的主码为职工号Empno, 外码为部门号外码为部门号Deptno–该该Deptno与与DEPT关系中关系中Deptno相对应相对应–称称DEPT为被参照关系或目标关系,为被参照关系或目标关系,EMP为参照关系为参照关系RDBMS实现参照完整性时需要考虑以下实现参照完整性时需要考虑以下4方面:方面:参照完整性的实现(续)参照完整性的实现(续)l1. 外码是否可以接受空值的问题外码是否可以接受空值的问题–外码是否能够取空值是依赖于应用环境的语外码是否能够取空值是依赖于应用环境的语义的。
义的–在实现参照完整性时,系统除了应该提供定在实现参照完整性时,系统除了应该提供定义外码的机制,还应提供定义外码列是否允义外码的机制,还应提供定义外码列是否允许空值的机制许空值的机制参照完整性的实现(续)参照完整性的实现(续)例例1:在职工-部门数据库中,:在职工-部门数据库中,EMP关系包含有关系包含有外码外码Deptno,,某一元组的这一列若为空值,表某一元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作示这个职工尚未分配到任何具体的部门工作这和应用环境的语义是相符的,因此这和应用环境的语义是相符的,因此EMP的的Deptno列应允许空值列应允许空值参照完整性的实现(续)参照完整性的实现(续)例例2:在学生-选课数据库中,:在学生-选课数据库中,Student关系为被参照关系,其主码为关系为被参照关系,其主码为SnoSC为参照关系,外码为为参照关系,外码为Sno若若SC的的Sno为空值,则表明尚不存在的某个学生,为空值,则表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,或者某个不知学号的学生,选修了某门课程,其成绩记录在其成绩记录在Grade列中这与学校的应用环列中。
这与学校的应用环境是不相符的,因此境是不相符的,因此SC的的Sno列不能取空值列不能取空值参照完整性的实现(续)参照完整性的实现(续)l2. 删除被参照关系的元组时的问题删除被参照关系的元组时的问题–出现违约操作的情形出现违约操作的情形•需要删除被参照关系的某个元组,而参照需要删除被参照关系的某个元组,而参照关系有若干元组的外码值与被删除的被参关系有若干元组的外码值与被删除的被参照关系的主码值相对应照关系的主码值相对应参照完整性的实现(续)参照完整性的实现(续)l2. 在被参照关系中删除元组时的问题在被参照关系中删除元组时的问题(续续)–违约反应:可有三种策略违约反应:可有三种策略•级联删除(级联删除(CASCADES))•受限删除(受限删除(RESTRICTED))•置空值删除(置空值删除(NULLIFIES))这三种处理方法,哪一种是正确的,要依应这三种处理方法,哪一种是正确的,要依应用环境的语义来定用环境的语义来定参照完整性的实现(续)参照完整性的实现(续)–级联删除级联删除•将参照关系中所有外码值与被参照关系中将参照关系中所有外码值与被参照关系中要删除元组主码值相对应的元组一起删除。
要删除元组主码值相对应的元组一起删除–受限删除受限删除•只有当参照关系中没有任何元组的外码值只有当参照关系中没有任何元组的外码值与要删除的被参照关系的元组的主码值相与要删除的被参照关系的元组的主码值相对应时,系统才执行删除操作,否则拒绝对应时,系统才执行删除操作,否则拒绝此删除操作此删除操作参照完整性的实现(续)参照完整性的实现(续)–置空值删除置空值删除•删除被参照关系的元组,并将参照关系中删除被参照关系的元组,并将参照关系中所有与被参照关系中被删除元组主码值相所有与被参照关系中被删除元组主码值相等的外码值置为空值等的外码值置为空值参照完整性的实现(续)参照完整性的实现(续)例:要删除例:要删除Student关系中关系中Sno=950001的元组,的元组, 而而SC关系中有关系中有4个元组的个元组的Sno都等于都等于950001–级联删除:将级联删除:将SC关系中所有关系中所有4个个Sno=950001的元组一起删除如果参照关系同时又是另的元组一起删除如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会一个关系的被参照关系,则这种删除操作会继续级联下去继续级联下去。
–受限删除:系统将拒绝执行此删除操作受限删除:系统将拒绝执行此删除操作参照完整性的实现(续)参照完整性的实现(续)–置空值删除:将置空值删除:将SC关系中所有关系中所有Sno=950001的元组的的元组的Sno值置为空值值置为空值–在学生选课数据库中,显然第一种方法和第在学生选课数据库中,显然第一种方法和第二种方法都是对的第三种方法不符合应用二种方法都是对的第三种方法不符合应用环境语义环境语义参照完整性的实现(续)参照完整性的实现(续)l3. 修改被参照关系中主码的问题修改被参照关系中主码的问题–两种策略两种策略•(1)不允许修改主码不允许修改主码•(2)允许修改主码允许修改主码 参照完整性的实现(续)参照完整性的实现(续)–允许修改主码策略允许修改主码策略•违约操作违约操作¨要要修改被参照关系修改被参照关系中某些元组的主码中某些元组的主码值,而参照关系中有些元组的外码值值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值正好等于被参照关系要修改的主码值¨要要修改参照关系修改参照关系中某些元组的主码值,中某些元组的主码值,而被参照关系中没有任何元组的外码而被参照关系中没有任何元组的外码值等于被参照关系修改后的主码值值等于被参照关系修改后的主码值参照完整性的实现(续)参照完整性的实现(续)–允许修改主码策略允许修改主码策略(续续)•违约反应违约反应(1)–修改的关系是被参照关系:与删除类似修改的关系是被参照关系:与删除类似»级联修改级联修改»受限修改受限修改»置空值修改置空值修改参照完整性的实现(续)参照完整性的实现(续)–级联修改级联修改•修改被参照关系中主码值同时,用相同的修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。
方法修改参照关系中相应的外码值–受限修改受限修改•拒绝此修改操作只当参照关系中没有任拒绝此修改操作只当参照关系中没有任何元组的外码值等于被参照关系中某个元何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被组的主码值时,这个元组的主码值才能被修改–置空值修改置空值修改•修改被参照关系中主码值,同时将参照关修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值系中相应的外码值置为空值参照完整性的实现(续)参照完整性的实现(续) 例:学生例:学生950001休学一年后复学,这时需要休学一年后复学,这时需要将将Student关系中关系中Sno=950001的元组中的元组中Sno值值改为改为960123而SC关系中有关系中有4个元组的个元组的Sno=950001–级联修改:将级联修改:将SC关系中关系中4个个Sno=950001元组元组中的中的Sno值也改为值也改为960123如果参照关系同如果参照关系同时又是另一个关系的被参照关系,则这种修时又是另一个关系的被参照关系,则这种修改操作会继续级联下去改操作会继续级联下去参照完整性的实现(续)参照完整性的实现(续)–受限修改:只有受限修改:只有SC中没有任何元组的中没有任何元组的Sno=950001时,才能修改时,才能修改Student表中表中Sno=950001的元组的的元组的Sno值改为值改为960123。
–置空值修改:将置空值修改:将Student表中表中Sno=950001的的元组的元组的Sno值改为值改为960123而将S表中所有表中所有Sno=950001的元组的的元组的Sno值置为空值值置为空值–在学生选课数据库中只有第一种方法是正确在学生选课数据库中只有第一种方法是正确的参照完整性的实现(续)参照完整性的实现(续)–允许修改主码策略允许修改主码策略(续续)•违约反应违约反应(2)–修改的关系是参照关系:与插入类似修改的关系是参照关系:与插入类似»受限修改受限修改»递归修改递归修改参照完整性的实现(续)参照完整性的实现(续)l结论结论–RDBMS在实现参照完整性时,除了需要向在实现参照完整性时,除了需要向用户提供定义主码、外码的机制外,还需要用户提供定义主码、外码的机制外,还需要向用户提供按照自己的应用要求选择处理依向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法赖关系中对应的元组的方法5.2 完整性完整性5.2.1 完整性约束条件完整性约束条件5.2.2 完整性控制完整性控制5.2.3 Oracle的完整性的完整性5.2.3 Oracle的完整性的完整性一、一、Oracle中的实体完整性中的实体完整性二、二、Oracle中的参照完整性中的参照完整性三、三、Oracle中用户定义的完整性中用户定义的完整性一、一、ORACLE中的实体完整性中的实体完整性lORACLE在在CREATE TABLE语句中提供了语句中提供了PRIMARY KEY子句,供用户在建表时指定子句,供用户在建表时指定关系的主码列。
关系的主码列–在列级使用在列级使用PRIMARY KEY子句子句–在表级使用在表级使用PRIMARY KEY子句子句 ORACLE中的实体完整性(续)中的实体完整性(续)例例1:在学生选课数据库中,要定义:在学生选课数据库中,要定义Student表的表的Sno属性属性为主码为主码 CREATE TABLE Student (Sno NUMBER(8), Sname VARCHAR(20), Sage NUMBER(20), CONSTRAINT PK_SNO PRIMARY KEY (Sno)); 或或: CREATE TABLE Student (Sno NUMBER(8) PRIMARY KEY , Sname VARCHAR(20), Sage NUMBER(20));ORACLE中的实体完整性(续)中的实体完整性(续)例例2:要在:要在SC表中定义表中定义(Sno, Cno)为主码为主码 CREATE TABLE SC (Sno NUMBER(8), Cno NUMBER(2), Grade NUMBER(2), CONSTRAINT PK_SC PRIMARY KEY (Sno, Cno));ORACLE中的实体完整性(续)中的实体完整性(续)l在用在用PRIMARY KEY语句定义了关系的主码后,语句定义了关系的主码后,每当用户程序对主码列进行更新操作时,系统每当用户程序对主码列进行更新操作时,系统自动进行完整性检查自动进行完整性检查–违约操作违约操作•使主属性值为空值的操作使主属性值为空值的操作•使主码值在表中不唯一的操作使主码值在表中不唯一的操作–违约反应违约反应•系统拒绝此操作,从而保证了实体完整性系统拒绝此操作,从而保证了实体完整性二、二、ORACLE中的参照完整性中的参照完整性lORACLE的的CREATE TABLE语句允许用户定语句允许用户定义参照完整性义参照完整性–用用FOREIGN KEY子句定义哪些列为外码列子句定义哪些列为外码列–用用REFERENCES子句指明这些外码相应于子句指明这些外码相应于哪个表的主码哪个表的主码–用用ON DELETE CASCADE短语指明在删除短语指明在删除被参照关系的元组时,同时删除参照关系中被参照关系的元组时,同时删除参照关系中外码值等于被删除的被参照关系的元组中主外码值等于被删除的被参照关系的元组中主码值的元组码值的元组ORACLE中的参照完整性(续)中的参照完整性(续)例例1:建立表:建立表EMP表表 CREATE TABLE EMP (Empno NUMBER(4), Ename VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2), CONSTRAINT FK_DEPTNO FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno) ON DELETE CASCADE);ORACLE中的参照完整性(续)中的参照完整性(续)或:或: CREATE TABLE EMP (Empno NUMBER(4), Ename VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2) CONSTRAINT FK_DEPTNO FOREIGN KEY REFERENCES DEPT(Deptno) ON DELETE CASCADE);ORACLE中的参照完整性(续)中的参照完整性(续)–这时这时EMP表中外码为表中外码为Deptno,,它相应于它相应于DEPT表中的主码表中的主码Deptno。
–当要修改当要修改DEPT表中的表中的DEPTNO值时,先要值时,先要检查检查EMP表中有无元组的表中有无元组的Deptno值与之对值与之对应应•若没有,系统接受这个修改操作若没有,系统接受这个修改操作•否则,系统拒绝此操作否则,系统拒绝此操作 ORACLE中的参照完整性(续)中的参照完整性(续)–当要删除当要删除DEPT表中某个元组时,系统要检表中某个元组时,系统要检查查EMP表,若找到相应元组即将其随之删除表,若找到相应元组即将其随之删除–当要插入当要插入EMP表中某个元组时,系统要检查表中某个元组时,系统要检查DEPT表,先要检查表,先要检查DEPT表中有无元组的表中有无元组的Deptno值与之对应值与之对应•若没有,系统拒绝此插入操作若没有,系统拒绝此插入操作•否则,系统接受此操作否则,系统接受此操作三、三、ORACLE中的用户定义的完整性中的用户定义的完整性lORACLE中定义用户完整性的两类方法中定义用户完整性的两类方法–用用CREATE TABLE语句在建表时定义用户语句在建表时定义用户完整性约束完整性约束–通过触发器来定义用户的完整性规则通过触发器来定义用户的完整性规则ORACLE中的用户定义的完整性(续)中的用户定义的完整性(续)l1. 用用CREATE TABLE语句在建表时定义用户语句在建表时定义用户完整性约束完整性约束–可定义三类完整性约束可定义三类完整性约束•列值非空(列值非空(NOT NULL短语)短语)•列值唯一(列值唯一(UNIQUE短语)短语)•检查列值是否满足一个布尔表达式检查列值是否满足一个布尔表达式((CHECK短语)短语)ORACLE中的用户定义的完整性(续)中的用户定义的完整性(续)例例1:建立部门表:建立部门表DEPT,,要求部门名称要求部门名称Dname列列 取值唯一,部门编号取值唯一,部门编号Deptno列为主码列为主码CREATE TABLE DEPT(Deptno NUMBER,Dname VARCHAR(9) CONSTRAINT U1 UNIQUE,Loc VARCHAR(10),CONSTRAINT PK_DEPT PRIMARY KEY (Deptno));其中其中 CONSTRAINT U1 UNIQUE 表示约束名为表示约束名为U1,,该约束要求该约束要求Dname列值唯一。
列值唯一ORACLE中的用户定义的完整性(续)中的用户定义的完整性(续)例例2:: 建立学生登记表建立学生登记表Student,,要求学号在要求学号在 900000至至999999之间,年龄之间,年龄<29,性别,性别 只能是只能是‘男男’或或‘女女’,姓名非空,姓名非空CREATE TABLE Student (Sno NUMBER(5) CONSTRAINT C1 CHECK (Sno BETWEEN 10000 AND 99999), Sname VARCHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMBER(3) CONSTRAINT C3 CHECK (Sage < 29), Ssex VARCHAR(2) CONSTRAINT C4 CHECK (Ssex IN ('男男', '女女'));ORACLE中的用户定义的完整性(续)中的用户定义的完整性(续)例例3 :建立职工表:建立职工表EMP,,要求每个职工的应发工资不得超要求每个职工的应发工资不得超过过3000元。
元 应发工资实际上就是实发工资列应发工资实际上就是实发工资列Sal与扣与扣除项除项Deduct之和 CREATE TABLE EMP (Eno NUMBER(4) Ename VARCHAR(10), Job VARCHAR(8), Sal NUMBER(7,2), Deduct NUMBER(7,2) Deptno NUMBER(2), CONSTRAINTS C1 CHECK (Sal + Deduct <=3000));ORACLE中的用户定义的完整性(续)中的用户定义的完整性(续)l2. 通过触发器来定义用户的完整性规则通过触发器来定义用户的完整性规则–定义其它的完整性约束时,需要用数据库触发器定义其它的完整性约束时,需要用数据库触发器((Trigger))来实现–数据库触发器是一类靠事件驱动的特殊过程,一旦数据库触发器是一类靠事件驱动的特殊过程,一旦由某个用户定义,任何用户对该数据的增、删、改由某个用户定义,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发子,在核心层操作均由服务器自动激活相应的触发子,在核心层进行集中的完整性控制。
进行集中的完整性控制–定义数据库触发器的语句定义数据库触发器的语句 CREATE [OR REPLACE] TRIGGERORACLE中的用户定义的完整性(续)中的用户定义的完整性(续)例例4:: 为教师表为教师表Teacher定义完整性规则定义完整性规则“教授的教授的工资不得低于工资不得低于800元,如果低于元,如果低于800元,自动改元,自动改为为800元元” ORACLE中的用户定义的完整性(续)中的用户定义的完整性(续)CREATE TRIGGER UPDATE_SAL BEFORE INSERT OR UPDATE OF Sal, Pos ON Teacher FOR EACH ROW WHEN (:new.Pos='教授教授') BEGIN IF :new.sal<800 THEN :new.Sal:=800; END IF; END;第第5章章 数据库安全数据库安全l5.1 安全性安全性l5.2 完整性完整性l5.3 并发控制并发控制l5.4 恢复恢复l5.5 数据库复制与数据库镜像数据库复制与数据库镜像5.3 并发控制并发控制l多事务执行方式多事务执行方式(1)–事务串行执行事务串行执行•每每个个时时刻刻只只有有一一个个事事务务运运行行,,其其他他事事务务必必须等到这个事务结束以后方能运行须等到这个事务结束以后方能运行•不不能能充充分分利利用用系系统统资资源源,,发发挥挥数数据据库库共共享享资源的特点资源的特点并发控制(续)并发控制(续)l多事务执行方式多事务执行方式(2)–交叉并发方式(交叉并发方式(interleaved concurrency))•事事务务的的并并行行执执行行是是这这些些并并行行事事务务的的并并行行操操作轮流交叉运行作轮流交叉运行•是是单单处处理理机机系系统统中中的的并并发发方方式式,,能能够够减减少少处理机的空闲时间,提高系统的效率处理机的空闲时间,提高系统的效率并发控制(续)并发控制(续)l多事务执行方式多事务执行方式(3)–同同 时时 并并 发发 方方 式式 (( simultaneous concurrency))•多多处处理理机机系系统统中中,,每每个个处处理理机机可可以以运运行行一一个个事事务务,,多多个个处处理理机机可可以以同同时时运运行行多多个个事事务,实现多个事务真正的并行运行务,实现多个事务真正的并行运行•最理想的并发方式,但受制于硬件环境最理想的并发方式,但受制于硬件环境并发控制(续)并发控制(续)l事务并发执行带来的问题事务并发执行带来的问题–对对多多用用户户并并发发存存取取同同一一数数据据的的操操作作不不加加控控制制可可能能会会存存取取和和存存储储不不正正确确的的数数据据,,破破坏坏事事务务的隔离性和数据库的一致性的隔离性和数据库的一致性–DBMS必须提供并发控制机制必须提供并发控制机制–并并发发控控制制机机制制是是衡衡量量一一个个DBMS性性能能的的重重要要标志之一标志之一5.3 并发控制并发控制5.3.1 并发控制概述并发控制概述5.3.2 并发操作的调度并发操作的调度5.3.3 封锁封锁5.3.4 死锁和活锁死锁和活锁5.3.5 Oracle的并发控制的并发控制5.3 并发控制并发控制5.3.1 并发控制概述并发控制概述5.3.2 并发操作的调度并发操作的调度5.3.3 封锁封锁5.3.4 死锁和活锁死锁和活锁5.3.5 Oracle的并发控制的并发控制5.3.1 5.3.1 并发控制概述并发控制概述l1. 并发控制的单位并发控制的单位——事务事务l2. 并发操作与数据的不一致性并发操作与数据的不一致性一、事务一、事务l事务事务(Transaction)是用户定义的一个数据库是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
是一个不可分割的工作单位l事务和程序是两个概念事务和程序是两个概念–在关系数据库中,一个事务可以是一条在关系数据库中,一个事务可以是一条SQL语句,语句,一组一组SQL语句或整个程序语句或整个程序–一个应用程序通常包含多个事务一个应用程序通常包含多个事务l事务是恢复和并发控制的基本单位事务是恢复和并发控制的基本单位事务(续)事务(续)l定义事务的两种方式定义事务的两种方式–显式方式显式方式•事务的开始由用户显式控制或事务的开始由用户显式控制或DBMS自动自动隐含隐含•事务结束由用户显式控制事务结束由用户显式控制–隐式方式隐式方式•当用户没有显式地定义事务时,由当用户没有显式地定义事务时,由DBMS按缺省规定自动划分事务按缺省规定自动划分事务事务(续)事务(续)l显式定义事务显式定义事务–1. 事务开始事务开始BEGIN TRANSACTION事务(续)事务(续)l显式定义事务(续)显式定义事务(续)–2. 事务结束(事务结束(1))•COMMIT–事务正常结束事务正常结束 –提交事务的所有操作提交事务的所有操作»使事务中所有对数据库的更新永久使事务中所有对数据库的更新永久生效(保存在物理数据库中)。
生效(保存在物理数据库中)事务(续)事务(续)l显式定义事务(续)显式定义事务(续)–2. 事务结束(事务结束(2))•ROLLBACK–事务异常终止事务异常终止–回滚事务的所有操作回滚事务的所有操作»在事务运行的过程中发生了某种故在事务运行的过程中发生了某种故障,事务不能继续执行障,事务不能继续执行»系统将事务中对数据库的所有已完系统将事务中对数据库的所有已完成的更新操作全部撤消,滚回到事成的更新操作全部撤消,滚回到事务开始时的状态务开始时的状态事务(续)事务(续)事务的事务的ACID特性:特性:l原子性(原子性(Atomicity))l一致性(一致性(Consistency))l隔离性(隔离性(Isolation))l持续性(持续性(Durability ))1. 原子性原子性l事务是数据库的逻辑工作单位事务是数据库的逻辑工作单位–事务中包括的诸操作要么都做,要么都不做事务中包括的诸操作要么都做,要么都不做2. 一致性一致性l事务执行的结果必须是使数据库从一个事务执行的结果必须是使数据库从一个 一致性状态变到另一个一致性状态一致性状态变到另一个一致性状态–一致性状态一致性状态:数据库中只包含成功事务提交:数据库中只包含成功事务提交的结果的结果–不一致状态不一致状态:数据库中包含失败事务的结果:数据库中包含失败事务的结果•数据库系统运行中发生故障,有些事务尚数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据据库所做的修改有一部分已写入物理数据库中库中一致性(续)一致性(续)l一致性与原子性是密切相关的。
一致性与原子性是密切相关的例:银行转帐:从帐号例:银行转帐:从帐号A中取出一万元,存入帐中取出一万元,存入帐号号B–定义一个事务,该事务包括两个操作定义一个事务,该事务包括两个操作•第一个操作是从帐号第一个操作是从帐号A中减去一万元中减去一万元•第二个操作是向第二个操作是向帐帐号号B中加入一万元中加入一万元–这两个操作要么全做,要么全不做这两个操作要么全做,要么全不做•全做或者全不做,数据库都处于一致性状态全做或者全不做,数据库都处于一致性状态•如果只做一个操作则用户逻辑上就会发生错误,如果只做一个操作则用户逻辑上就会发生错误,少了一万元,这时数据库就处于不一致性状态少了一万元,这时数据库就处于不一致性状态3. 隔离性隔离性l一个事务的执行不能被其他事务干扰一个事务的执行不能被其他事务干扰–一个事务内部的操作及使用的数据对其他并一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间发事务是隔离的,并发执行的各个事务之间不能互相干扰不能互相干扰4. 持续性持续性l持续性也称永久性(持续性也称永久性(Permanence))–一个事务一旦提交,它对数据库中数据的改一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
变就应该是永久性的–接下来的其他操作或故障不应该对其执行结接下来的其他操作或故障不应该对其执行结果有任何影响果有任何影响事务的特性事务的特性(续续)l保证事务保证事务ACID特性是事务处理的重要任务特性是事务处理的重要任务l破坏事务破坏事务ACID特性的因素特性的因素–多个事务并行运行时,不同事务的操作交叉执行多个事务并行运行时,不同事务的操作交叉执行•DBMS必须保证多个事务的交叉运行不影响这些必须保证多个事务的交叉运行不影响这些事务事务ACID特性,特别是原子性和隔离性特性,特别是原子性和隔离性–事务在运行过程中被强行停止事务在运行过程中被强行停止•DBMS必须保证被强行终止的事务对数据库和其必须保证被强行终止的事务对数据库和其他事务没有任何影响他事务没有任何影响 这些就是这些就是DBMS中恢复机制和并发控制机制的中恢复机制和并发控制机制的责任二、二、 并发操作与数据的不一致性并发操作与数据的不一致性l什么是数据的不一致性什么是数据的不一致性例:飞机订票系统中的一个活动序列:例:飞机订票系统中的一个活动序列: 1)甲售票员读出某航班的机票余额)甲售票员读出某航班的机票余额A,设,设A=16 2))乙售票员读出同一航班的机票余额乙售票员读出同一航班的机票余额A,,也为也为16 3)甲售票点卖出一张机票,修改机票余额)甲售票点卖出一张机票,修改机票余额A←A-1,, 所以所以A=15,把,把A写回数据库写回数据库 4))乙乙售售票票点点也也卖卖出出一一张张机机票票,,修修改改机机票票余余额额A←A-1,, 所以所以A=15,把,把A写回数据库写回数据库 结果:卖出两张机票,但数据库中机票余额只减少结果:卖出两张机票,但数据库中机票余额只减少1。
这种情况称为数据库的不一致性这种情况称为数据库的不一致性 并发控制概述(续)并发控制概述(续)–产生原因产生原因•由甲乙两个售票员并发操作引起由甲乙两个售票员并发操作引起•在在并并发发操操作作情情况况下下,,对对甲甲、、乙乙两两个个事事务务的的操作序列的调度是随机的操作序列的调度是随机的•若若按按上上面面的的调调度度序序列列执执行行,,甲甲事事务务的的修修改改就就被被丢丢失失因因为为第第4步步中中乙乙事事务务修修改改A并并写回后覆盖了甲事务的修改写回后覆盖了甲事务的修改并发控制概述(续)并发控制概述(续)l并发操作带来的数据不一致性并发操作带来的数据不一致性–丢失修改(丢失修改(lost update))–不可重复读(不可重复读(non-repeatable read))–读读“脏脏”数据(数据(dirty read))1. 丢失修改丢失修改l事务事务1与事务与事务2从数据库中读入同一数据并修改从数据库中读入同一数据并修改l事务事务2的提交结果破坏了事务的提交结果破坏了事务1提交的结果提交的结果l导致事务导致事务1的修改被丢失的修改被丢失图图 三种数据不一致性三种数据不一致性 T1T2①① 读读A=16 ②② ③③ A←A-1 写回写回A=15 ④④ 读读A=16 A←A-1写回写回A=15(a) 丢失修改丢失修改2. 不可重复读不可重复读l事务事务1读取数据读取数据l之后,事务之后,事务2执行更新操作执行更新操作l从而使事务从而使事务1无法再现前一次读取结果。
无法再现前一次读取结果图图 三种数据不一致性三种数据不一致性(续续) 读读B=100 B←B*2写回写回B=200 ①① 读读A=50 读读B=100 求和求和=150②② ③③ 读读A=50 读读B=200 求和求和=250 (验算不对验算不对) T2T1(b) 不可重复读不可重复读不可重复读(续)不可重复读(续)l三类不可重复读三类不可重复读–1. 读读-更新更新•事务事务1读取某一数据读取某一数据•事务事务2对其做了修改对其做了修改•当当事事务务1再再次次读读该该数数据据时时,,得得到到与与前前一一次次不同的值不同的值不可重复读(续)不可重复读(续)l三类不可重复读三类不可重复读–2. 读读-删除删除•事事务务1按按一一定定条条件件从从数数据据库库中中读读取取某某些些数数据记录据记录•事务事务2删除了其中部分记录删除了其中部分记录•当当事事务务1再再次次按按相相同同条条件件读读取取数数据据时时,,发发现某些记录神密地消失了现某些记录神密地消失了不可重复读(续)不可重复读(续)l三类不可重复读三类不可重复读(续续)–3. 读读-插入插入•事事务务1按按一一定定条条件件从从数数据据库库中中读读取取某某些些数数据记录据记录•事务事务2插入了一些记录插入了一些记录•当当事事务务1再再次次按按相相同同条条件件读读取取数数据据时时,,发发现多了一些记录。
现多了一些记录后两种不可重复读有时也称为幻行现象后两种不可重复读有时也称为幻行现象3. 读读“脏脏”数据数据l事务事务1修改某一数据,并将其写回磁盘修改某一数据,并将其写回磁盘l事务事务2读取同一数据读取同一数据l之之后后,,事事务务1由由于于某某种种原原因因被被撤撤消消,,这这时时事事务务1已修改过的数据恢复原值已修改过的数据恢复原值l事事务务2读读到到的的数数据据就就与与数数据据库库中中的的数数据据不不一一致致,,是不正确的数据,又称为是不正确的数据,又称为“脏脏”数据图图 三种数据不一致性三种数据不一致性(续续) 读读C=200 ①① 读读C=100 C←C*2 写回写回C②② ③③ ROLLBACK C恢复为恢复为100T2T1(c) 读读“脏脏”数据数据5.3 并发控制并发控制5.3.1 并发控制概述并发控制概述5.3.2 并发操作的调度并发操作的调度5.3.3 封锁封锁5.3.4 死锁和活锁死锁和活锁5.3.5 Oracle的并发控制的并发控制5.3.2 并发操作的调度并发操作的调度l计算机系统对并行事务中并行操作的调度是的计算机系统对并行事务中并行操作的调度是的随机的,而不同的调度可能会产生不同的结果。
随机的,而不同的调度可能会产生不同的结果l将所有事务串行起来的调度策略一定是正确的将所有事务串行起来的调度策略一定是正确的调度策略调度策略–如果一个事务运行过程中没有其他事务在同如果一个事务运行过程中没有其他事务在同时运行,也就是说它没有受到其他事务的干时运行,也就是说它没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正扰,那么就可以认为该事务的运行结果是正常的或者预想的常的或者预想的并发操作的调度(续)并发操作的调度(续)l以不同的顺序串行执行事务也有可能会产生不以不同的顺序串行执行事务也有可能会产生不同的结果,但由于不会将数据库置于不一致状同的结果,但由于不会将数据库置于不一致状态,所以都可以认为是正确的态,所以都可以认为是正确的l 几个事务的并行执行是正确的,几个事务的并行执行是正确的,当且仅当其结当且仅当其结果与按某一次序串行地执行它们时的结果相同果与按某一次序串行地执行它们时的结果相同这种并行调度策略称为可串行化这种并行调度策略称为可串行化((Serializable))的调度并发操作的调度(续)并发操作的调度(续)l可串行性是并行事务正确性的唯一准则可串行性是并行事务正确性的唯一准则例:现在有两个事务,分别包含下列操作:例:现在有两个事务,分别包含下列操作: 事务事务1:读:读B;;A=B+1;;写回写回A;; 事务事务2:读:读A;;B=A+1;;写回写回B;; 假设假设A的初值为的初值为2,,B的初值为的初值为2。
并发操作的调度(续)并发操作的调度(续)–对这两个事务的不同调度策略对这两个事务的不同调度策略•串行执行串行执行–串行调度策略串行调度策略1–串行调度策略串行调度策略2•交错执行交错执行–不可串行化的调度不可串行化的调度–可串行化的调度可串行化的调度(a) 串行调度策略,正确的调串行调度策略,正确的调度度读读B==2A B++1写回写回A==3 读读A==3B A++1写回写回B==4T1T2(b) 串行调度策略,正确的调度串行调度策略,正确的调度 读读B==11A B++1写回写回A==12读读A==10B A++1写回写回B==11 T1T2(c) 不可串行化的调度不可串行化的调度读读B==2A B++1写回写回A==3 读读A==10B A++1写回写回B==11T1T2(c) 不可串行化的调度不可串行化的调度(续续)–由于其执行结果与由于其执行结果与(a)、、(b)的结果都不同,的结果都不同,所以是错误的调度所以是错误的调度(d) 可串行化的调度可串行化的调度读读B==2A B++1写回写回A==3 等待等待 等待等待 等待等待读读A==3B A++1写回写回B==4T1T2(d) 可串行化的调度(续)可串行化的调度(续)•由于其执行结果与串行调度(由于其执行结果与串行调度(a))的执行的执行结果相同,所以是正确的调度。
结果相同,所以是正确的调度并发操作的调度(续)并发操作的调度(续)l为了保证并行操作的正确性,为了保证并行操作的正确性,DBMS的并行控的并行控制机制必须提供一定的手段来保证调度是可串制机制必须提供一定的手段来保证调度是可串行化的l从理论上讲,在某一事务执行时禁止其他事务从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是可串行化的调度,这也执行的调度策略一定是可串行化的调度,这也是最简单的调度策略,但这种方法实际上是不是最简单的调度策略,但这种方法实际上是不可行的,因为它使用户不能充分共享数据库资可行的,因为它使用户不能充分共享数据库资源并发操作的调度(续)并发操作的调度(续)l保证并发操作调度正确性的方法保证并发操作调度正确性的方法–封锁方法:封锁方法:两段锁两段锁((Two-Phase Locking,,简称简称2PL))协议协议–时标方法时标方法–乐观方法乐观方法5.3 并发控制并发控制5.3.1 并发控制概述并发控制概述5.3.2 并发操作的调度并发操作的调度5.3.3 封锁封锁5.3.4 死锁和活锁死锁和活锁5.3.5 Oracle的并发控制的并发控制5.3.3 封锁封锁l封锁就是事务封锁就是事务T在对某个数据对象(例如表、在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其记录等)操作之前,先向系统发出请求,对其加锁。
加锁后事务加锁加锁后事务T就对该数据对象有了一定就对该数据对象有了一定的控制,在事务的控制,在事务T释放它的锁之前,其它的事释放它的锁之前,其它的事务不能更新此数据对象务不能更新此数据对象l封锁是实现并发控制的一个非常重要的技术封锁是实现并发控制的一个非常重要的技术5.5.3 封锁封锁l5.3.3.1 封锁类型封锁类型l5.3.3.2 封锁粒度封锁粒度l5.3.3.3 封锁协议封锁协议5.5.3 封锁封锁l5.3.3.1 封锁类型封锁类型l5.3.3.2 封锁粒度封锁粒度l5.3.3.3 封锁协议封锁协议5.3.3.1 封锁类型封锁类型lDBMS通常提供了多种类型的封锁一个事务通常提供了多种类型的封锁一个事务对某个数据对象加锁后究竟拥有什么样的控制对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的是由封锁的类型决定的l基本封锁类型基本封锁类型–排它锁(排它锁(eXclusive lock,,简记为简记为X锁)锁)–共享锁(共享锁(Share lock,,简记为简记为S锁)锁)封锁类型(续)封锁类型(续)l排它锁排它锁–排它锁又称为写锁排它锁又称为写锁–若事务若事务T对数据对象对数据对象A加上加上X锁,则只允许锁,则只允许T读取和修改读取和修改A,,其它任何事务都不能再对其它任何事务都不能再对A加任何类型的锁,直到加任何类型的锁,直到T释放释放A上的锁。
上的锁封锁类型(续)封锁类型(续)l共享锁共享锁–共享锁又称为读锁共享锁又称为读锁–若事务若事务T对数据对象对数据对象A加上加上S锁,则其它事务锁,则其它事务只能再对只能再对A加加S锁,而不能加锁,而不能加X锁,直到锁,直到T释释放放A上的上的S锁封锁类型(续)封锁类型(续)Y=Yes,,相容的请求相容的请求N=No,,不相容的请求不相容的请求 T1 T2XS-XNNYSNYY-YYY5.5.3 封锁封锁l5.3.3.1 封锁类型封锁类型l5.3.3.2 封锁粒度封锁粒度l5.3.3.3 封锁协议封锁协议5.3.3.2 封锁粒度封锁粒度lX锁和锁和S锁都是加在某一个数据对象上的锁都是加在某一个数据对象上的l封锁的对象可以是逻辑单元,也可以是物理单封锁的对象可以是逻辑单元,也可以是物理单元 例:在关系数据库中,封锁对象可以是:例:在关系数据库中,封锁对象可以是:–逻辑单元逻辑单元: 属性值、属性值集合、元组、关属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等系、索引项、整个索引、整个数据库等–物理单元:页(数据页或索引页)、块等物理单元:页(数据页或索引页)、块等封锁粒度(续)封锁粒度(续)l封锁对象可以很大也可以很小封锁对象可以很大也可以很小 例:例: 对整个数据库加锁对整个数据库加锁 对某个属性值加锁对某个属性值加锁l封锁对象的大小称为封锁的粒度封锁对象的大小称为封锁的粒度(Granularity)封锁粒度(续)封锁粒度(续)l封锁粒度与系统的并发度和并发控制的开销密封锁粒度与系统的并发度和并发控制的开销密切相关。
切相关–封锁的粒度越大,系统中能够被封锁的对象封锁的粒度越大,系统中能够被封锁的对象就越少,并发度也就越小,但同时系统开销就越少,并发度也就越小,但同时系统开销也越小;也越小;–封锁的粒度越小,并发度越高,但系统开销封锁的粒度越小,并发度越高,但系统开销也就越大也就越大l选择封锁粒度时必须同时考虑封锁机构和并发选择封锁粒度时必须同时考虑封锁机构和并发度两个因素,对系统开销与并发度进行权衡,度两个因素,对系统开销与并发度进行权衡,以求得最优的效果以求得最优的效果封锁粒度(续)封锁粒度(续)l一般原则一般原则–需要处理大量元组的用户事务:以关系为封需要处理大量元组的用户事务:以关系为封锁单元;锁单元;–需要处理多个关系的大量元组的用户事务:需要处理多个关系的大量元组的用户事务:以数据库为封锁单位;以数据库为封锁单位;–只处理少量元组的用户事务:以元组为封锁只处理少量元组的用户事务:以元组为封锁单位单位5.5.3 封锁封锁l5.3.3.1 封锁类型封锁类型l5.3.3.2 封锁粒度封锁粒度l5.3.3.3 封锁协议封锁协议5.3.3.3 封锁协议封锁协议l什么是封锁协议什么是封锁协议–在运用在运用X锁和锁和S锁对数据对象加锁时,需要约定一些锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议(规则,这些规则为封锁协议(Locking Protocol)。
•何时申请何时申请X锁或锁或S锁锁•持锁时间持锁时间•何时释放何时释放–对封锁方式规定不同的规则,就形成了各种不同的对封锁方式规定不同的规则,就形成了各种不同的封锁协议,它们分别在不同的程度上为并发操作的封锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证正确调度提供一定的保证封锁协议封锁协议(续)(续)l一、保证数据一致性的封锁协议一、保证数据一致性的封锁协议l二、保证并行调度可串行性的封锁协议二、保证并行调度可串行性的封锁协议——两段锁协议两段锁协议一、保证数据一致性的封锁协议一、保证数据一致性的封锁协议——三级封锁协议三级封锁协议 三级封锁协议三级封锁协议–1级封锁协议级封锁协议–2级封锁协议级封锁协议–3级封锁协议级封锁协议1级封锁协议级封锁协议l1级封锁协议级封锁协议–事务事务T在修改数据在修改数据R之前必须先对其加之前必须先对其加X锁,锁,直到事务结束才释放直到事务结束才释放•正常结束正常结束((COMMIT))•非正常结束非正常结束((ROLLBACK))l1级封锁协议可防止丢失修改,并保证事务级封锁协议可防止丢失修改,并保证事务T是是可恢复的。
可恢复的l在在1级封锁协议中,如果仅仅是读数据不对其级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证进行修改,是不需要加锁的,所以它不能保证可重复读和不读可重复读和不读“脏脏”数据图图 用封锁机制解决三种数据不一致性示例用封锁机制解决三种数据不一致性示例T1T2①① Xlock A 获得获得②② 读读A=16 ③③A←A-1 写回写回A=15 Commit Unlock A④④ ⑤⑤ Xlock A等待等待等待等待等待等待等待等待获得获得Xlock A读读A=15A←A-1写回写回A=14CommitUnlock A (a) 没有丢失修改没有丢失修改 图图 用封锁机制解决三种数据不一致性示例用封锁机制解决三种数据不一致性示例 读读A=15①① Xlock A 获得获得②② 读读A=16 A←A-1 写回写回A=15③③ ④④ RollbackUnlock A T2T1 (a.1) 读读“脏脏”数据数据图图 用封锁机制解决三种数据不一致性示例用封锁机制解决三种数据不一致性示例 Xlock B 获得获得 读读B=100 B←B*2 写回写回B=200 Commit Unlock B①①读读A=50 读读B=100 求和求和=150②②③③读读A=50 读读B=200 求和求和=250 (验算不对验算不对) T2T1 (a.2) 不可重复读不可重复读2级封锁协议级封锁协议l2级封锁协议级封锁协议–1级封锁协议加上事务级封锁协议加上事务T在读取数据在读取数据R之前必之前必须先对其加须先对其加S锁,读完后即可释放锁,读完后即可释放S锁。
锁l2级封锁协议可以防止丢失修改和读级封锁协议可以防止丢失修改和读“脏脏”数数据l在在2级封锁协议中,由于读完数据后即可释放级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读锁,所以它不能保证可重复读图图 用封锁机制解决三种数据不一致性示例用封锁机制解决三种数据不一致性示例T1T2①① Xlock C 读读C= 100 C←C*2 写回写回C=200②② ③③ ROLLBACK (C恢复为恢复为100) Unlock C④④ ⑤⑤ Slock C等待等待等待等待等待等待等待等待获得获得Slock C读读C=100Commit CUnlock C (c) 不读不读“脏脏”数据数据 图图 用封锁机制解决三种数据不一致性示例用封锁机制解决三种数据不一致性示例 (c.1) 不可重复读不可重复读①① Sclock A 获得获得 读读A=50 Unlock A②② Sclock B 获得获得 读读B=100 Unlock B③③ 求和求和=150 Xlock B等待等待等待等待获得获得Xlock B读读B=100B←B*2写回写回B=200CommitUnlock BT2T1④④Sclock A 获得获得 读读A=50 Unlock A Sclock B 获得获得 读读B=200 Unlock B 求和求和=250 (验算不对验算不对) T2T1 (续续)3级封锁协议级封锁协议l3级封锁协议级封锁协议–1级封锁协议加上事务级封锁协议加上事务T在读取数据在读取数据R之前必之前必须先对其加须先对其加S锁,直到事务结束才释放。
锁,直到事务结束才释放l3级封锁协议可防止丢失修改、读脏数据和不级封锁协议可防止丢失修改、读脏数据和不可重复读可重复读图图 用封锁机制解决三种数据不一致性示例用封锁机制解决三种数据不一致性示例T1T2 ①① Slock A 读读A=50 Slock B 读读B=100 求和求和=150 ②② ③③ 读读A=50 读读B=100 求和求和=150 Commit Unlock A Unlock B ④④ ⑤⑤ Xlock B等待等待等待等待等待等待 等待等待等待等待等待等待等待等待等待等待获得获得Xlock B读读B=100B←B*2写回写回B=200CommitUnlock B (b) 可重复读可重复读 三级封锁协议三级封锁协议l三级协议的主要区别三级协议的主要区别–什么操作需要申请封锁以及何时释放锁(即什么操作需要申请封锁以及何时释放锁(即持锁时间)持锁时间)三级封锁协议三级封锁协议(续续)二、两段锁协议二、两段锁协议l可串行性是并行调度正确性的唯一准则,两段可串行性是并行调度正确性的唯一准则,两段锁(锁(2PL))协议就是为保证并行调度可串行性协议就是为保证并行调度可串行性而提供的封锁协议。
而提供的封锁协议l两段锁协议的内容两段锁协议的内容1. 在对任何数据进行读、写操作之前,事务首在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁先要获得对该数据的封锁2. 在释放一个封锁之后,事务不再获得任何其在释放一个封锁之后,事务不再获得任何其他封锁两段锁协议(续)两段锁协议(续)l“两段两段”锁的含义锁的含义–事务分为两个阶段事务分为两个阶段• 第一阶段是获得封锁,也称为扩展阶段;第一阶段是获得封锁,也称为扩展阶段;• 第二阶段是释放封锁,也称为收缩阶段第二阶段是释放封锁,也称为收缩阶段两段锁协议(续)两段锁协议(续)例:例:事务事务1的封锁序列:的封锁序列:Slock A ... Slock B ... Xlock C ... Unlock B ... Unlock A ... Unlock C;;事务事务2的封锁序列:的封锁序列:Slock A ... Unlock A ... Slock B ... Xlock C ... Unlock C ... Unlock B;;事务事务1遵守两段锁协议,而事务遵守两段锁协议,而事务2不遵守两段协议不遵守两段协议两段锁协议(续)两段锁协议(续)l并行执行的所有事务均遵守两段锁协议,则对并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。
这些事务的所有并行调度策略都是可串行化的所有遵守两段锁协议的事务,其并行执行的结所有遵守两段锁协议的事务,其并行执行的结果一定是正确的果一定是正确的l事务遵守两段锁协议是可串行化调度的事务遵守两段锁协议是可串行化调度的充分条充分条件件,而不是必要条件即可串行化的调度中,,而不是必要条件即可串行化的调度中,不一定所有事务都必须符合两段锁协议不一定所有事务都必须符合两段锁协议5.3 并发控制并发控制5.3.1 并发控制概述并发控制概述5.3.2 并发操作的调度并发操作的调度5.3.3 封锁封锁5.3.4 死锁和活锁死锁和活锁5.3.5 Oracle的并发控制的并发控制5.3.4 死锁和活锁死锁和活锁l封锁技术可以有效地解决并行操作的一封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题致性问题,但也带来一些新的问题–死锁死锁–活锁活锁一、一、 活锁活锁什么是活锁什么是活锁 活锁活锁(续续)如何避免活锁如何避免活锁l采用先来先服务的策略采用先来先服务的策略–当当多多个个事事务务请请求求封封锁锁同同一一数数据据对对象象时时,,封封锁锁子子系系统统按按请请求求封封锁锁的的先先后后次次序序对对这这些些事事务务排排队队–该该数数据据对对象象上上的的锁锁一一旦旦释释放放,,首首先先批批准准申申请请队列中第一个事务获得锁。
队列中第一个事务获得锁二、二、 死锁死锁什么是死锁什么是死锁T1 T2 Xlock R1...Xlock R2等待等待等待等待等待等待...Xlock R2..Xlock R1等待等待等待等待.死锁死锁(续)(续)如何解决死锁如何解决死锁l解决死锁的两类方法解决死锁的两类方法1. 死锁的预防死锁的预防2. 死锁的诊断与解除死锁的诊断与解除1. 死锁的预防死锁的预防l预防死锁为何能解决死锁预防死锁为何能解决死锁–产生死锁的原因是两个或多个事务都已封锁产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待事务封锁的数据对象加锁,从而出现死等待–预防死锁的发生就是要破坏产生死锁的条件预防死锁的发生就是要破坏产生死锁的条件死锁的预防死锁的预防(续)(续)l预防死锁的方法预防死锁的方法– 一次封锁法一次封锁法– 顺序封锁法顺序封锁法((1)一次封锁法)一次封锁法l一次封锁法要求每个事务必须一次将所有要使一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
用的数据全部加锁,否则就不能继续执行l一次封锁法存在的问题:降低并发度一次封锁法存在的问题:降低并发度– 扩大封锁范围扩大封锁范围•一次就将以后要用到的全部数据加锁,势一次就将以后要用到的全部数据加锁,势必扩大了封锁的范围,从而降低了系统的必扩大了封锁的范围,从而降低了系统的并发度一次封锁法(续)一次封锁法(续)–难于事先精确确定封锁对象难于事先精确确定封锁对象•数据库中数据是不断变化的,原来不要求数据库中数据是不断变化的,原来不要求封锁的数据,在执行过程中可能会变成封封锁的数据,在执行过程中可能会变成封锁对象,所以很难事先精确地确定每个事锁对象,所以很难事先精确地确定每个事务所要封锁的数据对象务所要封锁的数据对象•解决方法:将事务在执行过程中可能要封解决方法:将事务在执行过程中可能要封锁的数据对象全部加锁,这就进一步降低锁的数据对象全部加锁,这就进一步降低了并发度了并发度((2)顺序封锁法)顺序封锁法l顺序封锁法是预先对数据对象规定一个封锁顺顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁序,所有事务都按这个顺序实行封锁l顺序封锁法存在的问题顺序封锁法存在的问题– 维护成本高维护成本高•数据库系统中可封锁的数据对象极其众多,数据库系统中可封锁的数据对象极其众多,并且随数据的插入、删除等操作而不断地并且随数据的插入、删除等操作而不断地变化,要维护这样极多而且变化的资源的变化,要维护这样极多而且变化的资源的封锁顺序非常困难,成本很高。
封锁顺序非常困难,成本很高顺序封锁法(续)顺序封锁法(续)–难于实现难于实现•事务的封锁请求可以随着事务的执行而动事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序锁哪些对象,因此也就很难按规定的顺序去施加封锁去施加封锁 例:规定数据对象的封锁顺序为例:规定数据对象的封锁顺序为A,B,C,D,E事务事务T3起初要求封锁数据对象起初要求封锁数据对象B,C,E,,但当但当它封锁了它封锁了B,C后,才发现还需要封锁后,才发现还需要封锁A,,这这样就破坏了封锁顺序样就破坏了封锁顺序.死锁的预防(续)死锁的预防(续)l结论结论–在操作系统中广为采用的预防死锁的策略并在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点不很适合数据库的特点–DBMS在解决死锁的问题上更普遍采用的是在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法诊断并解除死锁的方法2. 死锁的诊断与解除死锁的诊断与解除l方法方法–由由DBMS的并发控制子系统定期检测系统中的并发控制子系统定期检测系统中是否存在死锁,一旦检测到死锁,就要设法是否存在死锁,一旦检测到死锁,就要设法解除。
解除死锁的诊断与解除(续)死锁的诊断与解除(续)l 检测死锁检测死锁– 超时法超时法•如果一个事务的等待时间超过了规定的时如果一个事务的等待时间超过了规定的时限,就认为发生了死锁限,就认为发生了死锁•优点优点–实现简单实现简单•缺点缺点–有可能误判死锁有可能误判死锁–时限若设置得太长,死锁发生后不能时限若设置得太长,死锁发生后不能及时发现及时发现死锁的诊断与解除(续)死锁的诊断与解除(续)– 等待图法等待图法•用事务等待图动态反映所有事务的等待情况用事务等待图动态反映所有事务的等待情况–事务等待图是一个有向图事务等待图是一个有向图G=(T,,U)–T为结点的集合,每个结点表示正运行的事务为结点的集合,每个结点表示正运行的事务–U为边的集合,每条边表示事务等待的情况为边的集合,每条边表示事务等待的情况–若若T1等待等待T2,则,则T1,,T2之间划一条有向边,从之间划一条有向边,从T1指向指向T2•并发控制子系统周期性地(比如每隔并发控制子系统周期性地(比如每隔1 min))检测事务等待图,如果发现图中存在检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁回路,则表示系统中出现了死锁。
死锁的诊断与解除(续)死锁的诊断与解除(续)l解除死锁解除死锁–选择一个处理死锁代价最小的事务,选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去锁,使其它事务能继续运行下去第第5章章 数据库安全数据库安全l5.1 安全性安全性l5.2 完整性完整性l5.3 并发控制并发控制l5.4 恢复恢复l5.5 数据库复制与数据库镜像数据库复制与数据库镜像5.4 恢复恢复l故障是不可避免的故障是不可避免的–计算机硬件故障计算机硬件故障–系统软件和应用软件的错误系统软件和应用软件的错误–操作员的失误操作员的失误–恶意的破坏恶意的破坏l故障的影响故障的影响–轻则造成运行事务非正常中断,影响数据库中数据轻则造成运行事务非正常中断,影响数据库中数据的正确性的正确性–重则破坏数据库,使数据库中数据部分或全部丢失重则破坏数据库,使数据库中数据部分或全部丢失例,银行转帐例,银行转帐恢复(续)恢复(续)l数据库管理系统对故障的对策数据库管理系统对故障的对策–DBMS提供了恢复子系统,用来保证各种故提供了恢复子系统,用来保证各种故障发生后,能把数据库中的数据从错误状态障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态。
即保证各个事恢复到某种逻辑一致的状态即保证各个事务中的操作要么全部完成,要么全部不做务中的操作要么全部完成,要么全部不做l数据库系统所采用的恢复技术是否行之有效是数据库系统所采用的恢复技术是否行之有效是衡量系统性能优劣的重要指标衡量系统性能优劣的重要指标5.4 恢复恢复5.4.1 恢复的原理恢复的原理5.4.2 恢复的实现技术恢复的实现技术5.4.3 ORACLE的恢复技术的恢复技术5.4 恢复恢复5.4.1 恢复的原理恢复的原理5.4.2 恢复的实现技术恢复的实现技术5.4.3 ORACLE的恢复技术的恢复技术5.4.1 恢复的原理恢复的原理l事务故障事务故障l系统故障系统故障l介质故障介质故障一、事务故障一、事务故障l什么是事务故障什么是事务故障–某个事务在运行过程中由于种种原因未运行某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了至正常终止点就夭折了l事务故障的常见原因事务故障的常见原因–输入数据有误输入数据有误–运算溢出运算溢出–违反了某些完整性限制违反了某些完整性限制–某些应用程序出错某些应用程序出错–并行事务发生死锁并行事务发生死锁事务故障(续)事务故障(续)l事务故障的恢复事务故障的恢复–发生事务故障时,夭折的事务可能已把对数发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘。
据库的部分修改写回磁盘–事务故障的恢复:事务故障的恢复:事务撤消(事务撤消(UNDO))•恢复程序要在不影响其它事务运行的情况恢复程序要在不影响其它事务运行的情况下,强行回滚(下,强行回滚(ROLLBACK))该事务,该事务,即清除该事务对数据库的所有修改,使得即清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样这个事务象根本没有启动过一样二、系统故障二、系统故障l什么是系统故障什么是系统故障–由于某种原因造成整个系统的正常运行突然由于某种原因造成整个系统的正常运行突然停止,致使所有正在运行的事务都以非正常停止,致使所有正在运行的事务都以非正常方式终止方式终止–发生系统故障时,内存中数据库缓冲区的信发生系统故障时,内存中数据库缓冲区的信息全部丢失,但存储在外部存储设备上的数息全部丢失,但存储在外部存储设备上的数据未受影响据未受影响系统故障(续)系统故障(续)l系统故障的常见原因系统故障的常见原因–操作系统或操作系统或DBMS代码错误代码错误–操作员操作失误操作员操作失误–特定类型的硬件错误(如特定类型的硬件错误(如CPU故障)故障)–突然停电突然停电系统故障(续)系统故障(续)l系统故障的恢复系统故障的恢复–1. 清除尚未完成的事务对数据库的所有修改清除尚未完成的事务对数据库的所有修改•如果如果DBMS无法确定哪些事务已更新过数据库,无法确定哪些事务已更新过数据库,则系统重新启动后,恢复程序要强行撤消则系统重新启动后,恢复程序要强行撤消((UNDO))所有未完成事务,使这些事务象没有所有未完成事务,使这些事务象没有运行过一样。
运行过一样–2. 将缓冲区中已完成事务提交的结果写入数据库将缓冲区中已完成事务提交的结果写入数据库•如果如果DBMS无法确定哪些事务的提交结果尚未写无法确定哪些事务的提交结果尚未写入物理数据库,则系统重新启动后,恢复程序需入物理数据库,则系统重新启动后,恢复程序需要重做(要重做(REDO))所有已提交的事务所有已提交的事务三、介质故障三、介质故障l什么是介质故障什么是介质故障–硬件故障使存储在外存中的数据部分丢失或硬件故障使存储在外存中的数据部分丢失或全部丢失全部丢失–介质故障比前两类故障的可能性小得多,但介质故障比前两类故障的可能性小得多,但破坏性最大破坏性最大介质故障介质故障(续续)l介质故障的常见原因介质故障的常见原因–硬件故障硬件故障•磁盘损坏磁盘损坏•磁头碰撞磁头碰撞–操作系统的某种潜在错误操作系统的某种潜在错误–瞬时强磁场干扰瞬时强磁场干扰介质故障(续)介质故障(续)l介质故障的恢复介质故障的恢复–装入装入数据库发生介质故障前某个时刻的数据数据库发生介质故障前某个时刻的数据副本副本–重做自此时始的所有重做自此时始的所有成功事务成功事务,将这些事务,将这些事务已提交的结果重新记入数据库已提交的结果重新记入数据库故障的种类小结故障的种类小结l数据库系统中各类故障对数据库的影响数据库系统中各类故障对数据库的影响–数据库本身被破坏数据库本身被破坏(介质故障)(介质故障)–数据库处于不一致状态数据库处于不一致状态•数据库中包含了未完成事务对数据库的修数据库中包含了未完成事务对数据库的修改(事务故障、系统故障)改(事务故障、系统故障)•数据库中丢失了已提交事务对数据库的修数据库中丢失了已提交事务对数据库的修改(系统故障)改(系统故障)l不同类型的故障应采用不同的恢复操作不同类型的故障应采用不同的恢复操作故障的种类小结(续)故障的种类小结(续)l恢复操作的基本原理:简单恢复操作的基本原理:简单–任何恢复操作的原理都是一样的任何恢复操作的原理都是一样的–原理:原理:利用利用存储在系统其它地方的存储在系统其它地方的冗余数据冗余数据来来重建重建数据库中已经被破坏或已经不正确的数据库中已经被破坏或已经不正确的那部分数据那部分数据l恢复的实现技术:复杂恢复的实现技术:复杂–一般一个大型数据库产品,恢复子系统的代一般一个大型数据库产品,恢复子系统的代码要占全部代码的码要占全部代码的10%以上以上5.4 恢复恢复5.4.1 恢复的原理恢复的原理5.4.2 恢复的实现技术恢复的实现技术5.4.3 ORACLE的恢复技术的恢复技术5.4.2 恢复的实现技术恢复的实现技术l恢复技术的原理恢复技术的原理–利用存储在系统其它地方的冗余数据来修复或重建利用存储在系统其它地方的冗余数据来修复或重建数据库中被破坏的或不正确的数据。
数据库中被破坏的或不正确的数据l恢复机制涉及的关键问题恢复机制涉及的关键问题1. 如何建立冗余数据如何建立冗余数据•数据转储数据转储•登记日志文件登记日志文件2. 如何利用这些冗余数据实施数据库恢复如何利用这些冗余数据实施数据库恢复 5.4.2 恢复的实现技术恢复的实现技术5.4.2.1 数据转储数据转储5.4.2.2 登记日志文件登记日志文件5.4.2.3 恢复策略恢复策略5.4.2 恢复的实现技术恢复的实现技术5.4.2.1 数据转储数据转储5.4.2.2 登记日志文件登记日志文件5.4.2.3 恢复策略恢复策略5.4.2.1 数据转储数据转储一、什么是转储一、什么是转储二、转储的用途二、转储的用途三、转储方法三、转储方法一、什么是转储一、什么是转储l转储是指转储是指DBA将整个数据库复制到磁带或另一将整个数据库复制到磁带或另一个磁盘上保存起来的过程个磁盘上保存起来的过程l这些备用的数据文本称为这些备用的数据文本称为后备副本后备副本或或后援副本后援副本二、转储的用途二、转储的用途l用途:供介质故障恢复时使用用途:供介质故障恢复时使用–一旦系统发生介质故障,数据库遭到破坏,一旦系统发生介质故障,数据库遭到破坏,可以将后备副本重新装入,把数据库恢复起可以将后备副本重新装入,把数据库恢复起来。
来l恢复的程度恢复的程度–重装后备副本只能将重装后备副本只能将DB恢复到转储时的状态恢复到转储时的状态–要想恢复到故障发生时的状态,必须重新运要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务行自转储以后的所有更新事务转储的用途(续)转储的用途(续)例:例: 故障发生点故障发生点 转储转储 运行事务运行事务 ↓↓正常运行正常运行 ─┼───────┼──────────────┼───────┼───────────── Ta Ta Tb Tb TfTf 重装后备副本重装后备副本 重新运行事务重新运行事务恢复恢复 ────────┴────────┴------------------------→→三、转储方法三、转储方法1.静态转储与动态转储.静态转储与动态转储2.海量转储与增量转储.海量转储与增量转储3.转储方法小结.转储方法小结1.静态转储与动态转储.静态转储与动态转储l静态转储静态转储–静态转储是在系统中无运行事务时进行的转静态转储是在系统中无运行事务时进行的转储操作储操作•转储操作开始的时刻,数据库处于一致性转储操作开始的时刻,数据库处于一致性状态状态•转储期间不允许(或不存在)对数据库的转储期间不允许(或不存在)对数据库的任何存取、修改活动任何存取、修改活动–静态转储得到的一定是一个数据一致性的副静态转储得到的一定是一个数据一致性的副本本静态转储与动态转储(续)静态转储与动态转储(续)–静态转储的优点静态转储的优点•实现简单实现简单–静态转储的缺点静态转储的缺点•降低了数据库的可用性降低了数据库的可用性–转储必须等待用户事务结束才能进行转储必须等待用户事务结束才能进行–新的事务必须等待转储结束才能执行新的事务必须等待转储结束才能执行静态转储与动态转储(续)静态转储与动态转储(续)–利用静态转储得到的副本进行故障恢复利用静态转储得到的副本进行故障恢复•只需要把静态转储得到的后备副本装入,只需要把静态转储得到的后备副本装入,就能把数据库恢复到转储时刻的正确状态就能把数据库恢复到转储时刻的正确状态利用静态转储副本进行恢复利用静态转储副本进行恢复 故障发生点故障发生点 静态静态转储转储 运行事务运行事务 ↓↓正常运行正常运行 ─┼───────┼──────────────┼───────┼───────────── Ta Ta Tb Tb TfTf 重装后备副本重装后备副本 恢复恢复 ━━━━━━┥━━━━━━┥静态转储与动态转储(续)静态转储与动态转储(续)l动态转储动态转储–动态转储是指转储操作与用户事务并发进行,动态转储是指转储操作与用户事务并发进行,转储期间允许对数据库进行存取或修改。
转储期间允许对数据库进行存取或修改–动态转储的优点动态转储的优点•不用等待正在运行的用户事务结束不用等待正在运行的用户事务结束•不会影响新事务的运行不会影响新事务的运行–动态转储的缺点动态转储的缺点•不能保证副本中的数据正确有效不能保证副本中的数据正确有效静态转储与动态转储(续)静态转储与动态转储(续)–利用动态转储得到的副本进行故障恢复利用动态转储得到的副本进行故障恢复•需要把动态转储期间各事务对数据库的修需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件改活动登记下来,建立日志文件•后备副本加上日志文件才能把数据库恢复后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态到某一时刻的正确状态利用动态转储副本进行恢复利用动态转储副本进行恢复 Ta Ta Tb Tb TfTf 动态动态转储转储 运行事务运行事务 故障发生点故障发生点正常运行正常运行 ─┼───────┼──────────────┼───────┼───────────── 登记日志文件登记日志文件 登记新日志文件登记新日志文件 ─────────┼──────────────────────┼───────────── 转储日志文件转储日志文件 重装后备副本,然后利用转储的日志文件恢复重装后备副本,然后利用转储的日志文件恢复恢复到一恢复到一 ━━━━━━┥━━━━━━┥致性状态致性状态2.海量转储与增量转储.海量转储与增量转储l海量转储海量转储–每次转储全部数据库每次转储全部数据库l增量转储增量转储–只转储上次转储后更新过的数据只转储上次转储后更新过的数据l海量转储与增量转储比较海量转储与增量转储比较–从恢复角度看,使用海量转储得到的后备副从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便本进行恢复往往更方便–但如果数据库很大,事务处理又十分频繁,但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效则增量转储方式更实用更有效3.转储方法小结.转储方法小结l转储方法分类转储方法分类 转储状态转储状态动态转储动态转储静态转储静态转储转储转储方式方式海量转储海量转储动态海量转储动态海量转储静态海量转储静态海量转储增量转储增量转储动态增量转储动态增量转储静态增量转储静态增量转储转储方法小结(续)转储方法小结(续)l转储策略转储策略–从恢复方便角度看,应经常进行数据转储,制作后从恢复方便角度看,应经常进行数据转储,制作后备副本。
备副本–但转储又是十分耗费时间和资源的,不能频繁进行但转储又是十分耗费时间和资源的,不能频繁进行–DBA应该根据数据库使用情况确定适当的转储周期应该根据数据库使用情况确定适当的转储周期和转储方法和转储方法 例:例:•每天晚上进行动态增量转储每天晚上进行动态增量转储•每周进行一次动态海量转储每周进行一次动态海量转储•每月进行一次静态海量转储每月进行一次静态海量转储5.4.2 恢复的实现技术恢复的实现技术5.4.2.1 数据转储数据转储5.4.2.2 登记日志文件登记日志文件5.4.2.3 恢复策略恢复策略5.4.2.2 登记日志文件登记日志文件一、日志文件的内容一、日志文件的内容二、日志文件的用途二、日志文件的用途三、登记日志文件的原则三、登记日志文件的原则一、日志文件的内容一、日志文件的内容l1. 什么是日志文件什么是日志文件–日志文件日志文件(log)是用来记录事务对数据库的是用来记录事务对数据库的更新操作的文件更新操作的文件l2. 日志文件的格式日志文件的格式–以记录为单位的日志文件以记录为单位的日志文件–以数据块为单位的日志文件以数据块为单位的日志文件日志文件的内容(续)日志文件的内容(续)l3. 日志文件内容日志文件内容–各个事务的开始标记各个事务的开始标记(BEGIN TRANSACTION)–各个事务的结束标记各个事务的结束标记(COMMIT或或ROLLBACK)–各个事务的所有更新操作各个事务的所有更新操作–每个事务开始的标记、每个事务的结束标记和每个每个事务开始的标记、每个事务的结束标记和每个更新操作均作为日志文件中的一个日志记录更新操作均作为日志文件中的一个日志记录(log record)日志文件的内容(续)日志文件的内容(续)l4. 基于记录的日志文件基于记录的日志文件–每条日志记录的内容每条日志记录的内容•事务标识(标明是那个事务)事务标识(标明是那个事务)•操作类型(插入、删除或修改)操作类型(插入、删除或修改)•操作对象操作对象•更新前数据的旧值(对插入操作而言,此更新前数据的旧值(对插入操作而言,此项为空值)项为空值)•更新后数据的新值(对删除操作而言更新后数据的新值(对删除操作而言, 此此项为空值)项为空值)日志文件的内容(续)日志文件的内容(续)l5. 基于数据块的日志文件基于数据块的日志文件–每条日志记录的内容每条日志记录的内容•事务标识(标明是那个事务)事务标识(标明是那个事务)•更新前数据所在的整个数据块的值(对插更新前数据所在的整个数据块的值(对插入操作而言,此项为空值)入操作而言,此项为空值)•更新后整个数据块的值(对删除操作而言更新后整个数据块的值(对删除操作而言, 此项为空值)此项为空值)二、日志文件的用途二、日志文件的用途l1.用途.用途–进行事务故障恢复进行事务故障恢复–进行系统故障恢复进行系统故障恢复–协助后备副本进行介质故障恢复协助后备副本进行介质故障恢复日志文件的用途(续)日志文件的用途(续)l2.与静态转储后备副本配合进行介质故障恢.与静态转储后备副本配合进行介质故障恢复复–静态转储的数据已是一致性的数据静态转储的数据已是一致性的数据–如果静态转储完成后,仍能定期转储日志文如果静态转储完成后,仍能定期转储日志文件,则在出现介质故障重装数据副本后,可件,则在出现介质故障重装数据副本后,可以利用这些日志文件副本对已完成的事务进以利用这些日志文件副本对已完成的事务进行重做处理行重做处理–这样不必重新运行那些已完成的事务程序就这样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状可把数据库恢复到故障前某一时刻的正确状态态日志文件的用途(续)日志文件的用途(续) 故障发生点故障发生点 静态转储静态转储 运行事务运行事务 ↓↓正常运行正常运行 ─┼──────┼──────────────┼──────┼───────────── Ta Ta Tb Tb TfTf 登记日志文件登记日志文件 └─────────────└───────────── 重装后备副本重装后备副本 利用日志文件恢复事务利用日志文件恢复事务 继续运行继续运行介质故障恢复介质故障恢复 ───────┴───────┴--------------------┴───────→┴───────→ 登记日志文件登记日志文件 └───────└───────→日志文件的用途(续)日志文件的用途(续)l3.与动态转储后备副本配合使用进行介质故.与动态转储后备副本配合使用进行介质故障恢复障恢复–动态转储机制在转储数据库时,必须同时转动态转储机制在转储数据库时,必须同时转储同一时间点的日志文件,后备副本与该日储同一时间点的日志文件,后备副本与该日志文件结合起来才能将数据库恢复到一致性志文件结合起来才能将数据库恢复到一致性状态。
状态–与静态转储一样,如果动态转储完成后,仍与静态转储一样,如果动态转储完成后,仍能定期转储日志文件,则在做介质故障恢复能定期转储日志文件,则在做介质故障恢复时,可以利用这些日志文件副本进一步恢复时,可以利用这些日志文件副本进一步恢复数据库,避免重新运行事务程序数据库,避免重新运行事务程序三、登记日志文件的原则三、登记日志文件的原则l为保证数据库是可恢复的,登记日志文件时必为保证数据库是可恢复的,登记日志文件时必须遵循两条原则须遵循两条原则–登记的次序严格按并行事务执行的时间次序登记的次序严格按并行事务执行的时间次序–必须先写日志文件,后写数据库必须先写日志文件,后写数据库•写数据库操作:把对数据的修改写到数据库中写数据库操作:把对数据的修改写到数据库中•写日志文件操作:把表示这个修改的日志记录写写日志文件操作:把表示这个修改的日志记录写到日志文件到日志文件登记日志文件的原则(续)登记日志文件的原则(续)l为什么要先写日志文件为什么要先写日志文件–写数据库和写日志文件是两个不同的操作写数据库和写日志文件是两个不同的操作–有可能在这两个操作之间发生故障,即这两个写操有可能在这两个操作之间发生故障,即这两个写操作只完成了一个作只完成了一个–如果先写了数据库修改,而在日志文件中没有登记如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了下这个修改,则以后就无法恢复这个修改了–如果先写日志,但没有修改数据库,按日志文件恢如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的复时只不过是多执行一次不必要的UNDO操作,并操作,并不会影响数据库的正确性不会影响数据库的正确性5.4.2 恢复的实现技术恢复的实现技术5.4.2.1 数据转储数据转储5.4.2.2 登记日志文件登记日志文件5.4.2.3 恢复策略恢复策略5.4.2.3 恢复策略恢复策略l1. 事务故障的恢复事务故障的恢复l2. 系统故障的恢复系统故障的恢复l3. 介质故障的恢复介质故障的恢复1. 事务故障的恢复事务故障的恢复l事务故障是指事务在运行至正常终止点前被中事务故障是指事务在运行至正常终止点前被中止止l恢复方法恢复方法–由恢复子系统应利用日志文件撤消由恢复子系统应利用日志文件撤消((UNDO))此事务已对数据库进行的修改此事务已对数据库进行的修改l事务故障的恢复由系统自动完成,不需要用户事务故障的恢复由系统自动完成,不需要用户干预干预事务故障的恢复(续)事务故障的恢复(续)l恢复步骤恢复步骤1. 反向扫描文件日志(即从最后向前扫描日志反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
文件),查找该事务的更新操作2. 对该事务的更新操作执行逆操作即将日志对该事务的更新操作执行逆操作即将日志记录中记录中“更新前的值更新前的值”写入数据库写入数据库–如果记录中是插入操作,则相当于做删除操作(因如果记录中是插入操作,则相当于做删除操作(因为此时为此时“更新前的值更新前的值”为空)为空)–若记录中是删除操作,则相当于做插入操作(因为若记录中是删除操作,则相当于做插入操作(因为此时此时“更新后的值更新后的值”为空)为空)–若是修改操作,则相当于用修改前值代替修改后值若是修改操作,则相当于用修改前值代替修改后值事务故障的恢复(续)事务故障的恢复(续)–3. 继续反向扫描日志文件,查找该事务的其继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理他更新操作,并做同样处理–4. 如此处理下去,直至读到此事务的开始标如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了记,事务故障恢复就完成了2. 系统故障的恢复系统故障的恢复l系统故障造成数据库不一致状态的原因系统故障造成数据库不一致状态的原因–一些未完成事务对数据库的更新已写入数据库一些未完成事务对数据库的更新已写入数据库–一些已提交事务对数据库的更新还留在缓冲区一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据库没来得及写入数据库l恢复方法恢复方法–1. 撤消故障发生时未完成的事务撤消故障发生时未完成的事务–2. 重做已完成的事务重做已完成的事务l系统故障的恢复由系统在重新启动时自动完成,系统故障的恢复由系统在重新启动时自动完成,不需要用户干预不需要用户干预系统故障的恢复(续)系统故障的恢复(续)l恢复步骤恢复步骤1.正向扫描日志文件(即从头扫描日志文件)正向扫描日志文件(即从头扫描日志文件)–找出在故障发生前已经提交的事务找出在故障发生前已经提交的事务,将事务将事务标识记入重做队列标识记入重做队列–同时找出故障发生时尚未完成的事务同时找出故障发生时尚未完成的事务,将事将事务标识记入撤消队列务标识记入撤消队列 系统故障的恢复(续)系统故障的恢复(续)2. 对撤消队列中的各个事务进行撤消对撤消队列中的各个事务进行撤消(UNDO)处处理理–反向扫描日志文件,对每个反向扫描日志文件,对每个UNDO事务的更事务的更新操作执行逆操作,即将日志记录中新操作执行逆操作,即将日志记录中“更新更新前的值前的值”写入数据库写入数据库 3. 对重做队列中的各个事务进行重做对重做队列中的各个事务进行重做(REDO)处处理理–正向扫描日志文件,对每个正向扫描日志文件,对每个REDO事务重新事务重新执行登记的操作。
即将日志记录中执行登记的操作即将日志记录中“更新后更新后的值的值”写入数据库写入数据库 3. 介质故障的恢复介质故障的恢复l发生介质故障后,磁盘上的物理数据和日志文发生介质故障后,磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障件被破坏,这是最严重的一种故障l恢复方法恢复方法–1. 重装数据库,使数据库恢复到一致性状态重装数据库,使数据库恢复到一致性状态–2. 重做已完成的事务重做已完成的事务介质故障的恢复(续)介质故障的恢复(续)l恢复步骤恢复步骤1. 装入最新的后备数据库副本,使数据库恢复到装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态最近一次转储时的一致性状态–对于静态转储的数据库副本,装入后数据库对于静态转储的数据库副本,装入后数据库即处于一致性状态即处于一致性状态–对于动态转储的数据库副本,还须同时装入对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统转储时刻的日志文件副本,利用与恢复系统故障相同的方法(即故障相同的方法(即REDO+UNDO),),才才能将数据库恢复到一致性状态能将数据库恢复到一致性状态利用静态转储副本利用静态转储副本将数据库恢复到一致性状态将数据库恢复到一致性状态 故障发生点故障发生点 静态静态转储转储 运行事务运行事务 ↓↓正常运行正常运行 ─┼───────┼──────────────┼───────┼───────────── Ta Ta Tb Tb TfTf 登记日志文件登记日志文件 └─────────────└───────────── 重装后备副本重装后备副本 恢复恢复 ━━━━━━┥━━━━━━┥利用动态转储副本利用动态转储副本将数据库恢复到一致性状态将数据库恢复到一致性状态 Ta Ta Tb Tb TfTf 动态动态转储转储 运行事务运行事务 故障发生点故障发生点正常运行正常运行 ─┼───────┼──────────────┼───────┼───────────── 登记日志文件登记日志文件 登记新日志文件登记新日志文件 ─────────┼──────────────────────┼───────────── 转储日志文件转储日志文件 重装后备副本,然后利用转储的日志文件恢复重装后备副本,然后利用转储的日志文件恢复恢复到一恢复到一 ━━━━━━┥━━━━━━┥致性状态致性状态介质故障的恢复(续)介质故障的恢复(续)2. 装入有关的日志文件副本,重做已完成的事务。
装入有关的日志文件副本,重做已完成的事务–首先扫描日志文件,找出故障发生时已提交首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列的事务的标识,将其记入重做队列–然后正向扫描日志文件,对重做队列中的所然后正向扫描日志文件,对重做队列中的所有事务进行重做处理即将日志记录中有事务进行重做处理即将日志记录中“更更新后的值新后的值”写入数据库写入数据库介质故障的恢复(续)介质故障的恢复(续)l介质故障的恢复需要介质故障的恢复需要DBA介入介入–DBA的工作的工作•重装最近转储的数据库副本和有关的各日重装最近转储的数据库副本和有关的各日志文件副本志文件副本•执行系统提供的恢复命令执行系统提供的恢复命令–具体的恢复操作仍由具体的恢复操作仍由DBMS完成完成5.4 恢复恢复5.4.1 恢复的原理恢复的原理5.4.2 恢复的实现技术恢复的实现技术5.4.3 ORACLE的恢复技术的恢复技术5.4.3 Oracle的恢复技术的恢复技术lORACLE恢复机制恢复机制–1. 转储转储–2. 登记日志文件登记日志文件 Oracle的恢复技术(续)的恢复技术(续)l1. 转储转储–转储后备副本的方法转储后备副本的方法•文件拷贝文件拷贝•EXPORT实用程序实用程序•用用SQL命令命令SPOOL•自己编程实现自己编程实现Oracle的恢复技术(续)的恢复技术(续)–重装后备副本的方法重装后备副本的方法•文件拷贝文件拷贝•IMPORT实用程序实用程序•SQL*LOADER实用程序实用程序•自己编程实现自己编程实现Oracle的恢复技术(续)的恢复技术(续)l2. 登记日志文件登记日志文件–ORACLE V.5::以数据块为单位以数据块为单位–ORACLE V.7::REDO日志日志 + 回滚段回滚段Oracle的恢复技术(续)的恢复技术(续)lORACLE V.5的恢复技术的恢复技术–日志文件以数据块为单位,恢复操作不是基日志文件以数据块为单位,恢复操作不是基于操作,而是基于数据块于操作,而是基于数据块–将更新前的旧值与更新后的新值分别放在两将更新前的旧值与更新后的新值分别放在两个不同的日志文件中个不同的日志文件中•记录数据库更新前旧值的日志文件称为数记录数据库更新前旧值的日志文件称为数据库前像文件(据库前像文件(Before Image,,简称简称BI文文件)件)•记录数据库更新后新值的日志文件称为数记录数据库更新后新值的日志文件称为数据库的后像文件(据库的后像文件(After Image,,简称简称AI文件)文件)Oracle的恢复技术(续)的恢复技术(续)lORACLE V.5的恢复技术的恢复技术(续续)–BI文件是必须的,文件是必须的,AI文件是任选的文件是任选的–没有没有AI文件:只能执行文件:只能执行UNDO处理,不能执处理,不能执行行REDO处理处理Oracle的恢复技术(续)的恢复技术(续)lORACLE V.7的恢复技术的恢复技术–REDO日志文件:记录被更新数据的前像和日志文件:记录被更新数据的前像和后像后像–回滚段回滚段(Rollback Segment):):记录尚未完记录尚未完成的更新事务的更新数据的前像成的更新事务的更新数据的前像–事务故障恢复事务故障恢复•根据回滚段中的数据,撤消该事务的操作根据回滚段中的数据,撤消该事务的操作Oracle的恢复技术(续)的恢复技术(续)lORACLE V.7的恢复技术的恢复技术(续续)–系统故障恢复系统故障恢复•首先扫描首先扫描REDO日志文件,重做所有操作,日志文件,重做所有操作,并对更新操作建立回滚段数据。
当遇到提并对更新操作建立回滚段数据当遇到提交记录,取消相应回滚段中数据交记录,取消相应回滚段中数据•再根据回滚段中的数据,撤消未正常提交再根据回滚段中的数据,撤消未正常提交的事务的操作(图的事务的操作(图7.6))优点:只需要扫描日志文件一遍优点:只需要扫描日志文件一遍Oracle的恢复技术(续)的恢复技术(续)图图 Oracle的恢复过程的恢复过程 (a) 发生故障,事务非正常终止发生故障,事务非正常终止 TaTfT1T3T2T44时间时间Oracle的恢复技术(续)的恢复技术(续) (b) 利用利用REDO文件,重做所有操作文件,重做所有操作 时间时间T1T3T2T44Oracle的恢复技术(续)的恢复技术(续)(c) 利用回滚段撤消未提交的事务数据库恢复到一致性状态利用回滚段撤消未提交的事务数据库恢复到一致性状态 时间时间T1T2Oracle的恢复技术(续)的恢复技术(续)lORACLE V.7的恢复技术的恢复技术(续续)–介质故障恢复介质故障恢复•重装数据库后备副本文件,恢复到转储时重装数据库后备副本文件,恢复到转储时的数据库一致性状态的数据库一致性状态•利用在此之后转储的利用在此之后转储的REDO日志文件副本日志文件副本将数据库恢复到最近点将数据库恢复到最近点(类似于系统故障类似于系统故障恢复恢复)小结小结l如果数据库只包含成功事务提交的结果,就说如果数据库只包含成功事务提交的结果,就说数据库处于一致性状态。
保证数据一致性是对数据库处于一致性状态保证数据一致性是对数据库的最基本的要求数据库的最基本的要求l事务是数据库的逻辑工作单位事务是数据库的逻辑工作单位–DBMS保证系统中一切事务的原子性、一致保证系统中一切事务的原子性、一致性、隔离性和持续性性、隔离性和持续性小结(续)小结(续)lDBMS必须对事务故障、系统故障和介质故障必须对事务故障、系统故障和介质故障进行恢复进行恢复l恢复中最经常使用的技术:数据库转储和登记恢复中最经常使用的技术:数据库转储和登记日志文件日志文件l恢复的基本原理:利用存储在后备副本、日志恢复的基本原理:利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库文件和数据库镜像中的冗余数据来重建数据库小结(续)小结(续)l常用恢复技术常用恢复技术–事务故障的恢复事务故障的恢复•UNDO–系统故障的恢复系统故障的恢复•UNDO + REDO–介质故障的恢复介质故障的恢复•重装备份并恢复到一致性状态重装备份并恢复到一致性状态 + REDO第第5章章 数据库保护数据库保护l5.1 安全性安全性l5.2 完整性完整性l5.3 并发控制并发控制l5.4 恢复恢复l5.5 数据库复制与数据库镜像数据库复制与数据库镜像5.5 数据库复制和数据库镜像数据库复制和数据库镜像l5.5.1 数据库复制数据库复制l5.5.2 数据库镜像数据库镜像5.5 数据库复制和数据库镜像数据库复制和数据库镜像l5.5.1 数据库复制数据库复制l5.5.2 数据库镜像数据库镜像5.5.1 数据库复制数据库复制l复制是数据库更具容错性的方法,主要用于复制是数据库更具容错性的方法,主要用于分布式结构的数据库中分布式结构的数据库中l在多个场地保留多个数据库备份,可是是整在多个场地保留多个数据库备份,可是是整个数据库的副本,也可以是部分数据库的副个数据库的副本,也可以是部分数据库的副本本l各个场地的用户可以并发存取不同的数据库各个场地的用户可以并发存取不同的数据库副本,进一步提高系统并发度。
但副本,进一步提高系统并发度但DBMS必必须采取一定手段,保证用户对数据库的修改须采取一定手段,保证用户对数据库的修改能够及时反映到其所有副本上能够及时反映到其所有副本上数据库复制(续)数据库复制(续)l当数据库出现故障,系统可以用副本对当数据库出现故障,系统可以用副本对其进行联机恢复,而在恢复过程中,用其进行联机恢复,而在恢复过程中,用户可以继续访问该数据库的副本,而不户可以继续访问该数据库的副本,而不必中断其应用,如下页图所示必中断其应用,如下页图所示图:数据复制图:数据复制结点1结点2主数据库备份数据库结点2主数据库备份数据库数据库复制(续)数据库复制(续)l数据库复制三种方式:数据库复制三种方式:–对等复制对等复制–主主/从复制从复制–级联复制级联复制l不同的复制方式提供了不同程度的数据不同的复制方式提供了不同程度的数据一致性一致性1、对等复制、对等复制l对等复制是最理想的复制方式对等复制是最理想的复制方式–哥哥场地的数据库地位是平等的,可以互相哥哥场地的数据库地位是平等的,可以互相复制数据复制数据–用户可以在任何场地读取和更新公共数据集,用户可以在任何场地读取和更新公共数据集,在某一场地更新公共数据集时,在某一场地更新公共数据集时,DBMS会立会立即将数据传送到所有其它副本即将数据传送到所有其它副本对等复制(续)对等复制(续)应用复制数据库复制数据库复制数据库复制数据库应用事务事务2、主、主/从复制从复制l数据只能从主数据库中复制到从数据库数据只能从主数据库中复制到从数据库中中l更新数据只能在主场地上进行,从场地更新数据只能在主场地上进行,从场地供用户读数据供用户读数据l当主场地出现故障时,更新数据的应用当主场地出现故障时,更新数据的应用可以转到其中一个复制场地上去可以转到其中一个复制场地上去l实现起来比较简单,易于维护数据一致实现起来比较简单,易于维护数据一致性性主主/从数据库(续)从数据库(续)复制数据库复制数据库复制数据库复制数据库应用事务3、级联复制、级联复制l指从主场的复制过来的数据,又从该场指从主场的复制过来的数据,又从该场地再次复制到其它场地,即地再次复制到其它场地,即A场地把数据场地把数据复制到复制到B场地,场地,B场地又把这些数据或其场地又把这些数据或其中部分数据再复制到其它场地中部分数据再复制到其它场地l可以平衡当前各种数据需求对网络交通可以平衡当前各种数据需求对网络交通的压力的压力l通常与前两种配置联合使用通常与前两种配置联合使用级联复制(续)级联复制(续)复制数据库复制数据库复制数据库复制数据库应用事务复制数据库复制数据库数据库复制(续)数据库复制(续)lDBMS在使用复制技术时必须做到以下几点:在使用复制技术时必须做到以下几点:–1、数据库复制必须对用户透明、数据库复制必须对用户透明–2、主数据库和各个从复制数据库在任何时候都必、主数据库和各个从复制数据库在任何时候都必须保持事务的完整性须保持事务的完整性–3、对于对异步的可在任何地方更新的复制方式,、对于对异步的可在任何地方更新的复制方式,当两个应用在两个场地同时更新同一个记录,一个当两个应用在两个场地同时更新同一个记录,一个场地的更新事务尚未复制到另一个场地时,第二个场地的更新事务尚未复制到另一个场地时,第二个场地已开始更新,这时可能引起冲突。
场地已开始更新,这时可能引起冲突DBMS必须必须提供控制冲突的方法,包括各种形式的自动解决方提供控制冲突的方法,包括各种形式的自动解决方法和人工干预方法法和人工干预方法5.5 数据库复制和数据库镜像数据库复制和数据库镜像l5.5.1 数据库复制数据库复制l5.5.2 数据库镜像数据库镜像5.5.2 数据库镜像数据库镜像l介质故障是对系统影响最为严重的一种故障,介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性严重影响数据库的可用性–介质故障恢复比较费时介质故障恢复比较费时–为预防介质故障,为预防介质故障,DBA必须周期性地转储数必须周期性地转储数据库据库l提高数据库可用性的解决方案提高数据库可用性的解决方案–数据库镜像(数据库镜像(Mirror))数据库镜像(续)数据库镜像(续)l数据库镜像数据库镜像–DBMS自动把整个数据库或其中的关键数据自动把整个数据库或其中的关键数据复制到另一个磁盘上复制到另一个磁盘上–DBMS自动保证镜像数据与主数据的一致性自动保证镜像数据与主数据的一致性(图图7.5a)数据库镜像(续)数据库镜像(续)l数据库镜像的用途数据库镜像的用途–出现介质故障时出现介质故障时•DBMS自动利用镜像磁盘数据进行数据库自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副的恢复,不需要关闭系统和重装数据库副本本(图图7.5b)–没有出现故障时没有出现故障时•可用于并发操作可用于并发操作(图图7.5a)–一个用户对数据加排他锁修改数据一个用户对数据加排他锁修改数据–其他用户可以读镜像数据库上的数据其他用户可以读镜像数据库上的数据数据库镜像(续)数据库镜像(续)图数据库镜像图数据库镜像。












