




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高性能应用部门系统服务产品线作者2011年11月培训目标通过本次培训,您将学习到以下内容1合理设计数据库结构2合理设计数据库表3正确设置数据库参数学习此次课程的目标通过优化数据库,操作系统,应用程序,优化系统目录24513ORACLE数据库体系结构事务绑定变量索引高效编码原则ORACLE数据库体系结构实例SGA重做日志缓存区共享池字典缓存库缓存DBWRSMONPMONCKPTLGWROTHERS用户进程服务器进程PGA控制文件数据文件归档日志文件参数文件密码文件重做日志文件数据库文件数据缓存区数据库管理系统后台进程内存结构大型池JAVA池系统参数SGA_MAX_SIZE指定例程存活期间所占用的系统全局区的最大内存大小。SGA_TARGET当前已分配的最大SGA。SGA_TARGET是自动管理内存时使用的,这样你就不用设置DB_CACHE_SIZE,SHARED_POOL_SIZE等参数,他们会根据需要自动的进行调整的。PGA_AGGREGATE_TARGET指定连接到例程的所有服务器进程的目标PGA总内存。缓存SESSION的变量以及SQL排序或者HASH连接等。PROCESSES指定可同时连接到一个ORACLESERVER上的操作系统用户进程的最大数量。SESSION_CACHED_CURSORS指定要高速缓存的会话游标的数量。系统参数OPEN_CURSORS指定一个会话一次可以打开的游标上下文区域的最大数量,并且限制PL/SQL使用的PL/SQL游标高速缓存的大小,以避免用户再次执行语句时重新进行语法分析。请将该值设置得足够高,这样才能防止应用程序耗尽打开的游标。DB_WRITER_PROCESSES一个例程的数据库写进程的初始数量。OPTIMIZER_MODE指定优化程序的行为。如果设置为RULE,就会使用基于规则的优化程序,除非查询含有提示。如果设置为CHOOSE,就会使用基于成本的优化程序,除非语句中的表不包含统计信息。ALL_ROWS或FIRST_ROWS始终使用基于成本的优化程序。内存结构和进程ORACLE的机制执行使用内存结构和进程。所有的内存结构中存在的数据库系统的计算机构成的主内存。进程是工作或任务,在这些计算机的内存工作。内存结构ORACLE会创建和使用内存结构来完成几项工作。例如,内存是用来存放正在执行的程序代码和用户之间共享的数据。与ORACLE相关的一些基本的内存结构系统全局区(包括数据库和重做日志缓冲区和共享池)和程序全局区。系统全局区(SGA)是一个由ORACLE分配的共享内存区域,其中包含一个ORACLE实例的数据和控制信息。一个ORACLE实例包含SGA和后台进程。SGA的一个实例启动时分配和释放的实例关闭时。启动的每个实例都有其自己的SGA。内存结构和进程程序全局区(PGA),是一个包含一个服务器进程的数据和控制信息的内存缓冲区。由ORACLE服务器进程启动时创建一个PGA。在PGA中的信息依赖于ORACLE配置。流程一个过程的控制线程“或在一个操作系统,可以执行一系列步骤的机制。一些操作系统使用方面的工作或任务。ORACLE数据库系统的进程有两个基本类型用户进程和ORACLE进程。创建和维护用户进程执行一个应用程序的软件代码(如一个PROC程序)或一个ORACLE工具(如SQLPLUS)。用户进程也管理与服务器进程通信。用户进程与服务器进程通信,通过程序界面。ORACLE进程被称为其他进程代表调用进程执行的功能。ORACLE会创建一个服务器进程来处理连接的用户进程的请求。甲骨文公司还建立了一套为每个实例的后台进程ORACLE实例ORACLE实例由ORACLE进程和共享内存需要访问数据库中的信息。该实例是由用户进程,ORACLE后台进程和共享内存用于这些进程ORACLE内存结构ORACLE使用共享内存用于多种用途,包括缓存数据和索引以及存储共享的程序代码。这种共享内存被分解成各个部分,或内存结构。与ORACLE相关的基本内存结构系统全局区(SGA)和程序全局区(PGA)。ORACLE实例数据结构关系模型主要有三个方面结构结构是定义良好的对象存储数据库中的数据。其中包含的结构和数据业务可以操纵。操作操作有明确的规定,允许用户操纵数据库的数据和结构的行动。对数据库的操作,必须坚持以预先定义的完整性规则。完整性规则完整性规则是允许哪些操作上的数据和数据库结构的法律管辖。完整性规则保护数据库中的数据和结构。ORACLE数据库的物理和逻辑结构。通过分离的物理和逻辑数据库结构,数据的物理存储进行管理,而不影响逻辑存储结构的访问。逻辑数据结构ORACLE数据库的逻辑结构是由一个或多个表空间数据库的模式对象(例如表,视图,索引,簇,序列,存储过程)逻辑存储结构,包括表空间,段和范围,决定了数据库的物理空间是如何使用的。模式中的对象和它们之间的关系的关系数据库设计表空间和数据文件表空间是主要的任何ORACLE数据库的逻辑存储结构。ORACLE数据库的可用的数据在逻辑上是存储在表空间和物理存储在相应的表空间关联的数据文件。下图说明了这种关系。虽然是密切相关的数据库,表空间,数据文件和段,他们有重要的区别数据库和表ORACLE数据库是由一个或多个逻辑存储单位称为表空间。集体数据库的数据存储在数据库的表空间。逻辑数据结构表空间和数据文件在ORACLE数据库中的每个表空间由一个或多个操作系统文件称为数据文件。一个表空间的数据文件存储在磁盘上的相关数据库中的数据。数据库和数据文件集体构成数据库的每个表空间的数据文件存储在数据库的数据。例如,最简单的ORACLE数据库有一个表,一个数据文件。一个更复杂的数据库可能有三个表空间,每两个数据文件(共6个数据文件)组成。模式对象,段和表如表或索引的架构对象被创建时,其细分市场中创建指定的数据库中的表空间内。例如,假设是在一个特定的表空间使用与该表选项的CREATETABLE命令创建一个表。此表的数据段的空间被分配在一个或多个指定的表空间的数据文件构成。一个对象的段只有一个数据库的表空间分配的空间。逻辑数据结构数据文件和表空间分配资源原则一个数据库被分成称为表空间的一个或多个逻辑存储单位,优化资源需要做到控制数据库中的数据的磁盘空间分配为数据库用户分配特定的空间配额通过联机或脱机的各个表空间的数据控制可用性执行部分数据库备份或恢复操作之间分配数据存储设备,以提高性能数据块扩展段数据块在粒度的最好水平,一个ORACLE数据库的数据存储在数据块(也称为逻辑块,ORACLE块,或网页)。ORACLE数据库的使用和分配ORACLE数据块的免费数据库空间。图4显示了一个典型的ORACLE数据块。扩展被称为逻辑数据库空间的一个新的水平在一定程度上。在一定程度上是一个连续的数据块,用于存储一个特定类型的信息分配的具体数量。段以上程度的逻辑数据库存储的水平,被称为段。段是一组已分配给一个特定类型的数据结构,并都在相同的表空间中存储的范围数据块扩展段逻辑结构数据块格式数据块结构头(通用和可变)头包含一般块信息,如块地址,段类型,如数据,索引,或回滚。虽然有些块的开销是固定大小(约107字节)的总块的开销大小是可变的。表目录块表的目录部分包含有这个块中的行的表的信息。行目录这部分块包含行有关信息块中的实际行(包括每行中的数据区的排片的地址)。一旦空间已分配块的标题行目录,这个空间是该行被删除时不回收。行数据这部分块包含表或索引的数据。行可以跨越块。数据库结构剩余空间自由空间是用来插入新行,需要额外的空间(例如,当更新一个结尾的空是一个非空值)的行的更新。发出的插入是否实际上发生在一个给定的数据块的空间管理参数PCTFREE和当前数据块中的自由空间量值的函数。用于处理事务的空间表,群集或索引的索引段数据段分配的数据块,也可以使用交易条目的自由空间。PCTFREE和PCTUSED1两个空间管理参数,PCTFREE和PCTUSED,允许开发人员控制的自由空间插入和更新数据块行使用。这两个参数只能在创建或更改表和簇(数据段)时指定。此外,也可以指定存储参数PCTFREE的创建或更改INDICIES(索引段)。PCTFREE参数是用来设置一个块的百分比预留可能的更新,现在已经在该块中的行(保持免费)。例如,假设您在CREATETABLE语句指定以下参数PCTFREE和PCTUSED2PCTFREE20这20用于此表中的数据段的每个数据块将保持自由和可能的更新现有的行,已经在每个块。后一个数据块已满,由PCTFREE的决定,该块不考虑新行插入到正在使用的块的百分比低于参数PCTUSED的。价值的实现,在此之前的自由空间的数据块只能用于在数据块中已经包含的行的更新。例如,假设您在CREATETABLE语句指定以下参数PCTUSED40在这种情况下,一个数据块用于本表的数据段不考虑任何新行插入,直到使用的空间量块下降到39或更少(假设,块的使用空间已先前达成的PCTFREE)。数据库物理结构不管是什么类型,在数据库中的每个段至少有一个程度持有其数据。这个意义上被称为段的初始范围。如果段的初始范围的数据块成为完全的,需要更多的空间容纳新的数据,ORACLE会自动分配一个该段的增量范围。增量程度上是随后在该段范围相同或递增的大小程度。在ORACLE数据库中的每一个非聚集表有一个单独的数据段,它的所有数据。间接通过在CREATETABLE/SNAPSHOT命令创建一个表的数据段。数据库物理结构存储参数表,快照,或集群控制的分配方式,一个数据段的范围。通过在CREATETABLE/快照/群集或ALTERTABLE/快照/CLUSTER命令设置这些存储参数,直接影响到数据检索和数据段的存储效率。ORACLE数据库的物理结构,是由构成数据库的操作系统文件。每个ORACLE数据库是由这些类型的文件一个或多个数据文件,重做日志文件的两个或两个以上的,以及一个或多个控制文件。数据库中的文件提供了实际的物理存储数据库中的信息数据库物理结构图目录14523ORACLE数据库体系结构事务绑定变量索引高效编码原则事务事务是使数据库和文件系统分离的一个特性。当在文件系统中写文件的时候遇到操作系统崩溃,文件就可能被破坏。有“日志”的文件系统能把文件恢复到前一个时间段的状态,但要想保持两个同步文件就不行了。如果更新了一个文件,在完成第二个文件更新之前系统出现故障,这两个文件将不同步。这就是事务存在的主要目的。事务的作用是能把数据库从一个一致的状态转移到另一个状态。当在数据库中提交工作时,能确定要么储存了所有的修改,要么什么都没有储存。也就是说,事务能保证各种实施数据完整性的规则和检查得以实现。事务应具备以下几个基本属性原子性一个事务要么完全发生,要么完全不发生。一致性事务把数据库从一个一致的状态转变到另一个状态。隔离性在事务提交之前,其他事务察觉不到事务的影响。持久性一旦事务提交,它是永久的。事务控制语句在ORACLE中没有专门的“开始事务”语句。事务开始于第一条修改数据的语句。利用COMMIT和ROLLBACK语句结束事务。如果没有提交或回滚而正常推出SQLPLUS会话,SQLPLUS将假定用户想要提交工作。在ORACLE中,要么全部提交包含在事务中的所有语句(永久的),要么所有语句回滚。对于单条语句也是如此,一条语句的失败不能使它前面执行的语句自动回滚。它们的工作是保存的,要么提交,要么回滚。以下是几种常见的事务控制语句COMMIT提交事务,使改变成为永久的。ROLLBACK回滚,结束事务,撤消任何没有提交的操作。这是通过读取存储在回滚段里的信息来实现的,并把数据库恢复到开始执行事务之前的状态。SAVEPOINT允许在事务中创建一个“标记点”。SETTRANSECTION允许设置不同的事务属性,也可以使用此语句来指示事务使用某个特定的回滚段。分布式事务ORACLE的一个特性就是能够透明地处理。对于单个事务,可以在不同的数据库里更新数据。提交时,要么提交全部实例的更新,要么都不能提交(全部回滚)。不需要额外代码来完成,只是简单地“提交”即可。在ORACLE中分布式事务的关键是数据库链接。数据库链接是一个数据库对象,用来描述如何从一个实例进入另一个实例。一旦设置了数据库链接,访问远程对象是很简单的。分布式事务中也存在一些限制不能通过数据库链接使用COMMIT。只能从发起事务的站点提交。通过数据库链接不能执行DDL(数据库动态链接)。不能通过数据库链接使用SAVEPOINT。简单讲,不能通过数据块链接使用任何事务控制语句。以上是对ORACLE体系结构和事务的介绍,在理解这两方面基本内容的基础上,下一节将进入ORACLE其他相关领域的讨论目录14532ORACLE数据库体系结构事务绑定变量索引高效编码原则绑定变量绑定变量是ORACLE用来提高查询速度,节省系统开销的一个重要手段。在复杂的SQL语句中,绑定变量对于系统性能的影响是非常大的。本节将通过实例说明如何绑定变量,并讨论与绑定变量有密切联系的数据库解析问题使用绑定变量绑定变量基本上就是将函数绑定到内部触发器上以读写该变量。它会告诉ORACLE“我会随后为这个变量提供一个值,现在需要生成一个方案,但我实际执行语句的时候,我会为您提供应该使用的实际值“。不合理使用绑定变量甚至不使用绑定变量是数据库应用程序问题的主要原因和伸缩性的主要障碍。ORACLE共享池(非常重要的共享内存数据结构)操作方法决定了开发人员使用绑定变量。拒绝使用绑定变量会使ORACLE数据库运行速度减慢,甚至完全中止。绑定变量在查询中,绑定变量是一个占位符。例如,要检索员工123的记录,可以执行查询SELECTFROMEMPWHEREEMPNO123还可以SELECTFROMEMPWHEREEMPNOEMPNO在典型查询中,查询员工123一次,可能再也不会查询。然后,再查询员工456,然后是员工789等等。如果再查询中使用常量,那每次的查询都是一个新查询。每次查询都要经过解析、限定(名称解析)、安全查询、优化等等,简单说来,每条语句在每次执行时都要经过编译。第二种查询使用了一个绑定变量EMPNO,它的值由查询执行时提供。这样的查询被编辑一次然后储存在一个共享池内(高速缓冲存储器),通过它查询可被再次找到或使用。这两种查询在运行和升级方面表现上的差异是巨大的,有时惊人。绑定变量从上面的例子可以看出,分析一个带有硬编码变量的语句(称作硬解析)将比重复用一条已经分析过的查询方案(称作软解析)花费更长时间并消耗更多资源。还不太清楚前者会在多大程度上减少系统所能支持的用户的数量。部分原因是由于对资源的消耗量增加了,但主要的因素是由于对数据库高速缓存的锁存机制绑定变量与解析上面的例子中提到ORACLE的硬解析和软解析,这两者都与绑定变量密切相关。当用户发出一条SQL语句交付ORACLE,在执行和获取结果前,ORACLE对此SQL将进行几个步骤的处理过程1、语法检查SYNTAXCHECK,检查SQL的拼写是否语法;2、语义检查SEMANTICCHECK,诸如检查SQL语句中的访问对象是否存在及该用户是否具备相应的权限;3、对SQL语句进行解析PARSE,利用内部算法对SQL进行解析,生成解析树PARSETREE及执行计划EXECUTIONPLAN。4、执行SQL,返回结果EXECUTEANDRETURN。软硬解析就发生于第三的过程。ORACLE利用内部的HASH算法来取得该SQL的HASH值,然后在LIBRARYCACHE里查找是否存在该HASH值;假设存在,则将此SQL与CACHE中的进行比较;假设“相同”,就将利用已有的解析树与执行计划,而省略了优化器的相关工作。这也就是软解析的过程。绑定变量与解析如果上面的2个假设中有任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。这个过程就叫硬解析。使用绑定变量是很重要的,因为当你向ORACLE数据库提交任何SQL或PL/SQL时,ORACLE首先搜索共享池,查看它是否已经存在。比如SQL查询,ORACLE会将查看那个查询是否已经解析并优化。如果发现了查询,就可以准备运行了。如果ORACLE没有在共享池中发现查询,就会对此查询进行解析、优化、安全检查等等,不仅耗费大量的CPU功率(CPU的处理时间比查询本身多了很多倍),而且在相当长的时间内锁住了一部分库缓存。这种现象在单用户查询时并不明显,但是解析查询的人越多,等待关闭库缓存的时间越长,系统就会渐渐地趋向停止。下面通过一个例子对绑定变量及解析做进一步说明。开始时,创建一个全局地临时列表SESS_EVENT,用于测量会话等待事件,等待了多少次,按001秒计算等待了多长时间。目录21543ORACLE数据库体系结构事务绑定变量索引高效编码原则索引分类B树索引有四种子类型分区索引、反转关键字索引、索引组织表和簇索引。位图索引基于函数的索引实际上是B树索引和位图索引的特例在ORACLE中还引入了下列与索引相关的术语本地索引与全局索引前缀索引与非前缀索引抽象数据块类型索引应用程序域索引BTREE索引B树索引在ORACLE中是一个通用索引。在创建索引时它就是默认的索引类型。B树索引可以是一个列的索引也可以是组合/复合(多个列)的索引。B树索引的结构以一个根结点(ROOT)开始,这个根结点是索引的起始点。根结点包含索引行(索引数据行),索引行含有索引关键值的范围和指向下一个索引块(称为树枝块)的ID号,树枝块依次含有索引行。它们包含了其他分枝块更细化的索引关键值的范围和树枝链中下一个块的ID号。每级分枝块被称为一个索引级别(INDEXLEVEL)。在索引树的最底层的块称为叶节点。叶节点块包含了索引值、ROWID,以及前一个和后一个叶节点的数据块的数据块地址(DBA)。到达一个叶节点必须经过的索引级数决定了找到需要的数据行所必需的I/O数量。在任何B树索引实现中,一个重要目标就是增加分支数、减少高度,从而保证对叶节点的访问被加速。主要应该注意的问题是INSERT操作、DELETE操作与UPDATE操作。在每个INSERT操作中,关键字必须被插入在正确的叶节点位置上。如果叶节点已满,就必须将叶节点拆分。拆分过程需要花费一定的开销,特别是进行物理I/O动作。此外,在拆分之前,ORACLE必须找到一个空闲块,用来保存这个拆分对于B树索引的应用,应注意以下几点准则避免对那些可能会产生很高的更新动作的列进行索引。避免对那些经常会被删除的表的多个列进行索引。避免对那些唯一度不高的列创建B树索引。这样的低选择性会导致叶节点稠密,从而导致因索引平铺而出现的大规模索引扫描。空值不应该存储在单列索引中。对于复合索引的方式,只有当某个列不空时,才需要进行值的存储BITMAP索引在位图索引中,ORACLE为每个唯一键创建一个位图,然后把与关键值所关联的ROWID保存为位图。B树索引与位图索引之间的最大区别是,前者能够支持具有高选择性地在列上创建索引,而后者能够提供的选择性就比较低。位索引所创建的是包含有每个特定关键字0、1值的二进制位映射流。由于这里需要进行的是位级二进制运算,因此大量的行可以被高速处理。当一个表内包含了多个位图索引时,ORACLE可以合并从每个位图索引得到的结果集,快速删除不必要的数据。同时,由于位图索引是以压缩形式储存的,因此可以节省大量空间。对于那些有较低基数的列要使用位图索引。这是因为它们相对于B树索引在叶子结点在占用空间上少得多,他们是同一个ROWID,事实上经过EXPLANPLAN输出显示多个位图索引合并,性能得到了显著的提高。但是位图索引有很多缺点位图索引被存储为压缩的索引值,其中包含了一个范围的ROWID,因此ORACLE必须针对一个给定值锁定所有范围的ROWID。这种锁定可能在某些DML语句中造成死锁。位图索引不能被声明为唯一索引。基于规则的优化器不会考虑位图索引。在创建位图索引之前,必须考虑以下问题表是否经常被这个列查询若不是,是否真正需要在这个列上建立一个索引表中有多少行对于小表(几千行)就没有必要建立索引,因为在这种情况下,进行表的完全扫描通常都足够快。列的基数是多少在低基数数据库中,位图索引是最合适的。总之,经过分析表明,最好不要在繁重的OLTP环境中使用位图索引函数索引基于函数的索引是在ORACLE815版本中加入的。基于函数的索引有索引计算的能力,并且能在查询中使用这些索引。简言之,允许大小写不敏感搜索和排序,复杂等式上的搜索,和通过执行自己的函数和操作符来有效地扩展SQL语言,然后进行。使用基于函数的索引的好处是易于实现并提供直接结果。在不改变任何逻辑或查询的情况下,用来加速现有的应用程序建立合理的索引以上是对于几种主要索引性能优劣的简要分析,并且介绍了几种索引的适用情况。从索引的结构和原理可以看出虽然ORACLE可以通过索引访问来避免对表的扫描,以此减少大量的I/O操作从而提高系统的性能,但同时也会增加系统的负担。主要有以下三方面创建和维护索引要耗费系统时间;存储索引需要额外的物理空间;对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这就降低了数据的维护速度。那么何时需要创建索引、创建多少索引、创建索引后如何不限制索引才能获得最大的性能是关键问题。索引并不是越多越好,针对不同情况要选择相适应的索引才能最大限度提升数据库的性能。ORACLE极大地增加了可使用的索引种类。但是,常规的B树索引在大多数情况下仍是最好的索引方案,只要对B树索引进行合理维护。但有时使用其他索引方案(例如位图索引),或使用B树索引的变种方案(如反向索引、分区索引、索引组织表),效果会更好目录21453ORACLE数据库体系结构事务绑定变量索引高效编码原则命名规则标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解说明标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。标识符名分为两部分规范标识符前缀后缀含义标识当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写含义标识命名规则,变量命名使用名词性词组,函数命名使用动词性词组。程序中严禁出现仅靠大小写区分的相似的标识符用正确的反义词组命名具有互斥意义的变量或相反动作的函数等考虑到习惯性问题,局部变量中可采用通用的命名方式,仅限于N、I、J等作为循环变量使用自己特有的命名风格,要自始至终保持一致,不可来回变化PROC服务编码规则检查数据库长连接,除基础域服务其余都用长连接。示例INTTPSVRINITINTARGC,CHARARGVSPUBLICDBLOGINNULL,NULL,“S1100CFM“,LABELDBCHANGERETURN0在服务启动时调用TPSVRINIT函数中连接数据库,在服务推出函数中断开数据连接VOIDTPSVRDONESPUBLICDBCLOSELABELDBCHANGEPROC服务编码规则SQL语句使用缩进和关键字对齐原则,SQL语句中出现的系统保留字、内置函数名、SQL保留字、字段名等都应大写,使其更易读且易于维护。不规范写法EXECSQLSELECTID_NO,SM_CODE,CONTRACT_NO,CUST_ID,RUN_CODE,BELONG_CODEINTOIDNO,SMCODE,CONTRACTNO,CUSTID,RUNCODE,BELONGCODEFROMDCUSTMSGWHEREPHONE_NOIPHONENO提倡写法EXECSQLSELECTID_NO,SM_CODE,CONTRACT_NO,CUST_ID,RUN_CODE,BELONG_CODEINTOIDNO,SMCODECONTRACTNO,CUSTID,RUNCODE,BELONGCODEFROMDCUSTMSGWHEREPHONE_NOIPHONENOPROC服务编码规则SQL语句出错判断,使用NOTFOUND、SQLOK等宏判断SQL语句是否正确执行ESQL使用自己的出错控制,不使用ESQL提供的统一出错控制,ESQL的出错一般设置为无效。EXECSQLWHENEVERSQLERRORCONTINUEEXECSQLWHENEVERSQLWARNINGCONTINUEEXECSQLWHENEVERNOTFOUNDCONTINUE属主变量都要放在SQL定义区统一定义。EXECSQLBEGINDECLARESECTIONCHARSSQL10241EXECSQLENDDECLARESECTIONPROC服务编码规则定义字符数组时,必须在内使用“1“形式说明字符数组长度与数据库字段长度相对应,对于今后扩展性比较强的字段,该字符数据长度可以适当增加,并使用”1”形式标识字符型字段数据提取出来后会自动补充0结束符不允许使用SELECT说明使用SELECT语句时,不允许使用SELECT,要使用明确的列名。目的是防止数据字段增加后的影响。INSERT必须指定插入的字段名。说明使用INSERT时,必须指定插入的字段名,主要是考虑以后表结构的变动。函数及表达式放在等号左边。说明为提高SQL执行效率,避免全表扫描,应将SQL语句中的数据库函数、计算表达式等放置在等号右边。不要在等号的左边。PROC服务编码规则游标使用结束后必须关闭。尽量避免循环OPEN_CURSOR。PROC程序中禁止出现用户名和明文密码。在获取输入参数时必须使用STRNCPY,不得使用STRCPY说明不使用STRCPYCUSTNAME,INPUT_PARAM0使用STRNCPYCUSTNAME,INPUT_PARAM0,SIZEOFCUSTNAME1注意对于目的变量CUSTNAME使用前进行初始化编写TEXUDO服务时输入输出参数的长度不能超过1000个字节编写TUXEDO服务时编写的返回值的数量不能超过50个;如果超过50个参数,参数按行放在第一列GPARM32_0中输出参数缓冲的内存分配,必须调用函数MEMORYALLOCATE32说明MEMORYALLOCATE32已经封装输出缓冲区的分配,并以做了容错处理,规定直接调用MEMORYALLOCATE32PROC服务编码规则一个TUXEDOSERVER中的SERVICE不能超过10个TUXEDO的错误代码和错误信息必须放在SVC_ERR_NO32和SVC_ERR_MSG32中,不能占用GPARM32_X的位置服务调试信息采用统一控制规则,对日志进行非类,分监控类、调试类等,原则上服务中不能出现PRINTF等语句UTYPE规范避免将多个智能指针指向同一块内存区域。错误示例UAUTOPTRUPTRAUINIT0/UPTRA为多层UTYPE结构UAUTOPTRUPTRBUINIT0UTSETSTRUCTUPTRB,0,UTGETSTRUCTUPTRA,0/UPTRB第0元素指向UPTRA第0元素内存区域说明智能指针UPTRA与智能指针UPTRB的第0元素均指向同一内存区域,当作用域退出时,智能指针UPTRA和UPTRB均会对该内存区域进行内存释放,首先释放后内存交还操作系统,再次对该区域释放将造成应用程序COREDUMP。正确方法UAUTOPTRUPTRAUINIT0/UPTRA为多层UTYPE结构UAUTOPTRUPTRBUINIT0UTSETSTRUCTUPTRB,0,UTCLONEUTGETSTRUCTUPTRA,0/拷贝UPTRA第0个元素内存区域至一块新内存区域,并将新地址赋值给UPTRB说明智能指针UPTRA与智能指针UPTRB的第0元素均指向不同内存区域,不会造成内存两次释放。UTYPE规范不可手动释放与某智能指针指向同一内存区域的UTYPE指针,但是指向新内存区域的UTYPE指针必须手动释放。示例说明UTYPEPUPTRANULL/非UTYPE智能指针PUPTRA/为PUPTRA赋值多层UTYPE结构UAUTOPTRUPTRBUINIT0UTSETSTRUCTUPTRB,0,PUPTRA/未用UTCLONE,PUPTRA与UPTRB第0元素指向同一内存区域说明因未使用UTCLONE进行内存拷贝,所以PUPTRA与智能指针UPTRB第0元素指向同一内存区域,不可使用UFREEPUPTRA对PUPTRA指向的内存区域进行释放,否则智能指针UPTRB对该内存区域进行自动释放时将产生两次内存释放,造成应用程序COREDUMP。UTYPEPUPTRANULL/非UTYPE智能指针PUPTRA/为PUPTRA赋值多层UTYPE结构UAUTOPTRUPTRBUINIT0UTSETSTRUCTUPTRB,0,UTCLONEPUPTRA/使用UTCLONE,UPTRB第0元素指向一块新内存区域说明因使用了UTCLONE进行内存拷贝,智能指针UPTRB第0元素指向的是新的内存区域,智能指针UPTRB退出作用域时自动释放该新的内存区域,PUPTRA指向的内存区域如不使用UFREEPUPTRA将不会得到释放,造成内存泄露UTYPE规范被调函数返回UTYPE指针时使用RELEASE方法,此时主调函数必须使用UTYPE指针或UTYPE智能指针进行接收。使用普通指针要注意内存释放在对UTYPE智能指针赋值使用前必须进行初始化。在对UTYPE普通指针赋值使用前必须保证上一次指向的内存区域得到释放UTYPE指针参数,不要直接使用UTCLONEUTYPE数据结构作为函数参数时不要使用RELEASE方法。除非该被调函数对该内存区域进行释放DBUG_ENTER和DBUT_RETURN在一个函数中必须成对出现使用原子函数要求复用原则,严禁在已有相同功能原子函数的情况下新建原子函数新建原子函数要求考虑复用原则,必须充分考虑SQL语句执行正确性及执行效率数据库操作编码规范减少子查询的使用子查询除了可读性差之外,还在一定程度上影响了SQL运行效率应尽量减少子查询的使用,采用其他效率更高、可读性更好的方式替代使用DECODE函数来减少处理时间使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表示例SELECTCOUNT,SUMSALFROMEMPWHEREDEPT_NO0020ANDENAMELIKESMITHSELECTCOUNT,SUMSALFROMEMPWHEREDEPT_NO0030ANDENAMELIKESMITH可以用DECODE函数高效地得到相同结果SELECTCOUNTDECODEDEPT_NO,0020,X,NULLD0020_COUNT,COUNTDECODEDEPT_NO,0030,X,NULLD0030_COUNT,SUMDECODEDEPT_NO,0020,SAL,NULLD0020_SAL,SUMDECODEDEPT_NO,0030,SAL,NULLD0030_SALFROMEMPWHEREENAMELIKESMITH数据库操作编码规范用UNION替换OR适用于索引列通常情况下,用UNION替换WHERE子句中的OR将会起到较好的效果对索引列使用OR将造成全表扫描注意,以上规则只针对多个索引列有效如果有COLUMN没有被索引,查询效率可能会因为你没有选择OR而降低在下面的例子中,LOC_ID和REGION上都建有索引高效SELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHERELOC_ID10UNIONSELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHEREREGION“MELBOURN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年江西三上数学期末学业水平测试试题含解析
- 2025-2026学年惠州市惠城区数学三年级第一学期期末质量跟踪监视试题含解析
- 2025-2026学年佛山市禅城区三上数学期末试题含解析
- 2024年宜宾县数学三上期末考试模拟试题含解析
- 2024年桓台县数学三上期末检测模拟试题含解析
- 主管护师必看2025年考试试题及答案
- 2025年医疗卫生系统试题及答案
- 2025年执业药师考试中常见错误试题及答案
- 2025年自考行政管理热题试题及答案
- 新技术应用执业医师考试试题及答案
- 三管感染的预防与控制
- 第21课《己亥杂诗(其五)》教学课件【知识精研】统编版语文七年级下册
- 消除艾滋病、梅毒和乙肝母婴传播项目工作制度及流程(模板)
- 2025届南通市重点中学中考生物模拟试题含解析
- 人教版数学五年级下册全册大单元整体教学设计
- 窝沟封闭课件
- 大数据平台建设及运营合作协议书
- 工程车驾驶员安全培训
- 第十单元 常见的酸、碱、盐 检测题(含答案)-2024-2025学年九年级化学人教版下册
- 业务合规培训
- 2025年高考语文一轮复习知识清单专题13:图文转换(学生版)
评论
0/150
提交评论