db2 数据库 基础 知识 入门_第1页
db2 数据库 基础 知识 入门_第2页
db2 数据库 基础 知识 入门_第3页
db2 数据库 基础 知识 入门_第4页
db2 数据库 基础 知识 入门_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DB2基础DB2是IBM一种分布式数据库解决方案。说简单点:DB2就是IBM开发的一种大型关系型数据库平台.它支持多用户或应用程序在同一条SQL语句中查询不同database甚至不同DBMS中的数据。目前,DB2有如下一些版本:(比如DB2forUnix,DB2forWindows,DB2forAS/400,DB2forOS/390等)DB2是IBM公司开发的关系数据库管理系统,它有多种不同的版本,如:DB2工作组版(DB2WorkgroupEdition)、DB2企业版(DB2EnterpriseEdition)>DB2个人版(DB2PersonalEdition)和DB2企业扩展版(DB2Enterprise-ExendedEdition)等,这些产品基本的数据管理功能是一样的,区别在于支持远程客户能力和分布式处理能力。个人版适用于单机使用,即服务器只能由本地应用程序访问。工作组版和企业版提供了本地和远程客户访问DB2的功能(当然远程客户要安装相应客户应用程序开发部件),企业版包括工作组版中的所有部件外再增加对主机连接的支持。企业扩展版允许将一个大的数据库分布到同一类型的多个不同计算机上,这种分布式功能尤其适用于大型数据库的处理。DB2可运行在OS/2、WindowsNT、UNIX操作系统上,通常将运行在这些平台上的DB2产品统称为DB2通用数据库,这主要是强调这些产品运行环境类似,并共享相同的源代码°DB2通用数据库主要组件包括数据库引擎(DalabaseEngine)应用程序接口和一组工具。数据库引擎提供了关系数据库管理系统的基本功能,如管理数据、控制数据的访问(包括并发控制)、保证数据完整性及数据安全。所有数据访问都通过SQL接口进行。db2起源于systemr和systemr*。他支持从pc到unix,从中小型机到大型机;从ibm到非ibm(hp及sununix系统等)各种操作平台。他既可以在主机上以主/从方式独立运行,也可以在客户/服务器环境中运行。其中服务平台可以是os/400,aix,os/2,hp-unix,sun-solaris等操作系统,客户机平台可以是os/2或windows,dos,aix,hp-ux,sunsolaris等操作系统。一、 db2核心数据库的特色db2数据库核心又称作db2公共服务器,采用多进程多线索体系结构,可以运行于多种操作系统之上,并分别根据相应平台环境作了调整和优化,以便能够达到较好的性能。(1) 支持面向对象的编程db2支持复杂的数据结构,如无结构文本对象,可以对无结构文本对象进行布尔匹配、最接近匹配和任意匹配等搜索。可以建立用户数据类型和用户自定义函数。(2) 支持多媒体应用程序db2支持大二分对象(blob),允许在数据库中存取二进制大对象和文本大对象。其中,二进制大对象可以用来存储多媒体对象。(3) 备份和恢复能力(4) 支持存储过程和触发器,用户可以在建表时显示的定义复杂的完整性规则(5) 支持的硅sql查询(6) 支持异构分布式数据库访问(7) 支持数据复制二、 开发工具ibm提供了许多开发工具,主要有visualizerquery,visualage,visualgen。visualizer是客户/服务器环境中的集成工具软件,主要包括visualizerquery可视化查询工具,visualizerultimediaquery可视化多媒体查询工具,visualizerchart可视化图标工具,visualizerprocedure可视化过程工具,visualizerstatistics可视化统计工具,visualizerplans可视化规划工具,visualizerdevelopment可视化开发工具。visualage是一个功能很强的可视化的面向对象的应用开发工具,可翼大幅度的提高软件开发效率。其主要特征有:(1) 可视化程序设计工具。(2) 部件库。包括支持图形用户接口的预制不见,以及包含数据库查询、事务和本地、远程函数的通用部件。(3) 关系数据库支持。(4) 群体程序设计。(5) 支持增强的动态连接库。支持多媒体。支持数据共享。visualgen是ibm所提供的高效开发方案中的重要组成部分。它集成了第四代语言、客户服务器与面向对象技术,给用户提供了一个完整、高效的开发环境。三、DB2数据库的安装这是在IBMRS6000操作系统为AIX安装的,HP9000上雷同注册为具有超级用户权限的用户(root)将标有“。82通用数据库企业版”的软件光盘插入驱动器输入如下命令,以创建一个目录来安装该CD-ROM:#mkdir-p/cdrom其中cdrom表示CD-ROM安装目录。输入如下命令,来分配CD-ROM文件系统:#smittystorage选择文件系统选择添加/更改/显示/删除文件系统选择CDROM文件系统选择添加CDROM文件系统在弹出窗口中,输入如下项作为安装点: /cdrom通过输入以下命令来安装CD-ROM文件系统:smitmountf在文件系统名称字段中输入值。例如,该名称可能是/dev/cd0。在安装目录字段中输入值。例如,此值可能是/cdrom。将安装为只读系统设置为Yes。单击确定。cd/cdrom输入./db2setup命令以启动DB2安装程序。安装DB2V6窗口打开。按Tab键更改突出显示的选项,按Enter键选择或取消选择选项。在服务器上安装,一般选择安装以下三个产品:注意:要显示想要安装的DB2产品的部件,选择定制。要在任何时候返回至先前窗口,选择取消。?DB2AdministrationClient选择定制安装这个产品,?DB2UDBenterpriseedition选择定制安装这个产品,?DB2SoftwareDeveloperKit如果同时做开发,需要定制安装此产品。在“DB2产品信息”和“DB2产品库”只选择中国语言ZH_CN支持。在16步确认后,将开始安装数据库程序。在安装过程中,还需确认以下问题:是否建立DB2管理帐户,一般选择建立:按缺省建立db2管理用户db2as(使用缺省的UID,GroupId,安装home路径),在语言支持上,只选择中国语言ZH_CN支持。是否建立DB2的实例,一般选择建立:?按缺省建立db2管理用户db2inst1:db2iadm1(使用缺省的UID,GroupId,安装home路径),在语言支持上,只选择中国语言ZH_CN支持。?按缺省建立db2用户db2fenc1:db2fenc1(使用缺省的UID,GroupId,安装home路径),在语言支持上,只选择中国语言ZH_CN支持。?是否建立sample数据库(为了检查数据库的安装是否正确,一般选择建立sample数据库)?是否选择DB2的实例进程在操作系统启动时,自动执行初始化如果在独立服务器上安装使用,可选择autostart,但在aix+hacmp+db2的双机共享环境中,不要选择autostart,DB2实例进程的启动,由hacmp来控制。安装结果:数据库程序安装完成后,DB2的软件程序安装在/usr/lpp目录中,DB2DIR=/usr/lpp/DB2_06_01注意:如果安装过程中没有指定建立实例和管理帐户,在安装完成后可以使用命令创建实例(db2icrt)0或者要创建或添加新的实例、“管理服务器”或其他DB2产品和部件,输入如下命令:/usr/lpp/DB2_06_01/install/DB2setup19.验证安装在安装时若没有选择建立sample数据库,在安装完成后可以通过命令(db2sampl)创建SAMPLE数据库,并通过使用命令行处理器与该数据库相连来验证安装:作为具有系统管理(SYSADM)权限的用户向系统注册。如:db2inst1输入DB2sampl命令以便创建SAMPLE数据库。创建SAMPLE数据库时,用数据库别名SAMPLE将它自动编目。输入DB2start命令以启动数据库管理程序。输入下列命令来与SAMPLE数据库相连,检索在部门20中工作的所有雇员的列表,并重设数据库连接:DB2connecttosampleDB2"select*fromstaffwheredept=20"DB2connectreset注意:在验证安装后,可除去SAMPLE数据库以释放磁盘空间。输入DB2dropdatabasesample命令来卸下SAMPLE数据库。若尚未未安装DB2工具,则您可以通过创建SAMPLE数据库,并通过使用命令行处理器与该数据库相连来验证安装,如下所示:步骤1.作为具有系统管理(SYSADM)权限的用户向系统注册。步骤2,输入db2sampl命令以便创建SAMPLE数据库。创建SAMPLE数据库时,用数据库别名SAMPLE将它自动编目。步骤3,输入db2start命令以启动数据库管理程序。步骤4,输入下列命令来与SAMPLE数据库相连,检索在部门20中工作的所有雇员的列表,并重设数据库连接:db2connecttosampledb2"select*fromstaffwheredept=20"db2connectreset如以上命令均正确执行,则证明DB2UDB数据库服务器的安装已经成功完成.四、 DB2数据库的备份和恢复最近,我恢复了一个数据库,其中的辛苦不予言表,我想写出自己用到的一些语句,和遇到相同问题的xdjm共勉。首先谈db2数据库的备份,我用的是backup命令。db2backupdatabase数据库名(我的库是jsdb)忘了说了,在backup之前需要停止你要备份的数据库,我用了db2stopforce(之所以用force参数是因为这样好停懒省事:)和db2start。这样就保证可以成功backup了。备份完成后db2会告诉你一个时间戳,例如:20040831(之后好几位)这样就会在当前目录下产生一个与你数据库名相同的文件夹名例如:jsdb。这个文件夹目录层次很重要,如果错了会在恢复时提示找不到文件。备份完成以后就是恢复了,我用的是restore命令。db2restoredatabase数据库名(jsdb)takenat时间戳(20040831)执行这个语句要注意两点:1,要把备份文件夹考到当前目录下(我用了一个cd。:\命令设当前目录为c盘,将jsdb文件夹考到c盘根目录下);2,时间戳要和jsdb目录中的一致。这样,就完成了恢复数据库了。五、 DB2编程序技巧1DB2编程1.1建存储过程时Create后一定不要用TAB键createprocedure的create后只能用空格,而不可用tab健,否则编译会通不过。切记,切记。1.2使用临时表要注意,临时表只能建在usertemporytablesspace上,如果database只有systemtemporytablespace是不能建临时表的。另外,DB2的临时表和sybase及oracle的临时表不太一样,DB2的临时表是在一个session内有效的。所以,如果程序有多线程,最好不要用临时表,很难控制。建临时表时最好加上withreplace选项,这样就可以不显示的drop临时表,建临时表时如果不加该选项而该临时表在该session内已创建且没有drop,这时会发生错误。1.3从数据表中取指定前几条记录select*fromtb_market_codefetchfirst1rowsonly但下面这种方式不允许selectmarket_codeintov_market_codefromtb_market_codefetchfirst1rowsonly;选第一条记录的字段到一个变量以以下方式代替declarev_market_codechar(1);declarecursor1cursorforselectmarket_codefromtb_market_codefetchfirst1rowsonlyforupdate;opencursor1;fetchcursor1intov_market_code;closecursor1;1.4游标的使用注意commit和rollback使用游标时要特别注意如果没有加withhold选项,在Commit和Rollback时,该游标将被关闭。Commit和Rollback有很多东西要注意。特别小心游标的两种定义方式一种为declarecontinuehandlerfornotfoundbeginsetv_notfound=1;end;declarecursor1cursorwithholdforselectmarket_codefromtb_market_codeforupdate;opencursor1;setv_notfound=0;fetchcursor1intov_market_code;whilev_notfound=0Do--worksetv_notfound=0;fetchcursor1intov_market_code;endwhile;closecursor1;这种方式使用起来比较复杂,但也比较灵活。特别是可以使用withhold选项。如果循环内有commit或rollback而要保持该cursor不被关闭,只能使用这种方式。另一种为pcursor1:forloopcs1ascousor1cursorasselectmarket_codeasmarket_codefromtb_market_codeforupdatedoDB2基础知识endfor;这种方式的优点是比较简单,不用(也不允许)使用open,fetch,close。但不能使用withhold选项。如果在游标循环内要使用commit,rollback则不能使用这种方式。如果没有commit或rollback的要求,推荐使用这种方式(看来For这种方式有问题)。修改游标的当前记录的方法updatetb_market_codesetmarket_code='0'wherecurrentofcursor!;不过要注意将cursor!定义为可修改的游标declarecursor!cursorforselectmarket_codefromtb_market_codeforupdate;forupdate不能和GROUPBY、DISTINCT>ORDERBY、FORREADONLY及UNION,EXCEPT,orINTERSECT但UNIONALL除外)一起使用。1.5类似decode的转码操作oracle中有一个函数selectdecode(a1,'1','n1','2','n2','n3')aa1fromdb2没有该函数,但可以用变通的方法selectcasea1when'1'then'n1'when'2'then'n2'else'n3'endasaa1from1.6类似charindex查找字符在字串中的位置Locate(„y,,,dfdasfay,)查找’y’在’dfdasfay’中的位置。1.7类似datedif计算两个日期的相差天数days(date(„2001-06-05'))-days(date(„2001-04-0T))days返回的是从0001-01-01开始计算的天数1.8写UDF的例子C写见sqllib\samples\cli\udfsrv.c1.9创建含identity值(即自动生成的ID)的表建这样的表的写法CREATETABLEtest(t1SMALLINTNOTNULLGENERATEDALWAYSASIDENTITY(STARTWITH500,INCREMENTBY1),t2CHAR(1));在一个表中只允许有一个identity的column.1.10预防字段空值的处理SELECTDEPTNO,DEPTNAME,COALESCE(MGRNO,'ABSENT'),ADMRDEPTFROMDEPARTMENTCOALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式。和oracle的isnull类似,但isnull好象只能两个表达式。1.11取得处理的记录数declarev_countint;updatetb_testsett1='0'wheret2='2';--检查修改的行数,判断指定的记录是否存在getdiagnosticsv_count=ROW_COUNT;只对update,insert,delete起作用.不对selectinto有效1.12从存储过程返回结果集(游标)的用法1、建一sp返回结果集CREATEPROCEDUREDB2INST1.Proc1()LANGUAGESQLresultsets2(返回两个结果集)--SQL存储过程P1:BEGINdeclarec1cursorwithreturntocallerforselectmarket_codefromtb_market_code;--指定该结果集用于返回给调用者declarec2cursorwithreturntocallerforselectmarket_codefromtb_market_code;openc1;openc2;ENDP12、建一SP调该sp且使用它的结果集CREATEPROCEDUREDB2INST1.Proc2(outout_market_codechar(1))LANGUAGESQL--SQL存储过程P1:BEGINdeclareloc1,loc2result_set_locatorvarying;--建立一个结果集数组callproc1;--调用该SP返回结果集。associateresultsetlocator(loc1,loc2)withprocedureproc1;--将返回结果集和结果集数组关联allocatecursor1cursorforresultsetloc1;allocatecursor2cursorforresultsetloc2;--将结果集数组分配给cursorfetchcursor1intoout_market_code;--直接从结果集中赋值closecursor1;ENDP13、 动态SQL写法DECLARECURSORC1FORSTMT1;PREPARESTMT1FROM'ALLOCATEC2CURSORFORRESULTSET?';4、 注意:一、 如果一个sp调用好几次,只能取到最近一次调用的结果集。二、 allocate的cursor不能再次open,但可以close,是closesp中的对应cursor。1.13类型转换函数selectcast(currenttimeaschar(8))fromtb_market_code1.14存储过程的互相调用目前,csp可以互相调用。Sqlsp可以互相调用,Sqlsp可以调用Csp,但Csp不可以调用Sqlsp(最新的说法是可以)C存储过程参数注意createprocedurepr_clear_task_ctrl(ININ_BRANCH_CODEchar(4),ININ_TRADEDATEchar(8),ININ_TASK_IDchar(2),ININ_SUB_TASK_IDchar(4),OUTOUT_SUCCESS_FLAGINTEGER)DYNAMICRESULTSETS0LANGUAGECPARAMETERSTYLEGENERALWITHNULLS(如果不是这样,sql的sp将不能调用该用c写的存储过程,产生保护性错误)NODBINFOFENCEDMODIFIESSQLDATAEXTERNALNAME'pr_clear_task_ctrl!pr_clear_task_ctrl'@存储过程fence及unfencefence的存储过程单独启用一个新的地址空间,而unfence的存储过程和调用它的进程使用同一个地址空间。一般而言,fence的存储过程比较安全。但有时一些特殊的要求,如要取调用者的pid,则fence的存储过程会取不到,而只有unfence的能取到。SP错误处理用法如果在SP中调用其它的有返回值的,包括结果集、临时表和输出参数类型的SP,DB2会自动发出一个SQLWarningo而在我们原来的处理中对于SQLWarning都会插入到日志,这样子最后会出现多条SQLCODE=0的警告信息。处理办法:定义一个标志变量,比如DECLAREV_STATUSINTEGERDEFAULT0,在CALLSPNAME之后,SETV_STATUS=1,DECLARECONTINUEHANDLERFORSQLWARNINGBEGINIFV_STATUS<>1THEN--警告处理,插入日志SETV_STATUS=0;ENDIF;END;import用法db2importfromghl.outofDELmessageserr.txtinsertintodb2inst1.tb_dbf_match_ha注意要加schmavalues的使用如果有多个set语句给变量付值,最好使用values语句,改写为一句。这样可以提高效率。但要注意,values不能将null值付给一个变量。values(null)intoout_return_code;这个语句会报错的。1.20给select语句指定隔离级别select*fromtb_head_stock_balancewithur1.21atomic及notatomic区别atomic是将该部分程序块指定为一个整体,其中任何一个语句失败,则整个程序块都相当于没做,包括包含在atomic块内的已经执行成功的语句也相当于没做,有点类似于transaction0DB2编程性能注意2.1大数据的导表应该是export后再load性能更好,因为load不写日志。比selectinto要好。SQL语句尽量写复杂SQL尽量使用大的复杂的SQL语句,将多而简单的语句组合成大的SQL语句对性能会有所改善。DB2的SQLEngieer对复杂语句的优化能力比较强,基本上不用当心语句的性能问题。Oracle则相反,推荐将复杂的语句简单化,SQLEngieer的优化能力不是特别好。这是因为每一个SQL语句都会有resetSQLCODE和SQLSTATE等各种操作,会对数据库性能有所消耗。一个总的思想就是尽量减少SQL语句的个数。SQLSP及CSP的选择首先,C的sp的性能比sql的sp的要高。一般而言,SQL语句比较复杂,而逻辑比较简单,sqlsp与csp的性能差异会比较小,这样从工作量考虑,用SQL写比较好。而如果逻辑比较复杂,SQL比较简单,用c写比较好。2.4查询的优化(HASH及RR_TO_RS)db2setDB2_HASH_JOIN=Y(HASH排序优化)指定排序时使用HASH排序,这样db2在表join时,先对各表做hash排序,再join,这样可以大大提高性能。剧沈刚说做实验,7个一千万条记录表的做join取10000条记录,再没有索引的情况下72秒。db2setDB2_RR_TO_RS=Y该设置后,不能定义RR隔离级别,如果定义RR,db2也会自动降为RS.这样,db2不用管理Nextkey,可以少管理一些东西,这样可以提高性能。2.5避免使用count(*)及exists的方法1、 首先要避免使用count(*)操作,因为count(*)基本上要对表做全部扫描一遍,如果使用很多会导致很慢。2、 exists比count(*)要快,但总的来说也会对表做扫描,它只是碰到第一条符合的记录就停下来。如果做这两中操作的目的是为selectinto服务的话,就可以省略掉这两步。直接使用selectinto选择记录中的字段。如果是没有记录选择到的话,db2会将sqlcode=100和sqlstate=’20000’如果是有多条记录的话,db2会产生一个错误。程序可以创建continuehandlerforexceptioncontinuehandlerfornotfound来检测。这是最快速的方法。3、如果是判断是不是一条,可以使用游标来计算,用一个计数器,累加,达到预定值后就离开。这个速度也比count(*)要快,因为它只要扫描到预定值就不再扫描了,不用做全表的scan,不过它写起来比较麻烦。DB2表及sp管理3.1看存储过程文本selecttextfromcedureswhereprocname='PROC1';3.2看表结构describetableceduresdescribeselect*fromcedures3.3查看各表对sp的影响(被哪些sp使用)selectPROCNAMEfromSYSCAT.PROCEDURESwhereSPECIFICNAMEin(selectdnamefromsysibm.sysdependencieswherebnamein(selectPKGNAMEfromsyscat.packagedepwherebname='TB_BRANCH'))3.4查看sp使用了哪些表selectbnamefromsyscat.packagedepwherebtype='T'andpkgnamein(selectbnamefromsysibm.sysdependencieswherednamein(selectspecificnamefromcedureswhereprocname='PR_CLEAR_MATCH_DIVIDE_SHA'))3.5查看function被哪些sp使用selectPROCNAMEfromSYSCAT.PROCEDURESwhereSPECIFICNAMEin(selectdnamefromsysibm.sysdependencieswherebnamein(selectPKGNAMEfromsyscat.packagedepwherebnamein(selectSPECIFICNAMEfromSYSCAT.functionswherefuncname='GET_CURRENT_DATE')))使用function时要注意,如果想drop掉该function必须要先将调用该function的其它存储过程全部drop掉。必须先创建function,调用该function的sp才可以创建成功。3.6修改表结构一次给一个表增加多个字段:db2"altertabletb_testaddcolumnt1char(1)addcolumnt2char(2)addcolumnt3int"4DB2系统管理DB2安装在Windows98下安装db27.1或其他版本,如果有Jdbc错误或者是Windwos98不能启动,则将autoexec.bat中的内容用如下内容替换:C:\PROGRA~1\TRENDP~1\PCSCAN.EXEC:\C:\WINDOWS\COMMAND\/NS/WIN95remC:\WINDOWS\COMMAND.COM/E:32768REM[Header]REM[CD-ROMDrive]REM[Miscellaneous]REM[Display]setPATH=%PATH%;C:\MSSQL\BINN;C:\PROGRA~1\SQLLIB\BIN;C:\PROGRA~1\SQLLIB\FUNCTION;C:\PROGRA〜1\SQLLIB\SAMPLES\REPL;C:\PROGRA〜1\SQLLIB\HELPIFEXISTC:\PROGRA~1\IBM\IMNNQ\IMQENVBATCALLC:\PROGRA~1\IBM\IMNNQ\IMQENV.BJTIFEXISTC:\PROGRA~1\IBM\IMNNQ\IMNENVBATCALLC:\PROGRA~1\IBM\IMNNQ\IMNENV.BJTsetDB2INSTANCE=DB2setCLASSPATH=.;C:\PROGRA〜1\SQLLIB\java\db2java.zip;C:\PROGRA〜1\SQLLIB\java\runtime.zip;C:\PROGRA〜1\SQLLIB\java\sqlj.zip;C:\PROGRA〜1\SQLLIB\binsetMDIS_PROFILE=C:\PROGRA〜1\SQLLIB\METADATA\PROFILESsetLC_ALL=ZH_CNsetINCLUDE=C:\PROGRA〜1\SQLLIB\INCLUDE;C:\PROGRA〜1\SQLLIB\LIB;C:\PROGRA〜1\SQLLIB\TEMPLATES\INCLUDEsetLIB=C:\PROGRA〜1\SQLLIB\LIBsetDB2PATH=C:\PROGRA〜1\SQLLIBsetDB2TEMPDIR=C:\PROGRA〜1\SQLLIBsetVWS_TEMPLATES=C:\PROGRA〜1\SQLLIB\TEMPLATESsetVWS_LOGGING=C:\PROGRA〜1\SQLLIB\LOGGINGsetVWSPATH=C:\PROGRA〜1\SQLLIBsetVWS_FOLDER=IBMDB2setICM_FOLDER=>息目录管理器win创建DatabasecreatedatabaseheadusingcodesetIBM-eucCNterritoryCN;这样可以支持中文。4.3手工做数据库远程(别名)配置db2catalogtcpipnodenodelremote00server50000db2catalogdbheadastest1atnodenode1然后既可使用:db2connecttotest1user...using...连上head库了4.4停止启动数据库实例db2start、db2stop(force)4.5连接数据库及看当前连接数据库连接数据库:db2connecttoheaduserdb2inst1usingdb2inst1当前连接数据库:db2connect4.6停止启动数据库headdb2activatedbheaddb2deactivatedbhead要注意的是,如果有连接,使用deactivatedb不起作用。如果是用activatedb启动的数据库,一定要用deactivatedb才会停止该数据库。(当然如果是db2stop也会停止)。使用activatedb,这样可以减少第一次连接时的等待时间。Database如果不是使用activatedb启动而是通过连接数据库而启动的话,当所有的连接都退出后,db也就自动停止。4.7查看及停止数据库当前的应用程序查看应用程序:db2listapplicationsshowdetail授权标识|应用程序名|应用程序句柄|应用程序标识|序号#|代理程序|协调程序|状态|状态更改时间|DB名|DB路径| |节点号|pid/线程其中:1、 应用程序标识的第一部分是应用程序的IP地址,不过是已16进制表示的。2、 pid/线程即是在unix下看到的线程号。停止应用程序:db2"forceapplication(236)”db2“forceapplicationall”其中:该236是查看中的应用程序句柄。4.8查看本instance下有哪些databasedb2LISTDATABASEDIRECTORY[on/home/db2inst1]4.9查看及更改数据库head的配置请注意,在大多数情况下,更改了数据的配置后,只有在所有的连接全部断掉后才会生效。查看数据库head的配制db2getdbcfgforhead更改数据库head的某个设置的值4.9.1改排序堆的大小db2updatedbcfgforheadusingSORTHEAP2048将排序堆的大小改为2048个页面,查询比较多的应用最好将该值设置比较大一些。4.9.2改事物日志的大小db2updatedbcfgforheadusinglogfilsiz40000该项内容的大小要和数据库的事物处理相适应,如果事物比较大,应该要将该值改大一点。否则很容易处理日志文件满的错误。4.9.3出现程序堆内存不足时修改程序堆内存大小db2updatedbcfgforheadusingapplheapsz40000该值不能太小,否则会没有足够的内存来运行应用程序。4.10查看及更改数据库实例的配置查看数据库实例配置db2getdbmcfg更改数据库实例配制4.10.1打开对锁定情况的监控。db2updatedbmcfgusingdft_mon_lockon4.10.2更改诊断错误捕捉级别db2updatedbmcfgusingdiaglevel30为不记录信息1为仅记录错误2记录服务和非服务错误缺省是3,记录db2的错误和警告4是记录全部信息,包括成功执行的信息一般情况下,请不要用4,会造成db2的运行速度非常慢。db2环境变量db2重装后用如下方式设置db2的环境变量,以保证sp可编译将set_cpl放到AIX上,chmod+xset_cpl,再运行之set_cpl的内容db2setDB2_SQLROUTINE_COMPILE_COMMAND="xlc_r-g\-I$HOME/sqllib/includeSQLROUTINE_FILENAME.c\-bE:SQLROUTINE_FILENAME.exp-eSQLROUTINE_ENTRY\-oSQLROUTINE_FILENAME-L$HOME/sqllib/lib-lc-ldb2"db2setDB2_SQLROUTINE_KEEP_FILES=1db2命令环境设置db2=>listcommandoptionsdb2=>updatecommandoptionsusingCoff--或on,只是临时改变db2=>db2setdb2options=+c--或-c,永久改变4.13改变隔离级别DB2SETDB2_SQLROUTINE_PREPOPTS=CS|RR|RS|UR交互环境更改session的隔离级别,db2changeisolationtoUR请注意只有没有连接数据库时可以这样来改变隔离级别。4.14管理db\instance的参数getdbcfgforhead(db)getdbmcfg(instance)4.15升级后消除版本问题db2 bind@db2ubind.lstdb2 bind @db2cli.lst4.16查看数据库表的死锁再用命令中心查询数据时要注意,如果用了交互式查询数据,命令中心将会给所查的记录加了s锁.这时如果要update记录,由于update要使用x锁,排它锁,将会处于锁等待.首先,将监视开关打开db2updatedbmcfgusingdft_mon_lockon快照db2getsnapshotforLocksoncleardb>snap.logtablesbufferpoolstablespacesdatabase然后再看snap.log中的内容即可。对Lock可根据Applicationhandle(应用程序句柄)看每个应用程序的锁的情况。监视完毕后,不要忘了将监视器关闭db2updatedbmcfgusingdft_mon_lockoff六、DB2常用知识以下主要以DB27.X为基础的.以下的字符为小写.本文对DB2高手来说是不用看的.DB2产品的级别有那些?企业版的ENTERPRISEEDITION、工作组版WORKGROUPEDITION、企业扩展版ENTERPRISEEXTENDEDTION、个人版的PERSONALEDITION、卫星版的SATELLITEEDITION、微型版的EVERYPLACE可以连接到DB2数据库的产品有哪些?DB2客户端、DB2CONNECT、DB2DATAPROPAGATOR、DB2NET.DATA、DB2DATAJOINER、DB2RELATIONALCONNECT.WEBSPHERE应用服务器等DB2支持的通讯协议有哪些?TCP/IP、NETBIOS、APPG、IPX/SPX、NAMEPIPE等DB2客户端产品有哪些?DB2运行时间客户端DB2RUNTIMECLIENTDB2管理客户端DB2ADMINISTRATIONCLIENTDB2应用程序开发客户端DB2APPLICATIONDEVELOPMENTCLIENTDB2瘦客户端DB2THINCLIENT一个数据库是否可以安装在多个数据库服务器上?可以从哪个版本后存储过程可以用SQL语句来创建?7.1版后DB2提供哪些关系扩展器?文本扩展器TEXTEXTENDER图象扩展器IMAGEEXTENDER音频扩展器AUDIOEXTENDER视频扩展器VIDEOEXTENDER空间数据扩展器SPATIALEXTENDERXML扩展器XMLEXTENDER网络搜索扩展器NET.SEARCHEXTENDERWINDOWS和OS/2环境下的DB2安装目录结构?用SETUP.EXE来安装\SQLLIB安装的根目录,包括README文件\SQLLIB\ADSM包含ADSTAR分布式存储管理器文件\SQLLIB\BIN包含DB2工具的可执行文件\SQLLIB\BND包含DB2工具的绑定文件\SQLLIB\CC包含运行控制中心所需的文件\SQLLIB\CFG包含默认的系统配置文件\SQLLIB\CONV包含代码页转换表文件\SQLLIB\DB2默认的实例目录\SQLLIB\DB2DAS00缺省的DB2管理服务器目录\SQLLIB\DOC包含DB2联机手册\SQLLIB\FUNCTION默认的用户自定义函数目录\SQLLIB\FUNCTION\UNFENCED默认的非隔离用户自定义函授目录\SQLLIB\HELP联机帮助文件\SQLLIB\JAVADB2所需的JAVA类库JAVA12包含JDK1.2的支持程序\SQLLIB\MISC包含HTML搜索服务器文件\SQLLIB\MSG\PRIME包含信息文件\SQLLIB\QP包含QUERYPATROLLER的客户端文件\SQLLIB\SAMPLES包含样例程序和样例脚本\SQLLIB\SPMLOG包含DB2同步点管理器日志文件\SQLLIB\THNSETUP包含瘦客户端安装文件UNIX和LINUX环境下的DB2安装目录结构?用DB2SETUP.EXE来安装安装的根目录下还将创建以下目录:README安装的根目录,包括README文件ADM包含系统管理工具文件ADSM包含ADSTAR分布式存储管理器文件BIN包含DB2工具的二进制可执行文件BND包含DB2工具的绑定文件CC包含运行控制中心所需的文件CFG包含默认的系统配置文件CONV包含代码页转换表文件DOC包含DB2联机手册FUNCTION默认的用户自定义函数目录FUNCTION\UNFENCED默认的非隔离用。远T搴谀柯?lt;BR> INSTALL包含安装程序INSTANCE包含实例脚本JAVADB2所需的JAVA类库LIBDB2库文件MAP包含DB2CONNECT使用的映射文件MISC包含HTML搜索服务器文件SAMPLES包含样例程序和样例脚本MSG\$L包含DB2信息文件AIX下用哪个命令来安装DB2?INSTALLP命令同一操作系统下可以安装多个DB2数据库?可以的如何停止实例?DB2STOP如何启动实例?DB2START[page]如何修改注册项的值?DB2SET可以修改如:设定当前实例的一个参数DB2SETPARAMETER=VALUE设定一个全局级的参数DB2SETPARAMETER=VALUE-G(小写)查看能在配置文件注册表中设置的所有变量的列表DB2SET-LR(小写)如何在CLP执行操作系统的命令?在命令前加"!"作为前缀DB2=>!DIRC:\在CLP中命令过长怎么办?用”\"作为续行符号如何获得DB2的命令的语法相关信息?DB2?显示所有DB2命令DB2?COMMAND显示命令信息DB2?SQLnnnn显示这个SQLCODE的解释信息DB2?DB2nnnn显示这个DB2错误的解释信息如何查看当前CLP的设置?DB2=>LISTCOMANDOPTIONS如何更新当前CLP会话的特定项设置?DB2UPDATECOMMANDOPTIONSUSINGOPTIONS...COMMANDWINDOWS可以通过哪个命令调用?DB2CMD命令管理服务器的默认名为?UNIX下为DB2AS、WINDOWS下为DB2DAS00常用管理DB2服务器实例的命令?DB2ADMINSTART启动DB2管理服务器实例DB2ADMINSTOP停止DB2管理服器实例DASICRTUNIX下创建DB2管理服务器实例DASIDROPUNIX下删除DB2管理服务器实例DB2ADMINCREATEWINDOWSOROS/2下创建DB2管理服务器实例DB2ADMINDROPWINDOWSOROS/2下删除DB2管理服务器实例DB2GETADMINCFG显示DB2管理服务器的配置参数DB2UPDATEADMINCFG修改DB2管理服务器的配置参数DB2RESETADMINCFG将DB2管理服务器的配置参数设为默认值DB2目录分为哪几种?系统数据库目录、本地数据库目录、节点目录、DCS目录、管理节点目录如何查看系统数据库目录?LISTDBDIRECTORY如何查看数据库服务器目录?LISTNODEDIRECTORYDB2实例的服务器的默认端口是?50000、服务器名称为DB2CDB2DB2UDB服务器端的认证类型有?SERVER、SERVER_ENCRYPT、CLIENT、DCE、DCE_SERVER_ENCRYPT、KERBEROS、KRB_SERVER_ENCRYPTDB2客户端的认证类型有?SERVER、SERVER_ENCRYPT、DCS、DCS_ENCRYPT、CLIENT、DCEDB2中有哪几种类型的权限?SYSADM系统管理权限、SYSCTRL系统控制权限、SYSMAINT系统维护权限、DBADM数据库管理权限、LOAD对表进行LOAD操作的权限不能通过GRANT授权的权限有哪种?SYSAM、SYSCTRL、SYSMAINT要更该上述权限必须修改数据库管理器配置参数表的类型有哪些?永久表(基表)、临时表(说明表)、临时表(派生表)51.安装DB2默认的事例名称是?在WINDOWS或OS/2中默认的是DB2在LINUX或UNIX环境下默认的是DB2INST152.安装后的默认帐户是?在WINDOWS或OS/2中默认的是DB2ADMIN在LINUX或UNIX环境下默认的是DB2AS53.事例的类型有哪些?CLIENT(客户)、STANDALONE(独立的)、SATELLITE(卫星)、EEDB2、EEE一个数据库至少包括哪些表空间?一个目录表空间、一个或多个用户表空间、一个或多个临时表空间[page]根据数据与存储空间之间移动的控制方式不同,分哪两种表空间?系统管理的空间(SMS)、数据库管理的空间(DMS)81.表的类型有哪些?基本表、结果表、概要表、类型表、子类型、子表、声明的临时表、系统临时表DB2数据库监控的两个组成部分?快照监控(SNAPSHOTMONITOR)W返回特定时间点的数据库活动的快照.事件监控(EVENTMONITOR)记录事件发生的数据.系统监控的数据元素类型?计数器(COUNTER)记录活动发生的次数.测量(GAUGE)测量条目的当前值.水线(WATERMARK)从监控来元素达到的最大或最小数值.信息(INFORMATION)监控活动的参照类型细节.时间点(TIMESTAMP)活动发生的日期时间.时间(TIME)返回一个活动花费的时间.DB2的SQL语句的类别?DCL:数据控制语言,提供对数据库对象的访问权限.DDL:数据定义语言,创建,修改,删除数据库对象的.DML:数据操纵语言,用来插入,更新,删除数据的.[page]DCL的权限有哪些?CONTROL权限:如果用户创建一个对象,则改用户能完全访问该对象.GRANT语句将权限授予给用户.REVOKE语句撤销一个用户的权限.DDL有哪些?CREATE、DECLARE、ALTER、DROP等、DML有哪些?INSERT、SELECT、UPDATE、DELETE等DB2有没有布尔类型?没有如何查询DB2的内置函数?自带文档ADMINISTION-->SQLREFERENCE-->FUNCTIONS内自己写的DB2常用基本命令1:查询DB2错误号的详细解释windows平台:db2_?_sql1009(错误号是1009)aix平台:db2_"?"_sql1009(错误号是1009,因为在AIX上,问号是系统特殊字符,所以需要通过双引号转义)2:查询在DB2CLP中可以试用的命令db2_?3:查询某一个表空间所使用的数据容器分布第一步:查询表空间的ID号db2_list_tablespaces第二步:查询某一个表空间所使用的数据容器db2_list_tablespace_containers_for_12 ("12"是某一个表空间的ID号)DB2数据库设计和最高性能原则数据压缩DB2提供了压缩表空间或分区内数据的功能。通过指定 CREATETABLESPACE(创建表空间)语句中的COMPRESSYES(压缩许可)选项,之后在表空间上同时执行LOAD或REORG实用工具集,即可完成该功能。数据的压缩是通过用更短的串来替换频繁出现的字符串实现的。系统还创建了一个字典,包含了原始字节串和它们的替代串之间的映射信息。一定数量的CPU资源被用于在执行数据存储对其进行压缩,之后,当外部存储设备读取时,数据又被解压缩。然而,数据压缩也能够提供性能方面的好处,因为更多的数据存储在更小的空间内(在DASD上和缓冲池中);同未经压缩的数据相比,这样可以产生更少的同时读取、更小的I/O等。接下来是当试图决定是否压缩一个表空间或分区时,需要考虑的一些事情:行的长度:行越长(尤其是在接近页的尺寸时)压缩的有效性就越低°DB2的行不能够跨页,当一页上有多于一行的情况时,你也许不能获得足够的压缩。表的尺寸:对于较大的表,压缩具有较好的效果。对于很小的表,压缩字典的大小8KB到64KB)可能会抵消压缩节省下的所有空间。数据中的模式:对于一个特定的表空间或分区,数据中重复出现的模式的频率,决定了压缩的效果。含有大量重复字符串的数据能够获得显著的压缩效果。压缩估计:DB2提供了一个单独的实用工具集,DSN1COMP,它可以用来测定数据压缩将有怎样的效果。想获得有关运行该使用工具的额外信息,请参考DB2实用工具集指南和参考手册。处理成本:在压缩和解压缩DB2数据时,会消耗一些CPU资源。如果你用IBM的同步数据压缩硬件特征,所消耗的CPU资源将比利用DB2软件仿真程序低得多(当DB2启动时,这决定了硬件压缩特征是否可用)。更好的字典:当用LOAD使用工具集来建立压缩字典时,DB2用户用最初载入的n行(n取决于你能够压缩的数据量)来决定字典的内容。REORG采用取样技术来建立字典。它不仅使用最初载入的n行,还在实用工具执行UNLOAD(未载入)阶段的剩余时间里继续对数据行采样。通常情况下,我们推荐你在自己的特定环境下,压缩那些DB2表空间和分区,这将会使你的环境受益;因为在更小的空间内存储更多的数据的性能优势,几乎总是在价值上超过压缩和解压缩数据所消耗的CPU资源。载入大表在处理大批量数据时,将数据初始载入表中可能会对系统性能产生挑战。为了在载入过程中实现并行性,你可以手动创建多个LOAD作业,每个分区建一个;或者作为另一个选择,你可以在一个LOAD程序中载入多个分区。每个分区都延伸至I/O子系统,这种方式可以更容易地实现最理想的并行性。为了使性能最优化,在LOAD语句中指定SORTKEYS参数也很重要。这个参数指示DB2将索引方法传递给内存中的分类程序,而不是将关键字写入或者再次读取DASD上的排序任务文件。SORTKEYS也能够实现载入和分类之间的交迭,因为分类是作为一个独立的任务运行的。还有一些关于载入大表的额外的建议,如下:一次LOAD一个表。如果可能的话,为你预期的任务赋予较高的优先级,来获得最高的消耗时间。在系统综合体上分配工作。将二级索引分解为小段,以便获得并行性(见PIECESIZE内的讨论)。在数据的初始载入过程中,指定LOGNO(用于防止记录日志,它耗费了相当多的资源),在成功载入数据之后运行一个图像复制。自由空间考虑事项分配自由空间的主要目的,是为了将数据行保存在相同的物理序列中作为群集索引,这样一来将减少需要重新组织数据的频率。此外,较好的行聚簇将导致更快的读取访问和更快的行插入。但是,自由空间的过度分配又将导致DASD空间的浪费、每一个I/O传输的数据较少、缓冲池的利用效率较低,以及需要扫描更多的页。表空间和索引中的自由空间分配,由CREATE或ALTERTABLESPACE和CREATE或ALTERINDEX语句中的PCTFREE和FREEPAGE选项决定。PCTFREE在载入或者重新组织数据时,为DB2指示表空间或索引中有多大的百分比是闲置的。在插入新的行和索引条目时,DB2将利用那些自由空间。如果没有足够的自由空间在正确的页(即以正确的聚簇序列)上写入行或者索引条目,那么DB2必须将多出来的数据放在另外的页上作为代替。在越来越多的记录放置在物理序列之外的情况下,系统性能将会受到严重影响。FREEPAGE在载入或者重新组织数据时,为DB2指示一个整页成为自由空间的次数。例如,如果你将FREEPAGE确定为5,在每填满5页的数据之后,DB2将分配一整页的自由空间。如果你的表中的行大于半页,FREEPAGE将是很有用的,因为在这样的情况下,你不能在这一页中插入第二行。是否在你的表空间内定义自由空间,分配的数量又是多少,这些都主要取决于表空间中表的插入特性(删除活动性居于次要程度)。换句话说,向表中插入行有多大的频率,并且这些行插入的位置是在哪里?根据上述标准,四种主要的类别如下:只读表:如果在表上不会有任何修正,定义时就可以不分配自由空间。同样,也就不需要运行REORG实用工具集。随机插入:对于含有相当大数量已有行和相对较少插入行的动作的表,使用默认的PCTFREE(表为5,索引为10)是一个好的起始点。之后,用RUANSTATS来监视数据组织破坏的程度,并且结合你要求的运行REORG的频率,根据需要上调或下调PCTFREEo对于插入活动很频繁的表,你可能需要使用比默认值较高的PCTFREE的值。对于初始为空或只含有极少数行的表(例如,在一个新数据库部署的过程中),你也许需要确定一个非常高的PCTFREE值,并相当频繁地运行REORG,直到表中的行数比较多了。在表的末端插入:如果表中行的长度不增加,那么就没有必要分配自由空间,因为它们可以加在表的末端。而且既然它们是以物理聚簇序列的形式写入的,REORG也不需要了。但是如果表含有可修改的VARCHAR类型的列,或是如果表是压缩过的,那么行的长度有可能增加,这将使得一行被挤到另外一页上去。通过在表空间上执行RUNSTATS然后核查DB2目录表SYSIBM.SYSTABLEPART的NEARINDREF和FARINDREF列,你就能够确定这些。如果你的表变乱了,那么为表空间设定一个PCTFREE值,并且用RUNSTATS继续监视放错位置的行的数目。根据你观察到的数据和趋势,相应地调整你的REORG的频率和PCTFREE值。通过设定REORGTABLESPACE中的INDREFLIMIT和REPORTONLY选项,你就能够在更新后的DB2表中监视紊乱的数量和速度。插入一个热点:这是表具有很频繁的插入活动的情况,这种插入活动集中在一个位置(或多个位置)而不是正好处于表的末端。这可能是要应付的最困难的种类。试着增加PCTFREE的数值。如果插入保持在开头的段,行也不是很长,几行可以存储在同一页之内。FREEPAGE是在这种情形下另外的一个考虑。有必要严密监视表变乱有多么快,这样就可以在性能显著下降之前运行REORGo索引设计考虑事项索引是一个DB2对象(独立的VSAM数据集),它是从相应表中的一个或更多列中摘录出来的一系列有规则的条目。很多DB2专家主张为一个表空间建立恰当的索引,这也许是将访问DB2数据应用程序的性能最优化的惟一最有效的方法。几年前,在I/T中DASD的成本和空间是一个更重要的考虑因素。随着技术的发展,通过以特大硬盘为代价,加上更多索引(或增加现有索引的列)来减少I/O的折中方法,在这几年里越来越具吸引力。索引主要的性能优势表现在:为表中被请求的数据行提供直接指针消除了排序,如果结果集的请求顺序与索引相匹配的话避免了必须读取数据行,如果被请求的列全部包含在索引条目中的话分区索引当在DB2UDBV7中创建分区表空间时,DB2依照CREATEINDEX语句中的PART子句将分区中的数据进行划分。那个索引则成为所谓的分区索引,这种分区方法被称为受控索引分区。为了对索引进行分区,建议你选择不易改变的关键列。对这些列的更改可能使得一个行从某一分区移动到另外一个分区,从而导致性能下降。受控表分区是DB2V8的一个重要的特征。现在,当创建分区表时,分区界限的确定由CREATETABLE语句代替了原来的CREATEINDEXo在受控索引分区中,分区表的、分区索引和聚簇的概念全都结合在一起。而对于受控表分区,这三个概念是独立的。这就增加了灵活性,允许你去考虑更有潜力的设计方法;并且也因此增加了改善。82数据库及其应用程序性能的可能性。构建索引的时机CREATEINDEX(创建索引)CREATEINDEX语句使用户具有了这样的能力:立即构建索引,或者将构建推迟到更加方便的时间。如果你立即构建索引,将会对表空间进行扫描,这会占用相当长的时间。通过设定DEFER,你可以推迟索引的构建。无论什么时候,只要可能,在最初载入一个表之前创建表上的所有索引,因为LOAD实用工具集构建索引比CREATEINDEX过程更加有效。如果你需要在已存在(并且有很多数据)的表上创建一个索引,那么可以使用DEFER语句。稍后,你就可以用REBUILDINDEX实用工具集,它和LOAD实用工具集一样,是一种更加有效的填充索引的方法。PIECESIZE(片段尺寸)DB2UDBV5引进了一个新特征,它给了你一定的灵活性,从而可以将非分区索引NPI)分解为小段,并且控制组成索引空间的多个数据集的大小。分段的这种用法能够使一个NPI的索引页展开为多个数据集。片段的尺寸由CREATE或ALTERINDEX语句中的关键字PIECESIZE确定。PIECESIZE的值必然是两个强制值中的一个,其变动范围为最小256KB到最大64GB。常规表空间的默认值为2GB,大的表空间默认值是4GB。如果你的NPI有可能显著增长,那么选择相对较大的表空间。同样,在确定首要和次要的空间分配数值CREATEINDEX语句的PRIQTY和SECQTY选项)时,记住PIECESIZE的值。利用这一选项,可以通过发挥并行性来改善NPI的扫描性能。另一个优势是可以减少读取或更新过程中的I/O冲突。通过设定较小的PIECESIZE值,你可以创建更多的片段,因而对片段的位置有更好的控制。将片段置于独立的I/O路径,可以减少了访问NPI所需的SQL操作的冲突。理想的索引通过检查一个应用程序中的SQL语句,你可以建立一个假想的完美的索引。首先,索引所包括的所有列都是WHERE子句,这使得索引的审查可以用于将不合格的行拒于结果集之外。将这些列放在索引的开始。当在SQL语句上执行EXPLAIN时,这会使得MATCHCOLS的价值最大化。其次,确保索引以适当的顺序含有这些列(依照ORDERBY子句),从而可以避免进行排序。这可以在执行EXPLAIN时,通过检查PLAN_TABLE的所有不同的SORT*列来验证。最后,如果可能的话,将所有的列包含在索引的SELECT中,这样就不需要访问表中的行了。索引条目可以提供所有的请求数据。这将在EXPLAIN中以INDEXONLY=Y的方式表现出来。在很多情况下,实现如此理想的索引的代价太大了,或者说是不切合实际的,甚至是不可能实现的,因为所涉及的列的数量太大了。组成一个索引的列的数目在体系结构方面有限制,并且对于一个索引条目的总长也有限制(尽管这些限制实际上允许相当大的索引条目尺寸和灵活性)。此外,这也是出于索引维护成本的考虑。建立理想的索引可使查询性能获得极大提高,但是对于SQL写入DB2数据库(INSERT、UPDATE或DELETE)就有消极的影响。因此,你应该经常选择实现只包含WHERE和ORDERBY语句中涉及的列的索引。并行处理的考虑事项几年来,通过实现了并行处理的各种方法,DB2在数据访问方面的性能获得了改进。为了改进数据密集型只读查询的性能,DB2V3引进了查询I/O并行机制。在这种类型的并行性中,DB2充分利用了可用的I/O带宽,并使分区表空间中成为可能。利用这种方法,DB2使得一个查询中的多

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论