




已阅读5页,还剩63页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章数据库保护,1.事务2.并发控制3.数据库恢复,8.1.1为什么要使用事务,事务是保护数据库的一致性和完整性的重要机制。由于数据的共享,可能会出现并发操作的现象,即多个用户在同一时刻访问和修改同一数据库中的同一部分数据。并发操作会产生一系列问题,比如出现由于一个用户对某个数据的操作导致其他用户使用的数据成为无效数据的现象。使用事务可以确保同时发生的行为不会发生冲突,不会影响数据的有效性。举例买最后一张机票一次网上交易,8.1.2事务的概念,概念事务是一种机制,是一段程序,是一系列的数据库操作构成的集合,在逻辑上是一个不可分割的工作单元。不管系统中有多少故障出现,不管有多少并发操作,事务中的操作作为一个整体,要么所有的操作都成功执行,要么一个也不执行。,图8-1事务的执行方式,8.1.3事务的特性,事务有四个特性:原子性:事务是一个工作单元,作为一个整体要么都做,要么都不做。一致性:事务在完成时,必须使数据库内所有的数据都保持一致性状态。隔离性:一个事务的执行不能被其他的事务所干扰。持续性:事务一旦提交,它对数据库的改变就是永久的。,8.1.4在SQLServer中实现事务管理,1.事务运行的三种模式,1)显式事务,BEGINTRANSACTION:事务开始的标记。,显示事务由用户自定义,每个事务均以BEGINTRANSACTION开始,以COMMIT或ROLLBACK语句结束。,COMMIT:提交事务,标识事务成功执行。,ROLLBACK:标识一个非正常事务结束,说明执行过程中遇到错误,事务内所修改的数据被恢复到事务执行前的状态。,8.1.4在SQLServer中实现事务管理,2)隐式事务,在隐式事务模式下,当前事务提交或回滚后,SQLServer自动开始下一个事务。,SETIMPLICIT_TRANSACTIONSON-进入隐式事务模式,SETIMPLICIT_TRANSACTIONSOFF-关闭隐式事务模式,可以使SQLServer重新启动一个事务的语句,隐式事务模式的启动和关闭,表8-1使SQLServer重新启动事务的语句,8.1.4在SQLServer中实现事务管理,例:TRUNCATETABLE语句可以让用户删除指定表中的所有数据。由TRUNCATETABLE删除的表数据后,不能使用ROLLBACK撤销。,下面两段程序的执行结果有何不同?,USETSGGOSETIMPLICIT_TRANSACTIONSONGOTRUNCATEtableBookROLLBACKGOSETIMPLICIT_TRANSACTIONSOFF,USETSGGOSETIMPLICIT_TRANSACTIONSONGODELETEFROMBookROLLBACKGOSETIMPLICIT_TRANSACTIONSOFF,8.1.4在SQLServer中实现事务管理,3)自动提交事务,使用BEGINTRANSACTION语句开始一个显示事务,自动提交事务是SQLServer的默认事务管理模式。将每条单独的T-SQL语句视为一个事务。,使用SET语句进入隐式事务模式,自动提交事务模式的终止,8.1.4在SQLServer中实现事务管理,2.使用T-SQL实现事务,表8-2事务语句,SQLServer中进行事务处理的语句,8.1.4在SQLServer中实现事务管理,1)BEGINTRANSACTION,语法格式:,BEGINTRAN|TRANSACTIONtransaction_name|tran_name_variable,transaction_name:事务名称;tran_name_variable:用户定义的、含有有效事务名称的变量的名称。,2)SAVETRANSACTION,语法格式:,SAVETRAN|TRANSACTIONsavepoint_name|savepoint_variable,savepoint_name:为分配给保存点的名称savepoint_variabl:是包含有效保存点名称的用户定义变量的名称。,8.1.4在SQLServer中实现事务管理,3)ROLLBACK,ROLLBACKTRAN|TRANSACTIONsavepoint_name|transaction_name,取消事务中的所做的一些或全部修改,释放事务占用的资源。语法格式:,4)COMMIT,COMMITTRAN|TRANSACTION,如果事务成功,则提交。语法格式:,8.1.4在SQLServer中实现事务管理,【例8-1】在TSG数据库中将读者的读者证号(PatronID)由“T0202”修改为“T0202A”。,USETSGGOBEGINTRANSELECT*INTOtemplendFROMLendWHEREPatronID=T0202UPDATEtemplendSETPatronID=T0202ADELETEFROMLendWHEREPatronID=T0202UPDATEPatronSETPatronID=T0202AWHEREPatronID=T0202INSERTINTOLendSELECT*FROMTEMPLENDDROPTABLEtemplendCOMMITTRANSELECT*FROMPatronWHEREPatronID=T0202AGOSELECT*FROMLendWHEREPatronID=T0202A,图8-2例8-1的运行结果,8.1.4在SQLServer中实现事务管理,【例8-2】一个保存点的例子。,USETSGGOBEGINTRANINSERTINTOBook(CallNo,Title,Author,Publisher,ISBN)VALUES(1AAA,DB,GROUP,Tsinghua,978-0303)SAVETRANSACTIONFirstOneINSERTINTOBook(CallNo,Title,Author)VALUES(2AAA,DBT,GROUP)SELECTTIMES=1,*FROMBookWHEREAuthor=GROUPGOROLLBACKTRANSACTIONFirstOneSELECTTIMES=2,*FROMBookWHEREAuthor=GROUPGOROLLBACKTRANSELECTTIMES=3,*FROMBookWHEREAuthor=GROUP,8.1.4在SQLServer中实现事务管理,图8-3例8-2的运行结果,8.2并发控制,并发的概念多个用户或应用程序可以同时对数据库进行访问。这种多用户数据库系统同一时刻可能有多个事务在运行,这就是事务的并发性。并发操作控制不当可能会破坏数据库的一致性。并发控制机制是衡量一个DBMS的重要性能指标之一。,8.2.1事务调度,调度系统为一个或多个事务的各操作按照时间顺序安排的一个执行序列。合法调度(1)调度必须包含所有事务的指令。(2)同一个事务中的指令的执行顺序在调度中保持不变。,8.2.1事务调度,1.事务调度的基本形式串行调度事务的操作没有交叉,称为串行调度。并行调度DBMS同时接受多个事务运行,并且在同一时间这些事务可以同时运行,称为并行调度。2.并发方式交叉并发单处理机系统中,事务的操作轮流交叉运行的方式。同时并发多处理机系统中,事务的操作可以同时在不同的处理机上运行,实现多个事务的真正并行。,8.2.2并发操作可能产生的问题,并发操作可能导致的问题:,丢失修改,读“脏”数据,不可重复读,8.2.2并发操作可能产生的问题,1.丢失修改,两个事务读入同一数据并修改,某一事务提交的结果破坏了另一事务的结果导致其修改丢失。,设某数据库中有一数据V=100,A、B两个事务分别对V执行加10(V=V-10)和减10操作(V=V+10)。,图8-4修改丢失,8.2.2并发操作可能产生的问题,2读“脏”数据,某个事务读取了另一个事务正在修改的数据的中间结果,造成该事务读到的数据就与数据库中的数据不一致。,设某数据库中有一数据V=100,A、B两个事务分别对V执行加10(V=V-10)和减10操作(V=V+10)。,图8-5读“脏”数据,8.2.2并发操作可能产生的问题,3不可重复读,某一事务读取数据后,而另一事务执行更新操作,使前一事务无法再现前一次读取结果。三种情况:,(1)事务A、B并发操作时,B对A使用的数据进行了修改。,图8-6不可重复读,(2)A、B并发操作时,B对A使用的数据进行了删除。,(3)A、B并发操作时,B插入的数据对A产生了影响。,8.2.3封锁,1.什么是封锁事务T在对某个数据对象进行操作之前,先向系统发出加锁请求,加锁后事务T就对该数据对象有了一定的控制权,在T释放该锁之前,其他事务不能更新该数据对象。封锁机制的三个环节(1)加锁申请(2)获得锁(3)释放锁,8.2.3封锁,2.封锁类型,1)共享锁(又称读锁),2)排它锁(又称写锁),如果事务T对数据对象A加上共享锁(S锁),其他事务对A只能再加S锁,不能加X锁,直到事务T释放A上的S锁为止。,如果事务T对数据对象A加上排它锁(X锁),则只允许T读取和修改A,其他任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。,表8-3S锁和X锁的相容矩阵,8.2.4封锁协议,对数据对象加锁时,需要约定一些规则,这些规则称为封锁协议(LockingProtocol)。,1一级封锁协议,事务T在修改数据之前必须先对其加X锁,直到事务结束才释放。,图8-7示例(a),可以防止丢失修改的问题,为什么?,8.2.4封锁协议,2二级封锁协议,事务T对要修改数据必须先加X锁,直到事务结束才释放X锁;对要读取的数据必须先加S锁,读完后即可释放S锁。,图8-7示例(b),可以防止丢失修改、读“脏”数据。为什么?,8.2.4封锁协议,3三级封锁协议,事务T在读取数据之前必须先对其加S锁,在要修改数据之前必须先对其加X锁,直到事务结束后才释放所持有的锁。,图8-7示例(c),可以防止丢失修改、读“脏”数据、不可重复读。为什么?,8.2.5活锁和死锁,1.活锁,当多个事务请求封锁同一数据时,某一事务总是处于等待状态无法获得所需封锁,这种状况就称为活锁。,如何来避免活锁的发生?,可采用先来先服务的策略。,8.2.5活锁和死锁,2.死锁,事务T1和T2都需要锁定被对方已经锁定的数据对象,提出申请后互相等待对方释放锁,两个事务永远无法结束,只能继续等待。,1)预防死锁,(1)一次封锁法。,(2)顺序封锁法。,2)检测并解除死锁,(1)超时法。,(2)等待图法。,解除死锁的方法通常是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有的锁,使其他事务得以继续运行下去。,8.2.6可串行化与两段锁协议,1可串行化,多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。称这种调度策略为可串行化的调度。可串行性(Serializability)是并发事务正确性的准则。,2两段锁协议,所有事务必须分两个阶段对数据项加锁和解锁:第一阶段是扩展阶段、第二阶段是收缩阶段。,2)收缩阶段:释放封锁,不能再申请任何锁。,1)扩展阶段:获得封锁,不能释放任何锁。,*两段锁协议不一定能预防死锁发生。,8.2.6可串行化与两段锁协议,图8-8两段锁协议示例,8.2.7封锁的粒度,封锁粒度是指封锁对象的大小。封锁对象可以是逻辑单元,例如属性、元组、关系、甚至整个数据库;也可以是物理单元,例如页(数据页或索引页)、块等。封锁粒度与系统的并发度和并发控制的开销密切相关。封锁的粒度越小,并发度越高,系统开销也越大;封锁的粒度越大,并发度越低,系统开销也越小。系统中同时支持多种封锁粒度供不同的事务选择,称为多粒度封锁。,8.2.7封锁的粒度,1.多粒度封锁,多粒度树:其根结点是整个数据库,表示最大的封锁粒度。叶结点表示最小的封锁粒度。,一个数据对象可能以两种方式封锁:,1)显式封锁:是应事务的要求直接加到数据对象上的封锁。,图8-9三级粒度树,2)隐式封锁:该数据对象是由于其上级结点加锁而使该数据对象加上了锁。,一般来说,对某个数据对象(结点)加锁时,要做到以下几点:(1)检查该数据对象上有无显式封锁与之冲突;(2)还要检查其所有上级结点,看本事务的显式封锁是否与该数据对象上的隐式封锁(由于其上级结点被加锁而获得的)冲突;(3)还要检查其所有下级结点,看上面的显式封锁是否与本事务的隐式封锁冲突。,8.2.7封锁的粒度,2.意向锁,对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任何结点加锁时,必须先对它的上层结点加意向锁。,三种常用的意向锁:,1)IS锁:表示对它的后裔结点拟加S锁。,2)IX锁:表示对它的后裔结点拟加X锁。,3)SIX锁:对该数据对象及其所有后裔结点加S锁的同时,对该数据对象再加一个IX锁。,8.2.7封锁的粒度,锁的相容矩阵:,表8-4数据锁的相容矩阵,8.2.8SQLServer的并发控制,1.隔离级别,事务准备接受不一致数据的级别称为隔离级别(IsolationLevel)。,SQLServer2008所支持的隔离级别:,1)ANSI定义的隔离级别,(1)未提交读,(2)已提交读,(3)可重复读,(4)可串行读,2)行版本控制读取事务隔离级别,(1)已提交读快照,(2)快照,8.2.8SQLServer的并发控制,2.设置隔离级别,SQLServer提供的设置隔离级别的T-SQL语句语法格式:,SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED-未提交读|READCOMMITTED-已提交读|REPEATABLEREAD-可重复读|SNAPSHOT-快照|SERIALIZABLE-可串行读,【例8-3】将事务的隔离级别设置为可重复读,以使在查看书名为“谋生记”的时候,防止其他事务修改该书的信息。,USETSGGOSETTRANSACTIONISOLATIONLEVELREPEATABLEREADBEGINTRANSELECT*FROMBookWHERETitle=谋生记,8.2.8SQLServer的并发控制,【例8-4】对于TSG数据库将事务的隔离级别设置为快照,并激活。,USEmasterGOALTERDATABASETSGSETALLOW_SNAPSHOT_ISOLATIONONUSETSGSETTRANSACTIONISOLATIONLEVELSNAPSHOTBEGINTRAN,8.2.8SQLServer的并发控制,3.SQLServer封锁粒度,1)RID和键(KEY),2)页(PAGE),3)簇(EXTENT),4)表(TABLE),5)数据库(DATABASE),8.2.8SQLServer的并发控制,4.SQLServer的锁定模式,1)更新(U)锁:更新(U)锁要求每次只有一个事务可以获得数据对象上的U锁。如果事务修改数据,则U锁转换为X锁,否则转换为S锁。,2)架构锁:在使用表的数据定义语言(DDL)操作(例如添加列或删除表)时使用。,3)大容量更新(BU)锁:数据大容量复制到表的时候使用。,4)键范围锁:隐式保护该记录集中包含的行范围,防止幻影读。,8.2.8SQLServer的并发控制,5.在SQLServer中设置并查看锁,1)使用T-SQL设置锁,SELECT语句中手工加锁的命令为:SELECT*FROMTABLEWHITH(锁的类型),其中锁的类型包括:HOLDLOCK、NOLOCK、PAGLOCK、READCOMMITTED、READPAST、READUNCOMMITTED、REPEATABLEREAD、ROWLOCK、SERIALIZABLE、TABLOCK、TABLOCKX、UPDLOCK。,8.2.8SQLServer的并发控制,【例8-5】对Book表使用HOLDLOCK设置共享锁。建立两个连接,在两个连接中同时执行下面两段程序。,USETSGGOBEGINTRANT1SELECT*FROMBookWITH(HOLDLOCK)WHERECallNo=F121/L612WAITFORDELAY00:00:30-等待30秒COMMITTRAN-提交并释放锁,USETSGGOBEGINTRANT2SELECTCallNo,TitleFROMBookWHERECallNo=F121/L612UPDATEBookSETCallNo=10001WHERECallNo=F121/L612COMMITTRAN,8.2.8SQLServer的并发控制,【例8-6】对Book表使用TABLOCKX设置排它锁建立两个连接,在两个连接中同时执行下面两段程序。,USETSGGOBEGINTRANT1INSERTINTOBookWITH(TABLOCK)(CallNo,Title)VALUES(10001,1)WAITFORDELAY00:00:30-等待30秒,USETSGGOBEGINTRANT2SELECT*FROMBookCOMMITTRAN,8.2.8SQLServer的并发控制,2)查看锁,【例8-7】编写事务程序,在TSG数据库中将索书号为“F121/L612”的图书页数修改为316。将执行该事务期间的锁的信息存入临时表LockInfo,并显示。,LockInfo的定义如下:CREATETABLELockInfo(SpidINT,-存放系统进程IDTSGdbidINT,-存放数据库IDObj_IdINT,-存放对象IDIndIdSMALLINT,-存放持有锁的索引的标识号TypVARCHAR(5),-存放锁定对象类型InforVARCHAR(30),-存放锁定对象信息ModelVARCHAR(5),-存放锁定模式StatVARCHAR(5);-存放锁定状态,8.2.8SQLServer的并发控制,USETSGGODELETEFROMLockInfoBEGINTRANUPDATEBookSETPages=316WHERECallNo=F121/L612INSERTLockInfoEXECsp_lockspid-spid返回当前用户进程COMMITTRANSELECT系统进程ID=spid,数据库=DB_NAME(TSGdbid),对象=OBJECT_NAME(Obj_ID),索引=(SELECTNAMEFROMSYSINDEXESWHEREid=Obj_IDandindid=LockInfo.indid),锁定对象类型=Typ,锁定对象=Infor,锁定模式=model,锁定状态=StatFROMLockInfo,8.2.8SQLServer的并发控制,图8-10例8-7的运行结果,8.3数据库恢复,可能破坏数据库的故障事务故障(如运算溢出、并发事务发生死锁被选中撤销的事务、违反完整性限制等原因所造成)、系统故障(如硬件错误、DBMS代码错误、操作系统故障、突然停电等)、介质故障(存储介质损坏)以及计算机病毒的恶意破坏等。数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态的功能,这就是数据库恢复。数据库恢复的基本思想在系统正常运行时建立冗余数据,保证有正确的数据以供恢复使用。恢复的关键问题如何来建立并使用冗余数据。建立冗余数据的方法备份和登记日志文件。,8.3.1备份和日志文件,1.备份及其类型备份DBA定期或不定期的将数据库的部分或全部内容复制到安全的存储介质上保存起来的过程。备份类型海量备份和增量备份静态备份与动态备份,8.3.1备份和日志文件,2.日志文件日志独立的文件。存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退等数据库变化。日志文件的作用事务故障和系统故障的恢复必须要利用日志文件。在动态备份中,必须建立日志文件,备份和日志文件结合起来才能够有效地恢复数据库。在静态备份中,也可以建立日志文件。登记日志文件的原则必须严格的按照并发事务的执行次序记录。必须先记录日志,后写数据库。,8.3.2SQLServer的数据库恢复机制,1.检查点,是在日志中增加的一类新的记录,可以让系统在记录日志文件期间动态的维护日志。对于在检查点之前已经提交的事务,不用再执行重做。,图8-11检查点技术,8.3.2SQLServer的数据库恢复机制,2.恢复模式,1)简单恢复模式,图8-12简单恢复模式的日志,在简单恢复模式下,在检查点发生时,当前已被提交的事务日志将会被清除。该模式下,无法精确的将数据库恢复到某一时刻,所以容易造成数据丢失。,2)完整恢复模式,完整恢复模式是默认的恢复模式。在该模式下,需要对事务日志进行手工管理。该模式的优点是可以恢复到数据库失败或者指定的时间点上。,图8-13完整恢复模式的日志,3)大容量日志恢复模式,该模式类似于完整恢复模式,与其不同的是,一些将产生大量日志记录的操作的记录会被精简。,8.3.2SQLServer的数据库恢复机制,设置恢复模式语句:,ALTERDATABASETSGSETRECOVERYFULL,FULL(完整恢复模式)BULK_LOGGED(大容量日志恢复模式)SIMPLE(简单恢复模式),8.3.2SQLServer的数据库恢复机制,3.数据库备份的类型,SQLServer中的四种备份类型:,1)完整备份:完整的备份所有的数据及数据库对象。,2)事务日志备份:对事务进行备份,包括从上次正确备份之后,到目前为止所有已经完成的事务,必须配合完整备份才能进行恢复。,3)差异备份:将最近一次完整备份后所做的数据库修改进行备份。,4)文件(组)备份:只备份数据库中的个别文件(组)。,8.3.2SQLServer的数据库恢复机制,4.备份设备,备份设备是SQLServer存放备份文件的地方,创建备份时必须要选择备份设备。,备份设备可以是本地机器上的磁盘文件、远程服务器上的磁盘文件、磁带以及命名管道。为了和物理备份设备(磁带、磁盘文件等)实现间接寻址和方便使用,可以为备份设备设置逻辑名称。逻辑设备名称指向特定的物理备份设备,在备份和还原中可以直接使用逻辑设备名称。,8.3.2SQLServer的数据库恢复机制,图8-14定义备份设备,1)创建备份设备,(1)使用对象资源管理器,展开【服务器对象】,右击【备份设备】,弹出的菜单中选择【新建备份设备】。,8.3.2SQLServer的数据库恢复机制,(2)使用T-SQL语句,sp_addumpdevicedevtype=device_type,-指定设备类型,支持disk和tapelogicalname=logical_name,-指定逻辑备份设备名称phydicalname=physical_name-指定物理备份设备名称,举例:创建一个磁盘文件备份设备。,USEmasterGOEXECsp_addumpdevicedisk,DiskTSG,D:BackupDiskTSG.bak,8.3.2SQLServer的数据库恢复机制,2)查看备份设备,(1)使用对象资源管理器,展开【服务器对象】【备份设备】。,(2)使用T-SQL语句,EXECsp_helpdevice,3)删除备份设备,(1)使用对象资源管理器,展开【服务器对象】【备份设备】,右击要删除的设备,选择【删除】。,(2)使用T-SQL语句,sp_dropdeviceDiskTSG,8.3.2SQLServer的数据库恢复机制,5.备份数据库,1)使用对象资源管理器,右击【TSG】,选择【任务】【备份】;在图8-15中点击【添加】。,图8-15数据库备份窗口,8.3.2SQLServer的数据库恢复机制,图8-16选择备份目标窗口,在图8-16中单击【确定】。在图8-17中点击【确定】按钮执行备份操作。,图8-17数据库备份窗口中选择备份设备,8.3.2SQLServer的数据库恢复机制,成功后将出现备份成功信息。在该信息窗口中点击【确定】即可完成备份。,图8-18备份成功信息,8.3.2SQLServer的数据库恢复机制,2)使用T-SQL语句,(1)完整备份,BACKUPDATABASETSGTODiskTSG-使用逻辑备份设备BACKUPDATABASETSGTODISK=D:BackupDiskTSG.bak-使用物理名称,(2)差异备份(进行差异备份前,必须至少进行一次完整备份),BACKUPDATABASETSGTODiskTSGWITHDIFFERENTIAL,(3)事务日志备份(备份前,必须至少进行一次完整备份),BACKUPLOGTSGTODISK=D:DiskTSG.bak,(4)文件(组)备份,BACKUPDATABASETSGFILE=TSGTODiskTSG-TSG为数据文件的逻辑名称,8.3.2SQLServer的数据库恢复机制,6.还原数据库,1)使用对象资源管理器,右击【TSG】,选择【任务】【备份】。在图8-19中点击“源设备”按钮,单击右侧“”。,图8-19“还原数据库”窗口,8.3.2SQLServer的数据库恢复机制,图8-20“指定备份”窗口,在图8-20的“备份媒体”下拉列表中选择“备份设备”,单击“添加”按钮。,图8-21“选
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025新一代医疗设备远程诊断系统购置及综合运维服务合同
- 2025年医院消防安全教育项目开发与执行合同
- 2025年宅基地生态保护与绿色施工设备投资合同
- 2025年城市代步车租赁与旧车置换一体化服务合同
- 2025年国际教育展场地租赁及参展商接待与活动策划合同
- 二零二五年度光伏发电站高低压配电系统工程合同
- 2025年医院与研究所共建精准医疗技术研发合同
- 二零二五年度食品安全管理合同履约保证函范本
- 二零二五年办公楼租赁合同(含办公环境空气净化服务)
- 2025版酒店客房装修设计施工合同
- 教师薪酬与考核 新东方
- 人教版一年级上册数学全册教学课件(2022年12月修订)
- 国际贸易术语课件详解
- 一个华为客户经理回忆录资料讲解
- 2-2《大战中的插曲》课件28张-统编版高中语文选择性必修上册
- 中国文学理论批评史全套教学课件
- 《专题地图设计与编制实验》课程教学大纲
- 新人教版九年级下册初中化学全册课前预习单
- 工厂规章制度员工守则.doc
- 医疗质量与安全分析报告范文
- 商铺销售基础知识培训
评论
0/150
提交评论