版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、束善杭2003年1月(c)2003,南京联创,版权所有。2l2003,南京联创,版权所有。南京联创,版权所有。l你可以遵照你可以遵照GNU Free Documentation License拷贝、分发和修改本文档,但是拷贝、分发和修改本文档,但是所有拷贝、分发和修改版本都必须包含所有拷贝、分发和修改版本都必须包含以上版权声明。以上版权声明。(c)2003,南京联创,版权所有。3l体系结构体系结构l程序编程程序编程l系统管理系统管理l故障恢复故障恢复l其它其它(c)2003,南京联创,版权所有。4l总控总控 VS 原子原子采用采用“总控原子总控原子”这样的体系结构。总控根据客这样的体系结构。总
2、控根据客户端的交易编码决定调用哪些原子服务户端的交易编码决定调用哪些原子服务 。总控服务负责:必须输入项的检查、返回结果的统总控服务负责:必须输入项的检查、返回结果的统一处理、事务控制、原子服务的逻辑组织。一处理、事务控制、原子服务的逻辑组织。原子服务只负责具体的某个简单的业务逻辑,不关原子服务只负责具体的某个简单的业务逻辑,不关心事务管理、业务逻辑的组织等。心事务管理、业务逻辑的组织等。总控由于不连接数据库,无需配置路由。但原子服总控由于不连接数据库,无需配置路由。但原子服务由于需要连接到不同的数据库,需要配置到具体务由于需要连接到不同的数据库,需要配置到具体数据库连接的路由。数据库连接的路
3、由。(c)2003,南京联创,版权所有。5l事务控制事务控制总控服务控制事务的启动、提交和回滚;总控服务控制事务的启动、提交和回滚;一个交易编码对应的多个原子服务,可分别一个交易编码对应的多个原子服务,可分别连接到不同的数据库,实现跨用户、跨数据连接到不同的数据库,实现跨用户、跨数据库、跨实例的交易;库、跨实例的交易;通过这样的分布式事务,中间层统一实现多通过这样的分布式事务,中间层统一实现多库的数据同步提交库的数据同步提交/回滚(比如:缴费卡系回滚(比如:缴费卡系统与营帐系统由两个开发商开发时,可以采统与营帐系统由两个开发商开发时,可以采用这种方式);用这种方式);(c)2003,南京联创,
4、版权所有。6l交易编码交易编码 VS 原子服务原子服务总控服务通过交易编码识别出不同的业务逻总控服务通过交易编码识别出不同的业务逻辑,然后将不同的原子服务组装成完整的业辑,然后将不同的原子服务组装成完整的业务过程。务过程。交易编码代表一个完整的交易,但原子服务交易编码代表一个完整的交易,但原子服务仅负责一个简单的原子业务功能。仅负责一个简单的原子业务功能。(c)2003,南京联创,版权所有。7l一个服务一个文件一个服务一个文件对于对于tuxedo的进程,可以在一个源代码文件中包含的进程,可以在一个源代码文件中包含多个服务函数,即服务。但这是一种不灵活的结构。多个服务函数,即服务。但这是一种不灵
5、活的结构。最灵活的结构,应该是:每个服务函数一个源代码最灵活的结构,应该是:每个服务函数一个源代码文件,然后通过文件,然后通过makefile文件将这些文件连接起来,文件将这些文件连接起来,按需要组合成适当的进程。按需要组合成适当的进程。这样做的一个巨大好处是:当发现需要调整服务在这样做的一个巨大好处是:当发现需要调整服务在进程间的分布关系时,可以简单的通过修改进程间的分布关系时,可以简单的通过修改makefile文件达到效果文件达到效果即可配置的服务分布。即可配置的服务分布。(c)2003,南京联创,版权所有。8l进程的服务分布进程的服务分布对于服务具体如何在进程间分布,需要考虑几个重对于服
6、务具体如何在进程间分布,需要考虑几个重要因素。要因素。重要因素一:一个原子服务进程占一个数据库连接,重要因素一:一个原子服务进程占一个数据库连接,这个连接既不能太闲,也不能太忙;这个连接既不能太闲,也不能太忙;重要因素二:一个原子服务进程中如果有一个服务重要因素二:一个原子服务进程中如果有一个服务执行的时间很长,可能会导致其它所有服务在这个执行的时间很长,可能会导致其它所有服务在这个服务运行时无法使用。所以,如果一个不常用的查服务运行时无法使用。所以,如果一个不常用的查询服务和常用的营业服务在一个进程中,就会有这询服务和常用的营业服务在一个进程中,就会有这个问题。个问题。(c)2003,南京联
7、创,版权所有。9l数据库按地州划分数据库按地州划分BOSS系统采用每个地州一个数据库(一个系统采用每个地州一个数据库(一个用户)的方式。用户)的方式。这种方式的优点是实现简单,很多问题考虑这种方式的优点是实现简单,很多问题考虑时要容易得多。时要容易得多。但缺点是中间件会对每个地州建立完全相同但缺点是中间件会对每个地州建立完全相同数目的数据库连接,对于小地州造成大量的数目的数据库连接,对于小地州造成大量的连接资源浪费。连接资源浪费。具体如何划分,可以将上述的因素作为考虑。具体如何划分,可以将上述的因素作为考虑。(c)2003,南京联创,版权所有。10l采用中间件的其它考虑采用中间件的其它考虑三层
8、结构不一定会降低连接数;三层结构不一定会降低连接数;终端数目到一定后,才会有效果;终端数目到一定后,才会有效果;不采用中间件,难以实现跨库的交易;不采用中间件,难以实现跨库的交易;采用中间件采用中间件采用两层结构采用两层结构终端数连接数(c)2003,南京联创,版权所有。11l逻辑:数据库逻辑:数据库 VS 中间件中间件将业务逻辑放在中间件还是数据实现需要考虑两个将业务逻辑放在中间件还是数据实现需要考虑两个主要因素。主要因素。一个主要因素是:数据库存储过程难以实现面向对一个主要因素是:数据库存储过程难以实现面向对象的封装,难以实现逻辑的抽象、继承和多态。象的封装,难以实现逻辑的抽象、继承和多态
9、。另一个主要因素是:大部分需要和数据库交互的逻另一个主要因素是:大部分需要和数据库交互的逻辑,基本上都是数据操作而不是科学计算。这样的辑,基本上都是数据操作而不是科学计算。这样的数据操作,由存储过程一次性集中处理比一个一个数据操作,由存储过程一次性集中处理比一个一个的零碎的的零碎的SQL片断效率高得多,而且给数据库带来片断效率高得多,而且给数据库带来的性能压力也小得多。的性能压力也小得多。(c)2003,南京联创,版权所有。12lC vs C+采用采用C+编程,务必考虑编程,务必考虑tuxedo的的tpreturn函数给函数给C+对象析构带来的对象析构带来的BUG。建议采用建议采用C+的类来封
10、装具体的业务逻辑。的类来封装具体的业务逻辑。在服务函数中仅通过简单的调用在服务函数中仅通过简单的调用C+对象方对象方法来实现具体的业务操作。法来实现具体的业务操作。C+中中tpreturn问题的解决,见备注。问题的解决,见备注。(c)2003,南京联创,版权所有。13l内存泄漏问题内存泄漏问题一个主要方面,就是前面的一个主要方面,就是前面的C+中中tpreturn问题。问题。另一个主要方面,是另一个主要方面,是Tuxedo的内存管理机制。务的内存管理机制。务必要注意:必要注意: 服务进入时,输入参数(服务进入时,输入参数(TPSVCINFO *类型)结构的类型)结构的data成员所指向的内存,
11、和成员所指向的内存,和tpreturn所返回的内存,是所返回的内存,是tuxedo自动释放的。自动释放的。 但除此之外,所有其它分配的内存(包括但除此之外,所有其它分配的内存(包括tpalloc/malloc/new分配的内存,分配的内存, 都必须自行释放)都必须自行释放).(c)2003,南京联创,版权所有。14lcore dump问题问题产生产生core dump的问题,除了常规的的问题,除了常规的c/c+编程中编程中需要注意的数组越界、内存指针非法操作外,还需需要注意的数组越界、内存指针非法操作外,还需要特别注意要特别注意tuxedo本身的问题。本身的问题。在调用在调用tuxedo的的A
12、PI函数,如函数,如tpcall/ tpreturn/ Fget等时,请一定要保证数据类型与其头文件中定等时,请一定要保证数据类型与其头文件中定义的一模一样。如,义的一模一样。如,long型的参数,传递型的参数,传递0L而不时而不时简单的简单的0。这样可避免许多无谓的时间浪费。这样可避免许多无谓的时间浪费。(c)2003,南京联创,版权所有。15l交易编码的对原子服务的转换交易编码的对原子服务的转换在在BOSS系统开发中,一个比较系统开发中,一个比较“笨笨”的编程风格的编程风格是:总控服务根据交易编码调用对应的原子服务时,是:总控服务根据交易编码调用对应的原子服务时,采用采用if交易编码等于某
13、个常量字符串,就交易编码等于某个常量字符串,就tpcall某几某几个原子服务的个原子服务的“静态静态”方式实现。当需要增加交易方式实现。当需要增加交易编码时,就在总控服务中增加一段编码时,就在总控服务中增加一段if的判断。的判断。这种方式,完全可以修改为用配置文件来动态配置这种方式,完全可以修改为用配置文件来动态配置交易编码与原子服务之间对应关系的方式来实现。交易编码与原子服务之间对应关系的方式来实现。在具体设计配置文件格式时,需要考虑如下因素:在具体设计配置文件格式时,需要考虑如下因素: 一个交易编码字符串必须允许对应多个原子服务。一个交易编码字符串必须允许对应多个原子服务。 多个原子服务之
14、间可以串联(前一个原子服务的输出,作多个原子服务之间可以串联(前一个原子服务的输出,作为后一个的输入),也可以并联为后一个的输入),也可以并联。(c)2003,南京联创,版权所有。16lAPI函数封装成公共函数函数封装成公共函数对于常用的对于常用的API函数,包括:函数,包括: fml缓存操作缓存操作Fget/Fchg/ Fappend/Findex,数据库操作数据库操作的相关错误处理,以及其它错误处理,建议的相关错误处理,以及其它错误处理,建议采用公共函数进行封装。采用公共函数进行封装。封装的主要目的,是为了:封装的主要目的,是为了: 采用统一的方式进行处理错误编码和错误信息,采用统一的方式
15、进行处理错误编码和错误信息,并在并在FML缓存中统一返回到客户端。缓存中统一返回到客户端。 简化应用编程,在具体编程时直接调用这些公共简化应用编程,在具体编程时直接调用这些公共函数实现需要的函数实现需要的API调用。调用。(c)2003,南京联创,版权所有。17l前台、中间件日志打印前台、中间件日志打印tuxedo服务的调测,是个很麻烦的工作。服务的调测,是个很麻烦的工作。为了提高调试、查错的效率,建议在前台软为了提高调试、查错的效率,建议在前台软件、中间件服务段,都打印相关的日志信息。件、中间件服务段,都打印相关的日志信息。这些日志信息的打印,具体如何实现,应该这些日志信息的打印,具体如何实
16、现,应该考虑在程序发布时能够方便的关闭,并在出考虑在程序发布时能够方便的关闭,并在出现在线运行异常错误时又能过方便的针对个现在线运行异常错误时又能过方便的针对个别服务打开。别服务打开。(c)2003,南京联创,版权所有。18l编译环境编译环境中间件服务器,建议建立方便、灵活的编译中间件服务器,建议建立方便、灵活的编译环境,以便迁移、重新编译等管理工作。环境,以便迁移、重新编译等管理工作。一种可参考的设计目标是:利用一种可参考的设计目标是:利用makefile,使得每个目录、每个目录下的文件,即可以使得每个目录、每个目录下的文件,即可以单独编译某个进程,也可以一次性迭代编译单独编译某个进程,也可
17、以一次性迭代编译整个目录下(包括子目录)的所有服务进程。整个目录下(包括子目录)的所有服务进程。(c)2003,南京联创,版权所有。19l分布式事务、分布式事务、DBLINK对于分布式事务,直接使用对于分布式事务,直接使用tuxedo支持的支持的XA协议。当然,一个原子服务进程只能连协议。当然,一个原子服务进程只能连接到一个库。但总控服务可以接到一个库。但总控服务可以tpcall几个连几个连接到不同数据库的原子服务。接到不同数据库的原子服务。不要在原子服务中使用不要在原子服务中使用oracle的的DBLINK进进行跨库操作,这会一起不必要的问题和麻烦。行跨库操作,这会一起不必要的问题和麻烦。(
18、c)2003,南京联创,版权所有。20l前台开发前台开发前台开发时,建议将前台开发时,建议将Tuxedo相关的调用操相关的调用操作封装成可直接使用的控件。作封装成可直接使用的控件。封装前台控件时,建议采用封装前台控件时,建议采用“连接层封装连接层封装服务层封装数据结果集层封装服务层封装数据结果集层封装”的三层封的三层封装模式。具体解释见备注。装模式。具体解释见备注。具体设计时,建议参考具体设计时,建议参考Tuxedo自身所带的自身所带的Jolt类体系设计模式。类体系设计模式。(c)2003,南京联创,版权所有。21l其它经验其它经验Tuxedo消息队列名称长度,建议不要超过消息队列名称长度,建
19、议不要超过11位。因为位。因为Tuxedo的管理控制程序的管理控制程序tmadmin只能显示只能显示12位长度。留位长度。留1位应急使位应急使用,但平时不要超过用,但平时不要超过11位。位。(c)2003,南京联创,版权所有。22l超时设置超时设置 tuxedo有三个超时设置:有三个超时设置:tpbegain时的时的事务超时、建立数据库连接事务超时、建立数据库连接时时openinfo中的中的SesTm超时设置、系统设置的全局服务调用超时。超时设置、系统设置的全局服务调用超时。 tpbegain的超时表示:从启动事务那一刻起,的超时表示:从启动事务那一刻起, tuxedo作为事务协调作为事务协调
20、者判断如果超过时间,还没有调用者判断如果超过时间,还没有调用tpcommit/tprollback结束事务,结束事务,则自动进行全局事务回滚(向所有事务参与者发出回滚通知)。则自动进行全局事务回滚(向所有事务参与者发出回滚通知)。 openinfo的超时表示:数据库判断,自身作为事务参与者,如果多的超时表示:数据库判断,自身作为事务参与者,如果多长时间中间件没有和自身发生交互,则自动回滚本库的事务,但与长时间中间件没有和自身发生交互,则自动回滚本库的事务,但与其它事务参与者是否回滚无关。其它事务参与者是否回滚无关。 系统全局超时设置:系统全局超时设置:SCANUNITBLOCKTIME表示消息
21、队列中的表示消息队列中的请求最多可以被堵塞多长时间。如果超过这个时间,发出请求的客请求最多可以被堵塞多长时间。如果超过这个时间,发出请求的客户端(包括终端和总控服务)将收到服务超时的错误信息。户端(包括终端和总控服务)将收到服务超时的错误信息。 这这3个时间的设置,建议关系是:个时间的设置,建议关系是:openinfo=tpbegin修改修改-check in。当需要于在线系统中增加、删除服务时,采用当需要于在线系统中增加、删除服务时,采用tmconfig命令动态修改命令动态修改ubb配置。但在配置完成后,配置。但在配置完成后,务必同步修改静态的务必同步修改静态的ubb配置文件。切切不可疏忽!
22、配置文件。切切不可疏忽!(c)2003,南京联创,版权所有。24l中间件目录规划中间件目录规划各省中间层配置结构,目录规划,要统一,各省中间层配置结构,目录规划,要统一,便于不同人员都可以进行维护。便于不同人员都可以进行维护。(c)2003,南京联创,版权所有。25l消息队列监控消息队列监控对于在线系统,必须定期、及时的监控消息队列的对于在线系统,必须定期、及时的监控消息队列的堵塞情况。堵塞情况。一旦发生原子服务的小心队列堵塞,将造成大量的一旦发生原子服务的小心队列堵塞,将造成大量的总控服务消息队列堵塞。总控服务消息队列堵塞。一旦发生消息队列的堵塞,立即重新启动原子服务,一旦发生消息队列的堵塞
23、,立即重新启动原子服务,并迅速查找产生堵塞的原因并迅速查找产生堵塞的原因一般情况下,均是一般情况下,均是某个服务的某个服务的sql语句效率过低,导致响应速度过慢。语句效率过低,导致响应速度过慢。从而导致这个服务进程消息队列堵塞。从而导致这个服务进程消息队列堵塞。(c)2003,南京联创,版权所有。26lMP模式网络监控模式网络监控对于对于MP模式(大部门情况下,考虑外部接口的前模式(大部门情况下,考虑外部接口的前置机),均会考虑将置机),均会考虑将Tuxedo配置成配置成MP模式。模式。对于对于MP模式,由于模式,由于Tuxedo有有partition的的BUG,要要及时、定期的用及时、定期的
24、用pnw命令检测多台机器之间的命令检测多台机器之间的Tuxedo连接信息是否断开。连接信息是否断开。一旦发生一旦发生tuxedo的网络问题(的网络问题(partition问题),要问题),要尽量做到第一时间发现、第一时间恢复(通过动态尽量做到第一时间发现、第一时间恢复(通过动态迁移)。否则,等到前台发现功能不能使用时,再迁移)。否则,等到前台发现功能不能使用时,再进行处理,一般都为时过晚,只能重新启动整个中进行处理,一般都为时过晚,只能重新启动整个中间件了。间件了。(c)2003,南京联创,版权所有。27lULOG监控监控在系统监控方面,另一个比较重要的内容,就是定在系统监控方面,另一个比较重
25、要的内容,就是定期、及时的监控期、及时的监控ULOG文件。文件。一旦发现一旦发现ULOG中产生大量的异常信息(产生日志中产生大量的异常信息(产生日志的速度猛的增加),一般都是系统异常的准确反馈。的速度猛的增加),一般都是系统异常的准确反馈。系统刚上线期间,通过每日定时监控系统刚上线期间,通过每日定时监控ULOG日志,日志,可以及时发现许多应用系统本身的许多问题,为系可以及时发现许多应用系统本身的许多问题,为系统的完善、优化起到很大指导作用。统的完善、优化起到很大指导作用。(c)2003,南京联创,版权所有。28l平台问题平台问题 Tuxedo 存在平台问题:在不同的平台下,其性能是有存在平台问
26、题:在不同的平台下,其性能是有区别的。区别的。 特别的,对于特别的,对于SunOS,Tuxedo表现的最不稳定。即使表现的最不稳定。即使使用最普遍的使用最普遍的tmadmin命令,也可能导致整个中间件的命令,也可能导致整个中间件的崩溃。崩溃。 对于对于tmshutdown命令来说,在命令来说,在SunOS下下白天中间件忙白天中间件忙碌的时候,哪怕使用一次,也极有可能导致整个中间件碌的时候,哪怕使用一次,也极有可能导致整个中间件崩溃。崩溃。 所以,对于中间件来说,为了保证系统的稳定性。建议所以,对于中间件来说,为了保证系统的稳定性。建议白天时间,不要做任何启停服务、动态配置、系统清理白天时间,不
27、要做任何启停服务、动态配置、系统清理等修改性的动作。等修改性的动作。(c)2003,南京联创,版权所有。29l操作系统监控操作系统监控对于中间件来说,另一个重要的监控,就是对于中间件来说,另一个重要的监控,就是操作系统的监控。操作系统的监控。操作系统方面容易一起中间件崩溃的,就是操作系统方面容易一起中间件崩溃的,就是内存和内存和swap区区的耗尽。的耗尽。其它可能的问题,就是分配给其它可能的问题,就是分配给tuxedo用户用户的进程数目、磁盘空间、的进程数目、磁盘空间、IPC等资源的短缺。等资源的短缺。(c)2003,南京联创,版权所有。30lWEB监控界面监控界面tuxedo提供提供web监
28、控图形界面,可用来进监控图形界面,可用来进行行tuxedo本身的监控(包括消息队列、网本身的监控(包括消息队列、网络连接等通过络连接等通过tmadmin监控到的所有信息)。监控到的所有信息)。通过图形界面,还可以进行动态配置。通过图形界面,还可以进行动态配置。但使用但使用web界面,需要考虑其对中间件服务界面,需要考虑其对中间件服务器性能的消耗。器性能的消耗。(c)2003,南京联创,版权所有。31ltpadmcall API接口接口可以通过调用可以通过调用tpadmcall API函数,获得函数,获得tuxedo的的 MIB 信息,从而实现支持信息,从而实现支持SNMP协议的系统监控。协议的
29、系统监控。(c)2003,南京联创,版权所有。32l“事务已重算事务已重算”这个错误,是这个错误,是oracle中文版的报错。英文版中文版的报错。英文版的错误信息,应该是类似于的错误信息,应该是类似于“transaction had been rollbacked”的信息。即事务已经的信息。即事务已经被回滚的意思。被回滚的意思。发生这个错误,都是中间件与数据库的连接发生这个错误,都是中间件与数据库的连接异常,只有重新启动相应的服务。异常,只有重新启动相应的服务。故障原因,一般都是网络异常、数据库故障原因,一般都是网络异常、数据库BUG造成的。造成的。(c)2003,南京联创,版权所有。33lT
30、MS_ORA启不来启不来 在在tuxedo环境中,对于环境中,对于oracle数据来说,有时会出现数据来说,有时会出现TMS_ORA进程(事务管理器进程)启不来的情况。进程(事务管理器进程)启不来的情况。 对于这个故障,一般的原因有:原来对于这个故障,一般的原因有:原来TMS_ORA进程的进程的IPC资源没有释放;数据库中资源没有释放;数据库中v$global_transaction表表被锁住,无法插入新的记录;数据库被锁住,无法插入新的记录;数据库DX锁等待。锁等待。 具体解决的办法,就是将具体解决的办法,就是将TMS_ORA等待的资源:等待的资源:IPC资源、资源、v$global_tra
31、nsaction表锁、表锁、DX锁等,给释放出锁等,给释放出来。来。 首先要找到锁定这些资源的对象或进程,然后将该进程首先要找到锁定这些资源的对象或进程,然后将该进程kill掉,然后再重新启动相关进程和掉,然后再重新启动相关进程和TMS_ORA 。(c)2003,南京联创,版权所有。34l数据库连接断开数据库连接断开tuxedo另一个令人头痛的问题,就是:其与数据库另一个令人头痛的问题,就是:其与数据库建立的是长连接。而这种长连接被断开时,建立的是长连接。而这种长连接被断开时,tuxedo自身检测不到,无法自动重新连接。从而导致服务自身检测不到,无法自动重新连接。从而导致服务无法正常使用(一般
32、都是无法正常使用(一般都是 service handle error之之类的错误信息)。类的错误信息)。对于这种问题,一方面,只能重新启动服务来恢复;对于这种问题,一方面,只能重新启动服务来恢复;另一方面,可以考虑开发监控工具,自动检测服务另一方面,可以考虑开发监控工具,自动检测服务的数据库连接是否断开,并自动报警和重新启动。的数据库连接是否断开,并自动报警和重新启动。(c)2003,南京联创,版权所有。35lDX锁锁 tuxedo导致的导致的oracle的的一个重大问题是:常常出现长时一个重大问题是:常常出现长时间的间的DX锁。一旦出现这个锁,一方面锁。一旦出现这个锁,一方面TMS_ORA可能启可能启不来,另一方面可以不来,另一方面可以tpbegain无法开始新事务。无法开始新事务。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厂房涂料施工合同模板
- 企业资金托管合同模板
- 专业舞蹈培训合同模板
- 冻库安装合同范例
- 外包保安合同模板
- 2024年安保服务合同
- 冷库库体安装合同模板
- 加盟装饰项目合同模板
- 2024年广西客运资格从业证考试内容是什么
- 2024年新疆客运资格证考试多少题及格
- 多重耐药菌 课件
- 2024年《经济学基础》复习考试复习题库(含答案)
- 黑龙江省齐齐哈尔市2022-2023学年七年级上学期期末数学试题(含答案)6
- 高中 思想政治 必修1 第二课 只有社会主义才能救中国《课时2 社会主义制度在中国的确立》课件
- 2025年广东省春季高考学业水平考试数学试卷试题(含答案解析)
- (新版)云南水利安全员(B证)考试题库-下(多选、判断题)
- 2024年观光型酒店项目发展计划
- 2024年中国骨关节炎诊疗指南解读课件
- 第三单元《小数除法》(单元测试)-2024-2025学年五年级上册数学人教版
- 水产产品采购合同三篇
- 专项学习 像工程师那样(教学设计)- 2023-2024学年科学四年级上册 苏教版
评论
0/150
提交评论