




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7章章 系统实现技术系统实现技术n本章主要涉及DBMS的具体实现技术。在DBS运行时,DBMS要对DB进行监控,以保证整个系统的正常运转。DBMS对DB的监控,称为数据库的管理,包括四个方面的功能:(教材p30)n数据库恢复(数据库恢复(Recovery) 在数据库被破坏或数据不正确时,DBMS有能力把数据库恢复到正确的状态。n并发(并发(Concurrency)控制)控制 在多个用户同时对同一数据进行操作时,DBMS能加以控制,防止数据库中的数据被破坏。第第7章章 系统实现技术系统实现技术n完整性(完整性(Integrity)检查)检查 保证数据库中数据及语义的正确性和有效性,防止任何对
2、数据造成错误的操作。n安全性(安全性(Security)保护)保护 防止未经授权的用户存取数据库中的数据,以免数据的泄露、更改或破坏。n本章先介绍系统目录和事务的概念,然后介绍如何实现DMBS的上述四个功能。第第7章章 系统实现技术系统实现技术 7.1 系统目录 7.2 事务 7.3 数据库的恢复 7.4 数据库的并发控制 7.6 数据库的完整性(自学) 7.7 数据库的安全性(SQL Server) 小结7.1 系统目录系统目录n系统目录即数据字典,用于存储数据的定义或描述信息。关系数据库的系统目录存储下列信息:n关系名,属性名,属性域(数据类型) n各种约束,主键,辅助键,外键,空值/非空
3、值n视图的外部级描述,存储结构和索引的内部级描述 n安全性和授权规则 n数据完整性规则n注:注:在关系数据库中,这些数据都以关系(即系统表)的形式存在。7.2 事务事务 7.2.1 事务的定义 7.2.2 事务的ACID性质 7.2.3 事务的状态变迁图n事务的背景: 从用户观点看,对数据库的某些操作应是一个整体,也就是一个不能分割的工作单元。 【例】设银行数据库中有一转账业务:从帐号A转一笔款(50)到帐号B,其操作如下: read(A); A:=A-50; write(A); read(B); B:=B+50; write(B);7.2.1 事务的定义事务的定义7.2 事务 对于用户而言,
4、这些操作应组成一个不可分割的工作过程:操作要么全部执行,要么由于出错(如:帐号A已透支)全部不执行。 决不允许出现仅执行部分操作的情况,如:50已从帐号A转出,但未转入帐号B。n事务的定义: 事务(Transaction)是构成单一逻辑工作单元的操作集合。n事务的类型:系统事务系统事务、用户定义的事务用户定义的事务n系统事务:系统事务:一条SQL语句就是一个事务。如:create语句、alter语句、drop语句、select语句、insert语句、update语句等。n用户定义的事务:用户定义的事务:可将多条SQL语句组成一个事务;以begin transaction语句表示事务开始,以co
5、mmit语句或rollback语句表示事务结束。7.2.1 事务的定义(续事务的定义(续1)7.2 事务【例】用户定义的事务 begin transaction use XSCJ /* 指定数据库 */ update XS set 总学分=总学分-10 where 专业名=计算机 if exists(select * from XS where 专业名=计算机 and 总学分0) rollback /* 若总学分出现负数,则撤销操作 */ else commit commit语句语句表示事务执行成功,此时告知系统,该事务对数据库的所有更新都已交付实施(写入磁盘)。 rollback语句语句表示
6、事务执行不成功,此时告知系统,已发生错误,该事务对数据库的所有更新必须被撤销,数据库应恢复到该事务执行之前的初始状态。7.2.1 事务的定义(续事务的定义(续1)7.2 事务7.2.2 事务的事务的ACID性质性质nACID分别指事务四个性质英文单词的首字母。 (1) 原子性原子性(Atomicity) 一个事务是一个不可分割的工作单元;事务中的操作要么全部执行,要么全部不执行。 (2) 一致性一致性(Consistency) 不管事务执行是commit还是rollback,数据库中的数据不会因事务的执行而遭受破坏。 【例】前面的银行转账事务AB,不管转账是否成功,A+B的值不变。 注:注:事
7、务的原子性保证了事务的一致性。 (3) 隔离性隔离性(Isolation) 在多个事务并发执行时,系统应保证并发执行的结果与这些事务先后顺序执行时的结果一样。7.2 事务7.2.2 事务的事务的ACID性质(续性质(续1) (3) 隔离性隔离性(Isolation) 【例】对于前面的银行转账事务T1,设A、B的初值分别为1000,在T1执行过程中,在操作A:=A-50和操作B:=B+50之间执行了事务T2的操作Sum:=A+B。 则依据隔离性,Sum的结果应与“先执行T1、再执行T2”(Sum=2000)或“先执行T2、再执行T1”(Sum=2000)的结果一样,而不应等于1950。 (4)
8、持久性持久性(Durability) 一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反映在数据库中。 即使以后系统发生故障(如:磁盘损坏),也能依据以前的备份及日志文件中保留的该事务执行痕迹,对该事务的操作进行恢复。7.2 事务7.2.3 事务的状态变迁图事务的状态变迁图n预备知识:数据的读写过程n数据在磁盘上以称为“块块”的定长存储单位形式组织。块是内、外存数据交换的基本单位。磁盘中的块称为“物理块物理块”;内存中临时存放物理块内容的块称为“缓冲块缓冲块”,所有的内存缓冲块组成了“内内存缓冲区存缓冲区”。n物理块和缓冲块之间的数据读写:物理块和缓冲块之间的数据读写:7.2 事务 i
9、nput:把物理块的内容传送到内存的缓冲块中。 output:把缓冲块的内容传送到磁盘的物理块中。内存内存磁盘磁盘inputoutput7.2.3 事务的状态变迁图(续事务的状态变迁图(续1)n预备知识:数据的读写过程n每个事务Ti有一个专用工作区专用工作区,存放该事务使用的数据。在事务开始时,产生其工作区;在事务结束时,其工作区被撤销。n工作区和内存缓冲区之间的数据读写:工作区和内存缓冲区之间的数据读写: read(X):从内存缓冲区中读X的值送到事务工作区中。 若包含X的物理块B不在内存缓冲区中,则首先执行input(B)命令; 从缓冲块B中读X的值送到事务工作区中。 write(X):将
10、事务工作区中X的值写到内存缓冲区中。 若包含X的物理块B不在内存缓冲区中,则首先执行input(B)命令; 将事务工作区中X的值写到缓冲块B中。7.2 事务7.2.3 事务的状态变迁图(续事务的状态变迁图(续2)n预备知识:数据的读写过程n每个事务在读写数据时,并不直接和物理块接触,而是和内存缓冲区中的缓冲块接触。noutput(B)并不是在每个write(X)操作后立即执行;只有在操作系统的缓冲区管理子系统需要内存空间(如:内存缓冲区已满)或者一个事务全部执行完后,才会执行output命令。7.2 事务write(X)Xread(X)事务工作区事务工作区X内存缓冲区内存缓冲区input(B)
11、磁盘磁盘B7.2.3 事务的状态变迁图(续事务的状态变迁图(续3)n事务的状态变迁图 用图示的形式反映事务的状态变化过程。n活动状态:活动状态:在一个事务开始执行后,即进入活动状态(Active)。n局部提交状态:局部提交状态:在事务的最后一条语句执行之后,即进入局部提交状态(Partially Committed),此时对数据的修改还留在内存缓冲区中(也可能由于OS的缓冲区管理子系统执行了output命令导致修改已写入磁盘中),事务并未真正结束。活动状态活动状态局部提交状态局部提交状态失败状态失败状态提交状态提交状态异常中止状态异常中止状态7.2.3 事务的状态变迁图(续事务的状态变迁图(续
12、4)n事务的状态变迁图n失败状态:失败状态:处于活动状态的事务尚未执行到最后一条语句即中止,或者处于局部提交状态的事务,遇到故障(如:电源故障、硬件故障、软件出错等),此时进入失败状态(Failed)。n异常中止状态:异常中止状态:处于失败状态的事务,可能已对磁盘中的数据进行了修改;为了保证事务的原子性,此时应对已作的修改进行撤销(undo操作,即rollback)。7.2 事务活动状态活动状态局部提交状态局部提交状态失败状态失败状态提交状态提交状态异常中止状态异常中止状态7.2.3 事务的状态变迁图(续事务的状态变迁图(续5)n事务的状态变迁图n提交状态:提交状态:把对数据库的修改全部写入磁
13、盘中,并通知系统,事务执行成功,进入提交状态(Committed),即正常结束状态。7.2 事务活动状态活动状态局部提交状态局部提交状态失败状态失败状态提交状态提交状态异常中止状态异常中止状态7.3 数据库的恢复数据库的恢复n恢复的定义 在DBS运行时,可能由于故障(如:电源故障、硬件故障、软件出错、机房火灾、恶意破坏等等)造成数据库中数据的丢失或破坏,DBMS能把数据库从被破坏、不正确的状态恢复到最近一个正确的状态,DBMS的这种能力称为数据库的可恢复性(Recovery);n恢复的基本前提 即备份,实现数据库的重复存储,具体方法包括: (1) 周期性地(如:一日一次或一日多次等等)对整个数
14、据库进行备份,将其转储到另一个磁盘或磁带等一类存储介质中。 (2) 建立日志数据库。记录每个事务的开始、结束时间,将每个事务对数据库的每一次插入、删除和修改前后的值写入日志数据库,以便有案可查。7.3 数据库的恢复(续数据库的恢复(续1)n故障类型及恢复方法 常见的故障可分为三类:事务故障事务故障、系统故障系统故障、介质介质故障故障(即磁盘故障)。 (1) 事务故障事务故障包括两种: 可以预期的事务故障,即在程序中可以预先估计到的错误,如存款余额透支等。这种情况可以在事务的代码中加入判断和rollback语句,当事务执行到rollback语句时,由系统对事务执行undo操作。 非预期的事务故障
15、,即在程序运行过程中发生的未估计到的错误,如运算溢出、数据错误等,此时由系统直接对该事务执行undo操作。 注:注:事务故障不需要利用备份对数据库还原,只需要利用日志数据库中的事务操作记录对已执行操作进行撤销即可。7.3 数据库的恢复(续数据库的恢复(续2) (2) 系统故障系统故障 引起系统停止运转随之要求重新启动(可能是数据库系统重启或计算机重启)的故障称为系统故障。系统故障指那些不会破坏磁盘上物理数据库的故障,如硬件故障(不包括磁盘损坏)、软件出错、掉电等。 系统故障的处理方法通常采用一种检查点技术。 检查点(Checkpoint)技术:DBMS定时设置检查点,在检查点时刻才对已经结束的
16、事务执行output命令;当DB发生系统故障时,和事务故障一样不需要利用备份对数据库进行恢复,而是依据日志数据库中记录的各事务的开始和结束时间,对不同类型的事务(指事务在发生故障时是否已执行完毕)执行undo或redo操作。 检查点技术由DBMS自动进行,无需人工干预。7.3 数据库的恢复(续数据库的恢复(续3) (2) 系统故障系统故障 不同类型事务的检查点处理方法: 事务T1,在检查点tn-1时刻其更新已写入磁盘,不必关心。 事务T2和T4,在发生故障时已执行完毕,但其更新尚未写入磁盘,在重启后应执行redo操作。 事务T3和T5,在发生故障时尚未做完,但可能已对磁盘上的物理数据库进行了更
17、新(OS的缓冲区管理子系统执行了output命令),在重启后应执行undo操作。T3T4事务检查点tn故障点时间t检查点tn-1T1T2T57.3 数据库的恢复(续数据库的恢复(续4) (3) 介质故障介质故障 指由于发生硬盘介质损坏或遭受病毒破坏时,磁盘中物理数据库遭到破坏的故障。 介质故障需利用备份对数据库进行恢复,其步骤如下: 利用备份将数据库恢复到最近的一个正确状态; 在日志数据库中找到在备份之后、故障之前已完成的所有事务,对这些事务执行redo操作;对于备份之后、故障之前尚未完成的事务则不必执行undo操作。7.4 数据库的并发控制数据库的并发控制 7.4.1 并发操作带来的四个问题
18、 7.4.2 封锁技术 7.4.3 封锁带来的问题 7.4.4 并发操作的调度7.4.1 并发操作带来的四个问题并发操作带来的四个问题n在单CPU上,可利用分时方法实现多个事务同时对同一数据进行读写操作,即“并发操作”;并发操作通常会带来四个问题:丢失更新问题、读脏数据问题、错误求和问题、不可重复读问题。 (1) 丢失更新问题200t7UpD A70t6UpD At5A:=A*2t4A:=A-30t3Find At2Find At1100t0事务事务T2数据库中数据库中A的值的值事务事务T1时间时间【例7.3】其中:Find表示读数据,UpD表示写数据。7.4.1 并发操作带来的四个问题并发操
19、作带来的四个问题(续续1) 依据事务的隔离性(并发执行的多个事务,其结果应与这些事务先后顺序执行的结果一样),其正确结果为:其正确结果为:若先T1后T2,A值为140;若先T2后T1,A值为170。 表中表中A值值200错误:错误:在时间t7丢失了事务T1的更新。时间时间事务事务T1数据库中数据库中A的值的值事务事务T2t0100t1Find At2Find At3A:=A-30t4A:=A*2t5UpD At670UpD At7200【例7.3】 (1) 丢失更新问题7.4 数据库的并发控制7.4.1 并发操作带来的四个问题并发操作带来的四个问题(续续2) 错误:错误:事务T2在时间t4读了
20、随后被撤销的A值70(被撤销的数据称为“脏数据”)。 正确结果:正确结果:若先T1后T2,事务T2读的A值为100;若先T2后T1,事务T2读的A值也为100。100t6rollbackt5Find A70t4UpD At3A:=A-30t2Find At1100t0事务事务T2数据库中数据库中A的值的值事务事务T1时间时间【例7.4】 (2) 读脏数据问题(两个例子)7.4 数据库的并发控制7.4.1 并发操作带来的四个问题并发操作带来的四个问题(续续3) 错误:错误:事务T2不仅在时间t4读了随后被撤销的A值,并在时间t8丢失了自己的更新。 正确结果:正确结果:若先T1后T2,A值为200
21、;若先T2后T1,A值也为200。 (2) 读脏数据问题(两个例子)【例7.5】140t7rollbackt8100t9UpD At6A:=A*2t5Find A70t4UpD At3A:=A-30t2Find At1100t0事务事务T2数据库中数据库中A的值的值事务事务T1时间时间7.4 数据库的并发控制7.4.1 并发操作带来的四个问题并发操作带来的四个问题(续续4) 事务T1求A、B、C的和Sum=110为错误结果错误结果。 正确结果:正确结果:若先T1后T2,Sum=120;若先T2后T1,Sum=120。 (3) 错误求和问题【例7.6】A:=A+10t9UpD At1050, 5
22、0, 20t11Find Ct12UpD Ct7Find A40, 50, 20t8Sum:=Sum+Ct13C:=C-10t6Find Ct5Sum:=Sum+Bt4Find Bt3Sum:=At2Find At140, 50, 30t0事务事务T2数据库中数据库中A的值的值事务事务T1时间时间7.4 数据库的并发控制7.4.1 并发操作带来的四个问题并发操作带来的四个问题(续续5) 错误:错误:事务T1前后两次读取A的值,却得到不同的数值。 正确结果:正确结果:若先T1后T2,事务T1读取的A值为100;若先T2后T1,事务T1读取的A值为200。Find At6200t5UpD At4A
23、:=A*2t3Find At2Find At1100t0事务事务T2数据库中数据库中A的值的值事务事务T1时间时间【例7.7】 (4) 不可重复读问题7.4 数据库的并发控制7.4.1 并发操作带来的四个问题并发操作带来的四个问题(续续6)n并发操作带来的上述四个问题可采取两种方法加以解决:一种是封锁(Locking)技术;另一种是时标(Timestamping)技术。n要求掌握封锁技术。7.4 数据库的并发控制7.4.2 封锁技术封锁技术n封锁是控制并发操作的主要技术。锁(Lock)是一个附加在数据项上的变量,用于描述该数据项的状态。封锁技术主要有两种锁:排他型封锁(Exclusive Lo
24、ck,简称X锁)和共享型封锁(Shared Lock,简称S锁)。n排他型封锁(X锁) (1) X锁定义锁定义 定义定义7.3 如果一个事务T对某个数据R实现了X锁,那么在T对数据R解除封锁之前,不允许其他事务再对该数据加任何类型的锁。 (2) X锁的两个操作锁的两个操作 封锁操作“XFind R”:表示事务对数据R加X锁,同时读数据R。随后该事务可以对数据R进行读写操作。如果加X锁失败,那么这么事务进入等待队列。7.4 数据库的并发控制7.4.2 封锁技术(续封锁技术(续1)n排他型封锁(X锁) (2) X锁的两个操作锁的两个操作 解锁操作“XRelease R”:表示事务解除对数据R的X锁
25、。 (3) PX协议协议 在并发操作中,所有要读写数据的事务均使用X锁的规则称为PX协议。即:任何企图读写数据R的事务必须先执行“XFind R”操作,以获得对R的X锁,才能读或写数据R;如果未获准X锁,那么这个事务进入等待队列,一直到获准X锁,事务才能继续做下去。 (4) PXC协议协议 将X锁的解锁操作合并到事务的结束操作(commit或rollback)中,引入这条规则的PX协议称为PXC协议。7.4 数据库的并发控制7.4.2 封锁技术(续封锁技术(续2)n利用X锁解决并发操作的四个问题: (1) 丢失更新问题丢失更新问题7.4 数据库的并发控制【例7.3】t10t7t8t9t11Up
26、D At6UpD At5A:=A*2t4A:=A-30t3Find At2Find At1100t0事务事务T2数据库中数据库中A的值的值事务事务T1时间时间XFind Acommit(包括解锁包括解锁)XFind A(失败失败)waitwaitwaitwait70waitXFind A(重做重做)A:=A*2UpD A1407.4.2 封锁技术(续封锁技术(续3)n利用X锁解决并发操作的四个问题: (2) 读脏数据问题读脏数据问题【例7.4】和【例7.5】 (3) 错误求和问题错误求和问题【例7.6】 (4) 不可重复读问题不可重复读问题【例7.7】n共享性封锁(S锁) (1) S锁定义锁定
27、义 定义定义7.4 如果事务T对某数据R加上S锁后,仍允许其他事务再对该数据加S锁,但在对该数据的所有S锁都解除之前决不允许任何事务对该数据加X锁。 解释:解释:在一个事务对数据R加S锁后,其他事务也可以对该数据加S锁,但这些事务只能对R进行读,不能进行写;若其中一个事务需对R执行写操作,则需将S锁升级为X锁,但必须保证其他事务的S锁已解锁,因为X锁是排他型封锁。7.4.2 封锁技术(续封锁技术(续4)n共享性封锁(S锁) (2) S锁的三个操作锁的三个操作 封锁操作“SFind R”:表示事务对数据R加S锁,同时读数据R。随后该事务只能读数据R,不能对数据R进行写操作。如果加S锁失败,那么这
28、个事务进入等待队列。 升级和写操作“UpDX R”:表示事务把对数据R的S锁升级为X锁,同时写数据R,如升级失败则该事务进入等待队列。 解锁操作“SRelease R”:表示事务要解除对数据R的S锁。7.4 数据库的并发控制7.4.2 封锁技术(续封锁技术(续5)n共享性封锁(S锁) (3) PS协议协议 在并发操作中,使用S锁的规则称为PS协议。即:任何要读写数据R的事务必须先执行“SFind R”操作,以获得对R的S锁。当事务获准对R的S锁后,只能读该数据,若要写该数据必须执行“UpDX R”操作,该操作将S锁升级为X锁同时写数据R;如升级失败则该事务进入等待队列。 (4) PSC协议协议
29、 将S锁的解锁操作合并到事务的结束操作(commit或rollback)中,引入这条规则的PS协议称为PSC协议。n利用S锁解决并发操作的四个问题: (2) 读脏数据问题读脏数据问题【例7.4】和【例7.5】 (3) 错误求和问题错误求和问题【例7.6】 (4) 不可重复读问题不可重复读问题【例7.7】7.4.2 封锁技术(续封锁技术(续6)n利用S锁解决并发操作的四个问题: (1) 丢失更新问题丢失更新问题 封锁引起的问题之一死锁。t7UpD At6UpD At5A:=A*2t4A:=A-30t3Find At2Find At1100t0事务事务T2数据库中数据库中A的值的值事务事务T1时间
30、时间【例7.3】7.4 数据库的并发控制SFind ASFind AUpDX A(失败失败)UpDX A(失败失败)waitwaitwaitwaitwait7.4.2 封锁技术(续封锁技术(续7)n封锁的相容矩阵:n封锁的粒度 封锁对象的大小称为封锁的粒度(Granularity),封锁的对象可以是一个属性、若干个属性、一个元组、若干个元组、一个关系表甚至整个数据库。 封锁粒度与系统的并发度和并发控制的开销密切相关。粒度越大,系统中能被封锁的对象就越少,并发度也就越小,但同时系统的开销也就越小;相反,粒度越小,并发度越高,但系统开销也就越大。 YNNXSXT2T1YYYYYNS注:注:N表示不
31、相容,Y表示相容; X、S、分别表示X锁,S锁,无锁。7.4.3 封锁带来的问题封锁带来的问题n封锁带来的问题1活锁 定义定义7.6 对于X锁,系统可能使某个事务永远处于等待状态,得不到封锁的机会,这种现象称为活锁(Live Lock)。n封锁带来的问题2饿死 定义定义7.7 对于S锁,有可能存在一个事务序列,其中每个事务都申请对某数据项加S锁,且每个事务在授权加锁后一小段时间内释放封锁,此时若另有一个事务T2欲在该数据项上加X锁,则将永远轮不上封锁的机会。这种现象称为饿死(Starvation)。 注:注:活锁问题和饿死问题的解决方法:先来先服务。7.4 数据库的并发控制7.4.3 封锁带来
32、的问题(续封锁带来的问题(续1)n封锁带来的问题3死锁 定义定义7.8 对于X锁或S锁,系统中有两个或两个以上的事务都处于等待状态,并且每个事务都在等待其中一个事务解除封锁,它才能继续执行下去,结果造成任何一个事务都无法继续执行,这种现象称系统进入了死锁(Dead Lock)状态。 可用称为事务依赖图事务依赖图的有向图测试系统中是否存在死锁。图中每个结点表示事务,有向线表示事务间的依赖关系,如:T1T2表示事务T1欲对某数据加锁依赖于事务T2先对该数据解锁。 若事务依赖图中存在有向环,则表明系统中存在死锁现象。7.4 数据库的并发控制7.4.3 封锁带来的问题(续封锁带来的问题(续2)n封锁带来的问题3死锁 死锁问题的解决方法:对存在环的事务执行rollback操作,解除其所有封锁。7.4 数据库的并发控制事务的无环依赖图事务的无环依赖图(无死锁现象)(无死锁现象)事务的有环依赖图事务的有环依赖图(有死锁现象)(有死锁现象)7.4.4 并发操作的调度并发操作的调度n调度、串行调度、并发调度的定义n多个事务的执行次序称为调度。n如果多个事务依次执行,则称为事务的串
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校社团工作计划人员招募
- 文化中心保护计划
- 可持续发展对品牌的影响计划
- 八年级地理上册 第4章 第3节《工业》教学实录 新人教版
- 2025年微波器件及电路合作协议书
- 生活部团队文化的建设与维护计划
- 急诊科室药品管理规范计划
- 六年级上册数学教案-分数混合运算第1课时 分数混合运算 说课稿-西师大版
- 孩子归属协议(2025年版)
- 八下历史第16课
- 小王子的英文语录
- 纳税人进项税额分摊方式备案报告表(样本)
- 学习解读2023年涉税专业服务基本准则和职业道德守则课件
- 产品承诺书格式 小红书食用农产品承诺书
- 比亚迪秦Pro说明书
- 仁爱英语八年级下册导学案全册
- 电工基础知识(全面)
- 马克思主义社会科学方法论重点习题
- 危险作业安全知识培训
- 少儿美术绘本教案课件-3-6岁 《100层巴士》
- 钢筋原材质量证明书
评论
0/150
提交评论