系统实现技术课件

上传人:阳*** 文档编号:84431711 上传时间:2022-05-03 格式:PPT 页数:79 大小:285.50KB
返回 下载 相关 举报
系统实现技术课件_第1页
第1页 / 共79页
系统实现技术课件_第2页
第2页 / 共79页
系统实现技术课件_第3页
第3页 / 共79页
点击查看更多>>
资源描述
系统实现技术系统实现技术系统实现技术第七章第七章系统实现技术本章内容本章内容 本章主要涉及实现本章主要涉及实现DBMS时的具体技术。时的具体技术。 系统目录系统目录 :存放数据库结构的描述。:存放数据库结构的描述。 事务:所有对数据库的操作,都要以事务作为一个整体单事务:所有对数据库的操作,都要以事务作为一个整体单 位来执行位来执行或撤销。或撤销。 在在DBS运行时,运行时,DBMS要对要对DB进行监控,以保证整个系统的正常进行监控,以保证整个系统的正常运转,防止数据意外丢失和不一致数据的产生。运转,防止数据意外丢失和不一致数据的产生。DBMS对对 DB的监控,的监控,称为数据库的管理,有时也称为数据库的保护。对数据库的管理主要称为数据库的管理,有时也称为数据库的保护。对数据库的管理主要通过四个方面实现:通过四个方面实现: 数据库的恢复数据库的恢复 并发控制并发控制 完整性控制完整性控制 安全性控制安全性控制每一方面构成了每一方面构成了DBMS的一个子系统。的一个子系统。系统实现技术71 系统目录系统目录 系统目录系统目录(System Catalog)是任何通用)是任何通用 DBMS的的核心。核心。 系统目录本身就是一个系统目录本身就是一个“微型数据库微型数据库”,其,其主要功能是存储主要功能是存储DBMS管理的数据库的定义或描管理的数据库的定义或描述。这类信息被称为述。这类信息被称为元数据(元数据(Metadata),主要),主要包括数据库三级结构、两级映象的定义。包括数据库三级结构、两级映象的定义。 系统实现技术应用程序A工作区模式系统缓冲区数据库DBMSOS内模式工作日志应用系统A工作区 图1-15 访问数据库的主要步骤 数据字典数据字典系统实现技术71 关系关系 DBMS的目录的目录 关系关系DBMS的系统目录存储下列信息:的系统目录存储下列信息: (1)关系名,属性名,属性域(数据类型);)关系名,属性名,属性域(数据类型); (2)各种约束,主键,辅助键,外键,空值)各种约束,主键,辅助键,外键,空值 非空值;非空值; (3)视图的外部级描述,存储结构和索引的内部)视图的外部级描述,存储结构和索引的内部级描述;级描述; (4)安全性和授权规则;)安全性和授权规则; (5)数据完整性规则。)数据完整性规则。系统实现技术在关系在关系 DBMS中,中,系统目录被组织成关系系统目录被组织成关系(表(表格),格), 例如例如 Oracle系统中,系统目录由系统中,系统目录由42个关系组个关系组成成。DBMS可以对目录执行查询、修改和维护操可以对目录执行查询、修改和维护操作;而用户一般只能执行查询操作不能进行修改作;而用户一般只能执行查询操作不能进行修改或维护。或维护。系统实现技术图图7.1所示的是教学数据库三个关系的定义存储在所示的是教学数据库三个关系的定义存储在目录中的形式。系统目录中的关系名为目录中的形式。系统目录中的关系名为REL_AND _ATTR_CATALOG,存储用户关系中属性的性质,存储用户关系中属性的性质,包括数据类型、主键、外键等。这个关系的主键包括数据类型、主键、外键等。这个关系的主键为(为(REL_NAME,ATTR_NAME) 系统实现技术图图7.1示的是教学数据库三个关系的定义存储在目示的是教学数据库三个关系的定义存储在目录中的形式。系统目录中的关系名为录中的形式。系统目录中的关系名为REL_AND ATTR_ CATALOG,存储用户关系中属性的性质,存储用户关系中属性的性质,包括数据类型、主键、外键等。这个关系的主键包括数据类型、主键、外键等。这个关系的主键为(为(REL _NAME,ATTR_NAME) 系统实现技术索引信息可用目录关系索引信息可用目录关系 RELATION_INDEXES表表示,如图示,如图 72(b)所示,主键为)所示,主键为(INDEX_NAME,MEMBER_ATTR)。)。 视图的定义可用两个目录关系实现,如图视图的定义可用两个目录关系实现,如图72(C)所示。)所示。 系统实现技术 至此,我们介绍了系统目录中的一些基本的信息存储方式。至此,我们介绍了系统目录中的一些基本的信息存储方式。日前,在大多数日前,在大多数DBMS的系统日录中,还存储了数据库运的系统日录中,还存储了数据库运行的信息行的信息,例如每个基本关系中元组的数目和各个属性的,例如每个基本关系中元组的数目和各个属性的平均访问次数,索引的层次数等。这些信息必须由平均访问次数,索引的层次数等。这些信息必须由DBMS经常更新,以反映数据库的使用状况。经常更新,以反映数据库的使用状况。因此,系统目录对因此,系统目录对任何一个任何一个DBMS而言,都是十分重要的组成部分。而言,都是十分重要的组成部分。 有的系统,甚至把系统目录数据字典系统从有的系统,甚至把系统目录数据字典系统从DBMS中分中分离出来,成为一个独立的数据字典系统,并使之成为一个离出来,成为一个独立的数据字典系统,并使之成为一个比比DBMS还要高级的用户与系统之间的接口,用户对数据还要高级的用户与系统之间的接口,用户对数据库的所有操作都要通过数据字典实现,而不直接与库的所有操作都要通过数据字典实现,而不直接与DBMS接触。接触。 系统实现技术7.2 事务事务7.2 事务举例事务举例从用户观点看,对数据库的某些操作应是一个整从用户观点看,对数据库的某些操作应是一个整体,也就是一个独立的工作单元,不能分割。体,也就是一个独立的工作单元,不能分割。例如,客户认为电子资金转账(从账目例如,客户认为电子资金转账(从账目A转一笔款转一笔款到账号到账号B)是一个独立的操作,而在)是一个独立的操作,而在DBS中这是由中这是由几个操作组成的。显然,这些操作要么全都发生,几个操作组成的。显然,这些操作要么全都发生,要么由于出错(可能账号要么由于出错(可能账号A二透支)而全不发生。二透支)而全不发生。保证这一点非常重要,我们决不允许发生下面的保证这一点非常重要,我们决不允许发生下面的事情:在账号事情:在账号A透支情况下继续转账;或者从账号透支情况下继续转账;或者从账号A转出了一笔钱,而不知去向未能转人账号转出了一笔钱,而不知去向未能转人账号B中中.这这样就引出了事务的概念。样就引出了事务的概念。 系统实现技术7.2.1 7.2.1 事务的概念事务的概念 事务事务是一个是一个操作序列操作序列。 这些操作要么什么都做,这些操作要么什么都做, 要么都不做,是一个不可分割的工作单位。要么都不做,是一个不可分割的工作单位。 是构成单一逻辑工作单元的操作集合是构成单一逻辑工作单元的操作集合; DBS的主要意图是执行的主要意图是执行“事务事务”; 相当于操作系统环境中的相当于操作系统环境中的“进程进程”概念。概念。 一个程序的执行可通过若干事务的执行序列来完成。一个程序的执行可通过若干事务的执行序列来完成。事务是不能嵌套的,可恢复的操作必须在一个事务事务是不能嵌套的,可恢复的操作必须在一个事务的界限内才能执行的界限内才能执行. 系统实现技术事务的开始与结束可以由用户显式控制。如果用户事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由没有显式地定义事务,则由DBMS按缺省规定自动划按缺省规定自动划分事务。分事务。在在SQL语言中,定义事务的语句有三条:语言中,定义事务的语句有三条: BEGIN TRANSACTION:事务开始事务开始 COMMIT:提交事务的所有操作提交事务的所有操作,即将事务中所有即将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束事务正常结束 ROLLBACK:回滚,即在事务运行的过程中因发回滚,即在事务运行的过程中因发生某种故障而不能继续执行,通过生某种故障而不能继续执行,通过ROLLBACK对对数据库的所有已完成的操作全部撤消,滚回到事数据库的所有已完成的操作全部撤消,滚回到事务开始时的状态务开始时的状态 ROLLBACK语句保证数据库处于正确的状态语句保证数据库处于正确的状态系统实现技术事务举例的代码事务举例的代码T:BEGIN TRANSACTION; Read(A);); A:=A-50; write(A);); if(A0)ROLLBACK; else read(B);); B:=B+50; write(B);); COMMITE;系统实现技术1原子性原子性(Atomicity) :事务是数据库的逻辑工事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不作单位,事务中包括的诸操作要么都做,要么都不做。做。 由由DBMS的事务管理子系统来实现。的事务管理子系统来实现。 2一致性一致性(Consistency) :事务执行的结果必须是使事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,系统将事务中对数据库的所有已完成就被迫中断,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始时的一致状态。成的操作全部撤消,滚回到事务开始时的一致状态。 由由DBMS的完整性子系统执行测试任务。的完整性子系统执行测试任务。 7.2.2事务的特性事务的特性(ACID)系统实现技术3隔离性隔离性(Isolation) :一个事务的执行不能一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,用的数据对其他并发事务是隔离的,并发执行并发执行的各个事务之间不能互相干扰。的各个事务之间不能互相干扰。 隔离性是由隔离性是由DBMS的并发控制子系统实现的。的并发控制子系统实现的。 4持续性持续性 (Durability):事务完成之后,它对事务完成之后,它对于系统的影响是永久性的。该修改即使出现系于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。统故障也将一直保持。 事务的持久性由事务的持久性由DBMS的恢复管理子系统实现的。的恢复管理子系统实现的。系统实现技术T:BEGIN TRANSACTION; Read(A);); A:=A-50; write(A);); if(A0)ROLLBACK; else read(B);); B:=B+50; write(B);); COMMITE;原子性原子性一致性一致性 隔离性隔离性 持久性持久性 一旦事务成功完成,该事务对数据库施加的所有更新都是永久的。也就是计算机系统一旦事务成功完成,该事务对数据库施加的所有更新都是永久的。也就是计算机系统 的故障将会导致内存的数据丢失,但已写人磁盘的数据决不会丢失。的故障将会导致内存的数据丢失,但已写人磁盘的数据决不会丢失。系统实现技术 为了精确地描述事务的工作,我们建立一个抽象为了精确地描述事务的工作,我们建立一个抽象的事务模型,事务的状态变迁图如图的事务模型,事务的状态变迁图如图74所示。所示。 系统实现技术事务是恢复和并发控制的基本单位。保证事务事务是恢复和并发控制的基本单位。保证事务ACID特性是事务处理的重要任务。事务特性是事务处理的重要任务。事务ACID特性可能遭特性可能遭到破坏的因素有:到破坏的因素有: 1. 多个事务并行运行时,不同事务的操作交叉执多个事务并行运行时,不同事务的操作交叉执行。行。 要求数据库管理系统必须保证多个事务的交叉运要求数据库管理系统必须保证多个事务的交叉运行不影响这些事务的原子性行不影响这些事务的原子性.(并发控制机制并发控制机制)2. 事务在运行过程中被强行停止事务在运行过程中被强行停止 :要求数据库管理系统必须保证被强行终止的事务要求数据库管理系统必须保证被强行终止的事务对数据库和其它事务没有任何影响。对数据库和其它事务没有任何影响。(恢复机制恢复机制) 对事务的进一步研究对事务的进一步研究系统实现技术尽管数据库系统中采取了各种保护措施来防止数据库的安尽管数据库系统中采取了各种保护措施来防止数据库的安全性和完整性被破坏,保证并发事务的正确执行,但全性和完整性被破坏,保证并发事务的正确执行,但: : 计算机系统中硬件的故障计算机系统中硬件的故障 软件的错误软件的错误 操作员的失误以及恶意的破坏操作员的失误以及恶意的破坏 这些故障时有发生这些故障时有发生, ,轻则造成运行事务非正常中断,影轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此全部或部分数据丢失,因此数据库管理系统(恢复子系统)数据库管理系统(恢复子系统)必须具有把数据库从错误状态恢复到某一已知的正确状态必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能(亦称为一致状态或完整状态)的功能. .这就是数据库的恢复。这就是数据库的恢复。7.3 数据库恢复概述数据库恢复概述系统实现技术7.3.1 7.3.1 故障类型故障类型事务故障事务故障 系统故障系统故障介质故障介质故障计算机病毒计算机病毒系统实现技术 一、事务内部的故障一、事务内部的故障预期故障预期故障(即可通过事务程序本身发现即可通过事务程序本身发现,如下面转帐事务的例子如下面转帐事务的例子.例如:银行转帐事务把一笔金额从一个帐户甲转给另一个帐户例如:银行转帐事务把一笔金额从一个帐户甲转给另一个帐户乙。乙。 BEGIN TRANSACTION; Read(A);); A:=A-50; write(A);); if(A0)ROLLBACK; else read(B);); B:=B+50; write(B);); COMMITE;故障的种类故障的种类系统实现技术非预期故障非预期故障 事务内部更多的故障是非预期的,不能由应用程序事务内部更多的故障是非预期的,不能由应用程序处理。如运算溢出、并发事务发生死锁而被选中撤处理。如运算溢出、并发事务发生死锁而被选中撤消该事务、违反了某些完整性限制等。消该事务、违反了某些完整性限制等。后面所提到后面所提到的事务故障仅指这类非预期的故障。的事务故障仅指这类非预期的故障。 事务故障意味着事务没有达到预期的终点事务故障意味着事务没有达到预期的终点,因此,因此,数据库可能处于不正确状态。恢复程序要在不影响数据库可能处于不正确状态。恢复程序要在不影响其它事务运行的情况下,强行回滚该事务,撤消该其它事务运行的情况下,强行回滚该事务,撤消该事务已经作出的任何对数据库的修改事务已经作出的任何对数据库的修改,此类恢复操作此类恢复操作称为事务撤消称为事务撤消(UNDO)。)。 故障的种类故障的种类系统实现技术 二、系统故障二、系统故障 (软故障(软故障(Soft Crash)) 系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。如如: 特定类型的硬件错误(特定类型的硬件错误(CPU故障)故障) 操作系统故障操作系统故障 DBMS代码错误代码错误 突然停电突然停电 出现此类故障出现此类故障,主存内容主存内容(尤其是内存中的数据库缓冲区的内容都被丢失,尤其是内存中的数据库缓冲区的内容都被丢失,所有运行事务都非正常终止。可能会有所有运行事务都非正常终止。可能会有: 一些尚未完成的事务的结果已送入物理数据库一些尚未完成的事务的结果已送入物理数据库 有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中磁盘上的物理数据库中 从而破坏了数据库的一致性,恢复子系统在系统重新启动时将会针对从而破坏了数据库的一致性,恢复子系统在系统重新启动时将会针对所有非正常终止的事务回滚所有非正常终止的事务回滚: 强行撤消(强行撤消(UNDO)所有未完成事务所有未完成事务 重做(重做(Redo)所有已提交的事务所有已提交的事务故障的种类故障的种类影响正在运行的所有事影响正在运行的所有事务,但不破坏数据库务,但不破坏数据库系统实现技术 三、介质故障三、介质故障(硬故障(硬故障(Hard Crash)) 硬故障指外存故障,如磁盘损坏、磁头碰撞,瞬硬故障指外存故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等。这类故障将破坏数据库或部分时强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。数据库,并影响正在存取这部分数据的所有事务。这类故障比前两类故障发生的可能性小得多,但这类故障比前两类故障发生的可能性小得多,但破坏性最大破坏性最大。四、计算机病毒四、计算机病毒 计算机病毒是具有破坏性、可以自我复制的计算机计算机病毒是具有破坏性、可以自我复制的计算机程序。计算机病毒已成为计算机系统的主要威胁,程序。计算机病毒已成为计算机系统的主要威胁,自然也是数据库系统的主要威胁。自然也是数据库系统的主要威胁。因此数据库一因此数据库一旦被破坏仍要用恢复技术把数据库加以恢复。旦被破坏仍要用恢复技术把数据库加以恢复。 故障的种类故障的种类系统实现技术总结各类故障,对数据库的影响有两种可能性:总结各类故障,对数据库的影响有两种可能性:一是数据库本身被破坏。一是数据库本身被破坏。二是数据库没有破坏,但数据可能不正确,这是因为二是数据库没有破坏,但数据可能不正确,这是因为事务的运行被非正常终止造成的事务的运行被非正常终止造成的 。恢复的基本原理:恢复的基本原理:冗余冗余。 即根据存储在系统别处的冗余数据来重建或恢复数据即根据存储在系统别处的冗余数据来重建或恢复数据库中任何一部分被破坏的或不正确的数据。库中任何一部分被破坏的或不正确的数据。故障的种类故障的种类系统实现技术恢复机制涉及的两个关键问题是:恢复机制涉及的两个关键问题是:(1)如何建立冗余数据;如何建立冗余数据;(2)如何利用这些冗余数据实施数据库恢复。如何利用这些冗余数据实施数据库恢复。 建立冗余数据最常用的技术建立冗余数据最常用的技术: (1)定期对数据库进行定期对数据库进行复制或转储复制或转储(dump) (2)建立建立“日志日志”文件文件 (3)恢复恢复 通常在恢复时通常在恢复时,两种方法一起使用。两种方法一起使用。7.3.2 恢复的实现技术恢复的实现技术系统实现技术 一、含义一、含义 转储转储:DBA定期地将整个数据库复制到磁带或另定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。本称为后备副本或后援副本。 当数据库遭到破坏后当数据库遭到破坏后:将后备副本重新装入将后备副本重新装入,数据库恢复到转储时的状态,数据库恢复到转储时的状态重新运行自转储以后的所有更新事务重新运行自转储以后的所有更新事务,恢复到故障发生恢复到故障发生时的状态时的状态1. 数据转储数据转储系统实现技术Ta:系统停止运行事务,进行数据库转储;系统停止运行事务,进行数据库转储;Tb:转储完毕,得到转储完毕,得到Tb时刻的数据库一致性副本时刻的数据库一致性副本Tf:系统发生故障。系统发生故障。 恢复数据库的过程恢复数据库的过程:由由DBA重装数据库后备副本,将数据库恢复至重装数据库后备副本,将数据库恢复至Tb时刻时刻的状态的状态重新运行自重新运行自Tb时刻至时刻至Tf时刻的所有更新事务,这样就时刻的所有更新事务,这样就把数据库恢复到故障发生前的一致状态。把数据库恢复到故障发生前的一致状态。 问题:问题:1.转储是十分转储是十分耗费时间耗费时间和资源的,不能频繁进行。和资源的,不能频繁进行。DBA应该根据数据库使用情况确定一个适当的转储周期。应该根据数据库使用情况确定一个适当的转储周期。 2.系统需要系统需要停止运行事务停止运行事务 1. 数据转储数据转储系统实现技术1. 数据转储数据转储分类分类* 静态转储静态转储* 动态转储动态转储* 海量转储海量转储* 增量转储增量转储按转储方式分按转储方式分按转储量分按转储量分系统实现技术1. 数据转储数据转储静态转储静态转储静态转储是在系统中静态转储是在系统中无运行事务无运行事务时进行的转储操时进行的转储操作。即转储操作开始的时刻,数据库处于一致性状作。即转储操作开始的时刻,数据库处于一致性状态,而转储期间不允许(或不存在)对数据库的任态,而转储期间不允许(或不存在)对数据库的任何存取、修改活动。何存取、修改活动。静态转储得到的静态转储得到的一定是一个数据一致性的副本一定是一个数据一致性的副本。静态转储简单,但必须等待正运行的用户事务结静态转储简单,但必须等待正运行的用户事务结束才能进行,而且新的事务也必须等待转储结束才束才能进行,而且新的事务也必须等待转储结束才能执行。这会能执行。这会降低数据库的可用性降低数据库的可用性。系统实现技术1. 数据转储数据转储动态转储动态转储动态转储是指转储期间允许对数据库进行存取或修改。即动态转储是指转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。转储和用户事务可以并发执行。 动态转储不用等待正在运行的用户事务结束,也动态转储不用等待正在运行的用户事务结束,也不会影响不会影响新事务的运行。但是,转储结束时后援副本上的数据新事务的运行。但是,转储结束时后援副本上的数据并不并不能保证正确有效能保证正确有效。 如,在转储期间的某个时刻如,在转储期间的某个时刻Tc,系统把数据系统把数据A=100转储到磁带上,转储到磁带上,而在下一时刻而在下一时刻Td,某一事务将某一事务将A改为改为200。转储结束后,后备副本上。转储结束后,后备副本上的的A已是过时的数据了。已是过时的数据了。 因此采用动态转储,必须把转储期间各事务对数据库的修改活动因此采用动态转储,必须把转储期间各事务对数据库的修改活动登记下来,登记下来,建立日志文件建立日志文件(log file)。)。这样,后援副本加上日志文件这样,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。就能把数据库恢复到某一时刻的正确状态。系统实现技术1. 数据转储数据转储转储还可以分为海量转储和增量转储两种方式:转储还可以分为海量转储和增量转储两种方式:海量转储海量转储:每次转储全部数据库每次转储全部数据库增量转储增量转储:每次只转储上一次转储后更新过的数据。每次只转储上一次转储后更新过的数据。 分析分析: 从恢复角度看,使用海量转储得到的后备副从恢复角度看,使用海量转储得到的后备副本进行恢复一般说来会更方便些。但如果数据库很本进行恢复一般说来会更方便些。但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用大,事务处理又十分频繁,则增量转储方式更实用更有效。更有效。 系统实现技术2. 日志文件日志文件一一. 日志文件的内容日志文件的内容 记录事务对数据库的更新操作的文件。记录事务对数据库的更新操作的文件。以记录为单位的日志文件,需要登记的内容包括:以记录为单位的日志文件,需要登记的内容包括: 每个事务的开始每个事务的开始(BEGIN TRANSACTION)标记标记 每个事务的结束每个事务的结束(COMMIT或或ROLL BACK)标记标记 每个事务的所有更新操作每个事务的所有更新操作 一个事务开始的标记、结束标记及所有的更新操作一个事务开始的标记、结束标记及所有的更新操作即构成了日志文件中的一个日志记录。即构成了日志文件中的一个日志记录。系统实现技术2. 日志文件日志文件更具体一点更具体一点,每个日志记录的内容主要包括:每个日志记录的内容主要包括: 事务标识(标明是哪个事务)事务标识(标明是哪个事务) 操作的类型(插入、删除或修改)操作的类型(插入、删除或修改) 操作对象操作对象(记录内部标识记录内部标识) 更新前数据的旧值(对插入操作而言,此项为空值)更新前数据的旧值(对插入操作而言,此项为空值) 更新后数据的新值(对删除操作而言更新后数据的新值(对删除操作而言, 此项为空值)此项为空值)系统实现技术2. 日志文件日志文件二、日志文件的作用二、日志文件的作用 用于进行事务故障恢复和系统故障恢复,并协助后备副本进用于进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。行介质故障恢复。具体如下:具体如下: 事务故障恢复和系统故障必须用日志文件事务故障恢复和系统故障必须用日志文件 在动态转储方式中必须建立日志文件,后援副本和日志在动态转储方式中必须建立日志文件,后援副本和日志文件的综合才能有效地恢复数据库。文件的综合才能有效地恢复数据库。 静态转储方式中,也可建立日志文件。当数据库毁坏后静态转储方式中,也可建立日志文件。当数据库毁坏后可重新装入后援副本把数据库恢复到转储结束时刻的正可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤消处理。这处理,对故障发生时尚未完成的事务进行撤消处理。这样不必重新运行那些已完成的事务程序就可把数据库恢样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态复到故障前某一时刻的正确状态,如图如图7.2所示。所示。 系统实现技术2. 日志文件日志文件系统实现技术2. 日志文件日志文件 三、登记日志文件(三、登记日志文件(logging)p 为保证数据库可恢复,登记日志文件时必须遵循:为保证数据库可恢复,登记日志文件时必须遵循:1. 登记的次序严格按并发事务执行的时间次序。登记的次序严格按并发事务执行的时间次序。2. 必须先写日志文件,后写数据库。必须先写日志文件,后写数据库。 把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。故障可能发生在两个操作之间,即这两个写件中是两个不同的操作。故障可能发生在两个操作之间,即这两个写操作只完成了一个操作只完成了一个: 若先写数据库修改,而在运行记录中没有登记下这个修改,则以后若先写数据库修改,而在运行记录中没有登记下这个修改,则以后就无法恢复这个修改。就无法恢复这个修改。 如果先写日志,但没有修改数据库,则可以根据日志文件进行如果先写日志,但没有修改数据库,则可以根据日志文件进行REDO或者或者UNDO,不会影响数据库的正确性不会影响数据库的正确性。 因此因此,要先把日志记录写到日志文件中,然后再写数据库的要先把日志记录写到日志文件中,然后再写数据库的修改。这就是修改。这就是“先写日志文件先写日志文件”的原则。的原则。 系统实现技术3.系统故障恢复策略系统故障恢复策略系统故障造成数据库不一致状态的原因:系统故障造成数据库不一致状态的原因:未完成事务对数据库的更新可能已写入数据未完成事务对数据库的更新可能已写入数据库库已提交事务对数据库的更新可能还留在缓冲已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。区没来得及写入数据库。系统实现技术3. 系统故障恢复策略系统故障恢复策略系统的恢复步骤是:系统的恢复步骤是: 1. 对未完成事务进行对未完成事务进行(UNDO)处理,即将日志记处理,即将日志记录中录中“更新前的值更新前的值”写入数据库。写入数据库。 2. 对重做队列中的各个事务进行重做对重做队列中的各个事务进行重做(REDO)处处理。即将日志记录中理。即将日志记录中“更新后的值更新后的值”写入数写入数据库据库系统故障的恢复是由系统在重新启动时自动完成系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。的,不需要用户干预。系统实现技术3.事务故障的恢复策略事务故障的恢复策略事务故障的恢复事务故障的恢复事务故障的恢复由系统自动完成,对用户透明。事务故障的恢复由系统自动完成,对用户透明。恢复过程如下恢复过程如下: 1. 反向扫描文件日志(即从最后向前扫描日志反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。文件),查找该事务的更新操作。系统实现技术3.事务故障的恢复策略事务故障的恢复策略2. 对该事务的更新操作执行逆操作。即将日志记录中对该事务的更新操作执行逆操作。即将日志记录中“更更新前的值新前的值”写入数据库写入数据库:1) 若日志记录中是插入操作,则相当于做删除操作若日志记录中是插入操作,则相当于做删除操作 (此时(此时“更新前的值更新前的值”为空)为空)2) 若是删除操作,则做插入操作若是删除操作,则做插入操作3) 若是修改操作,则用修改前值代替修改后值。若是修改操作,则用修改前值代替修改后值。3. 继续反向扫描日志文件,查找该事务的其他更新操作,继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。并做同样处理。 4. 如此处理下去,直至读到此事务的开始标记,事务故障如此处理下去,直至读到此事务的开始标记,事务故障恢复完成。恢复完成。系统实现技术3. 介质故障的恢复介质故障的恢复介质故障会导致磁盘上的物理数据和日志文件被破坏,这是介质故障会导致磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障。最严重的一种故障。恢复方法是重装数据库,然后重做已完成的事务。恢复方法是重装数据库,然后重做已完成的事务。具体操作:具体操作: 1. 装入最新的数据库后备副本(离故障发生时刻最近的转储装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态。副本),使数据库恢复到最近一次转储时的一致性状态。2. 装入相应的日志文件副本(转储结束时刻的日志文件副装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。本),重做已完成的事务。系统实现技术4. 具有检查点的恢复技术具有检查点的恢复技术系统实现技术4. 具有检查点的恢复技术具有检查点的恢复技术利用日志技术进行数据库恢复时,恢复子系统必须搜索日利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要志,确定哪些事务需要REDO,哪些事务需要哪些事务需要UNDO。一一般需要检查所有日志记录。这样做有两个问题:般需要检查所有日志记录。这样做有两个问题: 搜索整个日志将耗费大量的时间搜索整个日志将耗费大量的时间 很多需要很多需要REDO处理的事务实际上已经将它们的更新操处理的事务实际上已经将它们的更新操作结果写到数据库中了,然而恢复子系统又重新执行了作结果写到数据库中了,然而恢复子系统又重新执行了这些操作,浪费时间。这些操作,浪费时间。为了解决这些问题,又发展了具有检查点的恢复技术。这为了解决这些问题,又发展了具有检查点的恢复技术。这种技术在日志文件中增加一类新的记录种技术在日志文件中增加一类新的记录-检查点记录检查点记录(checkpoint),),增加一个增加一个重新开始文件重新开始文件,并让恢复子系,并让恢复子系统在登录日志文件期间统在登录日志文件期间动态地维护日志动态地维护日志。 系统实现技术4. 具有检查点的恢复技术具有检查点的恢复技术动态维护日志文件的方法是:动态维护日志文件的方法是:建立检查点,保存数据库状态建立检查点,保存数据库状态,这个操作反复执行。具体步骤是:这个操作反复执行。具体步骤是: 将当前日志缓冲中的所有日志记录写入磁盘的日志文将当前日志缓冲中的所有日志记录写入磁盘的日志文件上。件上。 在日志文件中写入一个检查点记录。在日志文件中写入一个检查点记录。 将当前数据缓冲的所有数据记录写入磁盘的数据库中。将当前数据缓冲的所有数据记录写入磁盘的数据库中。 把检查点记录在日志文件中的地址写入一个重新开始把检查点记录在日志文件中的地址写入一个重新开始文件。文件。系统实现技术4. 具有检查点的恢复技术具有检查点的恢复技术恢复子系统可以定期或不定期地建立检查点保存数据库状恢复子系统可以定期或不定期地建立检查点保存数据库状态:态: 按照预定的一个时间间隔建立检查点,如每隔一小时建按照预定的一个时间间隔建立检查点,如每隔一小时建立一个检查点;立一个检查点; 按照某种规则建立检查点,如日志文件已写满一半建立按照某种规则建立检查点,如日志文件已写满一半建立一个检查点。一个检查点。 使用检查点可以改善恢复效率。当事务使用检查点可以改善恢复效率。当事务T在一个检查点之前在一个检查点之前提交,提交,T对数据库所做的修改一定都已写入数据库,写入时对数据库所做的修改一定都已写入数据库,写入时间是在这个检查点建立之前或在这个检查点建立之时。这间是在这个检查点建立之前或在这个检查点建立之时。这样,在进行恢复处理时,没有必要对事务样,在进行恢复处理时,没有必要对事务T执行执行REDO操作。操作。 系统出现故障时恢复子系统将根据事务的不同状态采取不系统出现故障时恢复子系统将根据事务的不同状态采取不同的恢复策略。如图同的恢复策略。如图7.4中:中:系统实现技术 T1 : 在检查点之前提交,不必执行在检查点之前提交,不必执行REDO操作。操作。 T2:在检查点前开始执行,检查点之后故障点之前提交。在检查点前开始执行,检查点之后故障点之前提交。 T4:在检查点之后开始执行,在故障点之前提交。在检查点之后开始执行,在故障点之前提交。 T3:在检查点之前开始执行,在故障点时还未完成。在检查点之前开始执行,在故障点时还未完成。 T5:在检查点之后开始执行,在故障点时还未完成。在检查点之后开始执行,在故障点时还未完成。检查点后提交,对数据检查点后提交,对数据库的修改可能还在缓冲库的修改可能还在缓冲区中,尚未写入数据库,区中,尚未写入数据库,需需REDO;故障发生时还未完成,故障发生时还未完成,需撤消需撤消(UNDO )系统实现技术7.4 数据库的并发控制数据库的并发控制 并发现象并发现象 多用户数据库系统多用户数据库系统 允许多个用户同时使用数据库系统称多用户数据库允许多个用户同时使用数据库系统称多用户数据库系统系统,如银行数据库系统如银行数据库系统,飞机订票系统。在多用户系飞机订票系统。在多用户系统中,同一时刻并行运行的事务数可达数百个。统中,同一时刻并行运行的事务数可达数百个。并发目的并发目的 串行执行事务串行执行事务 事务可以串行执行,即每一时刻只有一个事务运行,事务可以串行执行,即每一时刻只有一个事务运行,其它事务必须等到该事务结束后才能运行。事务执其它事务必须等到该事务结束后才能运行。事务执行过程中可能用到的资源有:行过程中可能用到的资源有:CPU、存取物理数据存取物理数据库、库、I/O、通信道。如事务串行执行,会使许多系统通信道。如事务串行执行,会使许多系统资源处于空闲状态。因此为了充分利用系统资源,资源处于空闲状态。因此为了充分利用系统资源,发挥数据库共享的特点,应允许多个事务并行的执发挥数据库共享的特点,应允许多个事务并行的执行。行。系统实现技术单处理机系统的事务并行执行单处理机系统的事务并行执行在单处理机中,事务的并行执行实际是这些并行事务在单处理机中,事务的并行执行实际是这些并行事务的并行操作轮流交叉运行(称为的并行操作轮流交叉运行(称为交叉并发交叉并发方式方式),实),实际并没有真正地并行运行,但际并没有真正地并行运行,但减少了处理机的空闲时减少了处理机的空闲时间,提高了系统效率间,提高了系统效率。多处理机系统的事务并行执行多处理机系统的事务并行执行在多处理机中,每个处理机可以运行一个事务,多个在多处理机中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的处理机可以同时运行多个事务,实现多个事务真正的并发运行(称为并发运行(称为同时并发同时并发方式方式) 当多个用户并发存取数据库即会产生多个事务同时存当多个用户并发存取数据库即会产生多个事务同时存取同一数据库的情况。若对并发操作不加控制可能会存取取同一数据库的情况。若对并发操作不加控制可能会存取和存储不正确数据,破坏数据库的一致性。所以和存储不正确数据,破坏数据库的一致性。所以DBMS必必须提供并发控制机制。并发控制机制是衡量一个须提供并发控制机制。并发控制机制是衡量一个DBMS的的主要标志之一。主要标志之一。系统实现技术7.4.1 并发控制概述并发控制概述 事务是并发控制的基本单位,保证事务事务是并发控制的基本单位,保证事务ACID的的特性是事务处理的重要任务,而并发操作有可特性是事务处理的重要任务,而并发操作有可能会破坏其能会破坏其ACID特性。特性。 DBMS并发控制机制的责任:并发控制机制的责任: 对并发操作进行正确调度,保证事务的隔离对并发操作进行正确调度,保证事务的隔离性更一般,确保数据库的一致性。性更一般,确保数据库的一致性。 以下的实例说明并发操作带来的数据不一致的以下的实例说明并发操作带来的数据不一致的问题。问题。系统实现技术 考虑飞机订票系统中的一个活动序列考虑飞机订票系统中的一个活动序列(同一时刻读取)(同一时刻读取) 甲售票点(甲事务)读取某航班的机票余额甲售票点(甲事务)读取某航班的机票余额A,A=16 乙售票点(乙事务)读取同一航班机票余额乙售票点(乙事务)读取同一航班机票余额A,A=16 甲售票点卖出一张机票,修改甲售票点卖出一张机票,修改A=A-1,即即A=15,写写入数据库入数据库 乙售票点也卖出一张机票,修改乙售票点也卖出一张机票,修改A=A-1,即即A=15,入加数据库入加数据库 结果结果:卖出两张票,数据库中机票余额只减少:卖出两张票,数据库中机票余额只减少1。 造成数据库的造成数据库的不一致性是由并发操作引起的不一致性是由并发操作引起的。在并发操。在并发操作情况下,对甲、乙事务的操作序列是随机的。若按上作情况下,对甲、乙事务的操作序列是随机的。若按上面的调度序列执行,甲事务的修改被丢失,因为第面的调度序列执行,甲事务的修改被丢失,因为第4步步中乙事务修改中乙事务修改A并写回后覆盖了甲事务的修改。并写回后覆盖了甲事务的修改。系统实现技术 如果没有锁定且多个用户同时访问一个数据库,则当他们如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。由于并发的事务同时使用相同的数据时可能会发生问题。由于并发操作带来的数据不一致性包括:操作带来的数据不一致性包括: 1.丢失更新丢失更新当两个或多个事务选择同一行,然后基于最初选定当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。它事务所做的更新,这将导致数据丢失。如上例。如上例。再例如,两个编辑人员制作了同一文档的电子复本。再例如,两个编辑人员制作了同一文档的电子复本。每个编辑人员独立地更改其复本,然后保存更改后每个编辑人员独立地更改其复本,然后保存更改后的复本,这样就覆盖了原始文档。最后保存其更改的复本,这样就覆盖了原始文档。最后保存其更改复本的编辑人员覆盖了第一个编辑人员所做的更改。复本的编辑人员覆盖了第一个编辑人员所做的更改。如果在第一个编辑人员完成之后第二个编辑人员才如果在第一个编辑人员完成之后第二个编辑人员才能进行更改,则可以避免该问题。能进行更改,则可以避免该问题。系统实现技术2.不可重复读不可重复读指事务指事务T1读取数据后,事务读取数据后,事务T2执行更新操作,使执行更新操作,使T1无无法读取前一次结果。不可重复读包括三种情况:法读取前一次结果。不可重复读包括三种情况:o 事务事务T1读取某一数据后,读取某一数据后,T2对其做了修改,当对其做了修改,当T1再再次读该数据后,得到与前一不同的值。次读该数据后,得到与前一不同的值。o T1按一定条件从数据库中读取了某些记录后,按一定条件从数据库中读取了某些记录后,T2删删除了其中部分记录,当除了其中部分记录,当T1再次按相同条件读取数据再次按相同条件读取数据时,发现某些记录消失时,发现某些记录消失o T1按一定条件从数据库中读取某些数据记录后,按一定条件从数据库中读取某些数据记录后,T2插入了一些记录,当插入了一些记录,当T1再次按相同条件读取数据时,再次按相同条件读取数据时,发现多了一些记录。发现多了一些记录。例如,一个编辑人员两次读取同一文档,但在两次读取例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免全部完成编写后编辑人员才可以读取文档,则可以避免该问题。该问题。幻像读系统实现技术3. 读读“脏脏”数据(脏读)数据(脏读)读读“脏脏”数据是指事务数据是指事务T1修改某一数据,并将其写修改某一数据,并将其写回磁盘,事务回磁盘,事务T2读取同一数据后,读取同一数据后,T1由于某种原由于某种原因被撤消,而此时因被撤消,而此时T1把已修改过的数据又恢复原值,把已修改过的数据又恢复原值,T2读到的数据与数据库的数据不一致,则读到的数据与数据库的数据不一致,则T2读到读到的数据就为的数据就为“脏脏”数据,即不正确的数据。数据,即不正确的数据。例如,一个编辑人员正在更改电子文档。在更改过程中,例如,一个编辑人员正在更改电子文档。在更改过程中,另一个编辑人员复制了该文档(该复本包含到目前为止另一个编辑人员复制了该文档(该复本包含到目前为止所做的全部更改)并将其分发给预期的用户。此后,第所做的全部更改)并将其分发给预期的用户。此后,第一个编辑人员认为目前所做的更改是错误的,于是删除一个编辑人员认为目前所做的更改是错误的,于是删除了所做的编辑并保存了文档。分发给用户的文档包含不了所做的编辑并保存了文档。分发给用户的文档包含不再存在的编辑内容,并且这些编辑内容应认为从未存在再存在的编辑内容,并且这些编辑内容应认为从未存在过。如果在第一个编辑人员确定最终更改前任何人都不过。如果在第一个编辑人员确定最终更改前任何人都不能读取更改的文档,则可以避免该问题。能读取更改的文档,则可以避免该问题。产生这些数据的不一致性的主要原因是并发产生这些数据的不一致性的主要原因是并发操作破坏了事务的隔离性操作破坏了事务的隔离性。系统实现技术T1T2T1T2T1T2读A=16读A=50读C=100读B=100C=C*2读A=16求和=150写回C读B100读C=200A=A-1读B=B*2写回A=15写回B=200读A=50ROLLBACKA=A-1读B=200C恢复为100写回A=15 求和=250(验算不对)(a)丢失修改(b)不可重复读读脏数据图8.1 三种数据不一致性系统实现技术7.4.2 封锁封锁(locking).并发控制:用正确的方式调度并发操作,使一并发控制:用正确的方式调度并发操作,使一个用户事务的执行不受其它事务的干扰,从而个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。避免造成数据的不一致性。并发控制的主要技术是封锁并发控制的主要技术是封锁(locking).如在飞机如在飞机订票例子中订票例子中,甲事务要修改甲事务要修改A,若在读出若在读出A前先锁前先锁住住A,其它事务不能再读取和修改其它事务不能再读取和修改A,直到甲修直到甲修改并写回改并写回A后解除了对后解除了对A的封锁为止。这样甲就的封锁为止。这样甲就不会丢失修改。不会丢失修改。系统实现技术1. 含义事务事务T在对某个数据对象如表、记录等操作之前,向在对某个数据对象如表、记录等操作之前,向系统发出请求,对其加锁。加锁后系统发出请求,对其加锁。加锁后T对数据对象有对数据对象有一定的控制(具体的控制由封锁类型决定),在事一定的控制(具体的控制由封锁类型决定),在事务务T释放前,其它事务不能更新此数据对象。释放前,其它事务不能更新此数据对象。系统实现技术2. 锁类型 排它锁(排它锁(X锁、写锁)锁、写锁) 若事务若事务T对数据对象对数据对象A加上加上X锁,则只锁,则只允许允许T读取和修改读取和修改A,其它任何事务不能对其它任何事务不能对A加任加任何类型的锁,直到何类型的锁,直到T释放释放A上的锁。从而保上的锁。从而保证证其它事务在其它事务在T释放释放A上的锁前不能再读取上的锁前不能再读取和修改和修改A。 共享锁(共享锁(S锁、读锁)锁、读锁) T对数据对象对数据对象A加上加上S锁,则锁,则T可以读可以读A但不但不能修改能修改A,其它事务只能再对其它事务只能再对A加加S锁,而不锁,而不能加能加X锁,直到锁,直到T释放释放A上的上的S锁。保证了在锁。保证了在T对对A加加S锁过程中锁过程中其它事务对其它事务对A只能读,不只能读,不能修改。能修改。系统实现技术3. 封锁协议(封锁协议(Locking Protocol)封锁协议封锁协议:在运用在运用X锁和锁和S锁对数据对象加锁时,锁对数据对象加锁时,需要遵循的规则(如需要遵循的规则(如 何时申请何时申请X锁或锁或S锁、持锁锁、持锁时间、何时释放等),这些规则即为封锁协议。时间、何时释放等),这些规则即为封锁协议。对封锁方式规定不同的规则即形成了各种不同对封锁方式规定不同的规则即形成了各种不同的封锁协议,不同级别的封锁协议分别在不同的封锁协议,不同级别的封锁协议分别在不同程度上解决一定程度的一致性问题。程度上解决一定程度的一致性问题。系统实现技术3.封锁协议(封锁协议(Locking Protocol)一、一级封锁协议一、一级封锁协议事务事务T在修改数据在修改数据R之前必须先对其加之前必须先对其加X锁,直到事锁,直到事务结束务结束(即通过即通过commit和和rollback结束结束)才释放。才释放。作用:防止丢失修改,保证事务作用:防止丢失修改,保证事务T可恢复。可恢复。二、二级封锁协议二、二级封锁协议一级封锁协议加上事务一级封锁协议加上事务T在读取数据在读取数据R之前必须先之前必须先对其加对其加S锁,读完后即可释放锁,读完后即可释放S锁。锁。作用:防止丢失修改及读作用:防止丢失修改及读“脏脏”数据数据三、三级封锁协议三、三级封锁协议一级封锁协议加上事务一级封锁协议加上事务T在读取数据在读取数据R之前必须先之前必须先对其加对其加S锁,直到事务结束才释放。锁,直到事务结束才释放。作用:防止丢失修改,防止读作用:防止丢失修改,防止读“脏脏”数据以及防止数据以及防止不可重复读。不可重复读。系统实现技术三个级别的封锁协议的主要区别在于什三个级别的封锁协议的主要区别在于什么操作需要申请封锁,以及何时释放锁(即么操作需要申请封锁,以及何时释放锁(即持锁时间)。持锁时间)。系统实现技术oT1读A,在修改之前先对A加X锁o当T2再请求对A加X锁时被拒绝,T2等待T1释放A上的锁oT2获得对A的X锁,此时T2读到A是T1更新过的值15oT2按A的新值进行运算,并将结果值A=14送回磁盘o可避免丢失T1的更新。o一级封锁协议不能保证可重复读和不读“脏数据”一级封锁协议系统实现技术T1T2T1T2T1T2Xlock ASlock AXlock C读C=100读A=16读A=50C=C*2读B=100写回C=200求和=150Slock C等待Xlock B等待等待等待rollback 等待(c恢复为100) 等待Xlock A读A=50 等待unlock C等待读A=15读B=100等待获得Slock求和=150等待读C=100写回A=14 commit等待commit Ccommit unlock A等待unlock Cunlock Aunlock B等待获得Xlock读B=100B=B*2写回B=200commitunlock B不可读“脏”数据T1在对C进行修改之前,先对C加X锁,修改其值后写磁盘此时,T2请求在C上中S锁,因T1已在C上加了X锁,T2只能等待T1因某种原因被撤消,C恢复原值100,T1释放C上的X锁,T2获C上的S锁,读C=100。可避免T2读
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!