SQL-7

  • 格式:doc
  • 大小:135.50 KB
  • 文档页数:29

第二十章测试这章介绍如何为应用程序中的SQL语句建立一个测试环境,及怎样调试程序。

20.1 建立测试环境测试应用程序必须做以下事情:授权。

你需要有建立表和视图,访问SQL数据及运行程序的权限。

测试数据结构。

如果要在表和视图中更改、插入或者删除数据,应该测试数据去鉴定程序的运行。

如果程序仅仅从表和视图中获得数据,那么在测试程序时应考虑用产品级数据,建议使用CL命令STRDBG及UPDPROD(*NO)可以保证产品级数据不会改变。

详细内容请看CL 程序设计手册。

测试输入数据。

测试程序用的输入数据的有效性及所想要的输入可能的条件,如果输入数据无效就不能够保证输出数据有效。

如果程序验证输入数据有效,包括验证有效数据和无效数据,那么处理有效数据,将无效数据查出来。

可在后续测试中刷新数据。

为了彻底地测试程序,应尽可能的使用更多的途径来测试程序。

例如:用输入数据迫使程序运行到其每个分支。

检查结果,例如程序要更新一行,要选择这一行来看更新是否正确。

一定要测试程序的错误例程,再用输入数据使程序尽可能多的接触到可能存在的错误。

测试程序用的编辑和有效的例程。

向程序提供尽可能多的不同组合的输入数据以便尽可能地验证,是否正确编辑数据的有效性。

20.1.1 设计测试数据结构要测试访问SQL数据的应用程序,可以生成测试的表和视图:测试现存表的视图。

如果应用程序不是修改数据且数据在一个或多个产品级表中存在,那么应该考虑使用现存表的视图。

建议你使用SRTDBG命令及UPDPROD(*NO)参数来保证产品级数据不会改变。

测试表。

当应用程序生成、修改或者删除数据时,可用包含测试数据的表来测试应用程序。

可用CL命令CRTDUPOBJ来生成一个测试表或索引的复本。

20.1.1.1 权限在建立一个表之前,你必须有建立表和使用表所在集合的权限,另外也必须有权建立和执行你想要测试的程序。

如果想使用现存的表和视图,必须有权访问这些表及视图。

如果想建一个视图,必须有权建立视图和有权使用该视图所依赖的每个表,详细信息请看AS/400 DB2 SQL参考。

20.2 测试SQL应用程序测试SQL应用程序有两段:程序调试段和性能验证段。

20.2.1 程序调试段这段保证SQL查询是正确的,并且程序产生正确的结果。

调试有SQL语句的程序和没有SQL语句的程序,大部分是一样的。

但是,当SQL语句在调试方式下运行时,数据库管理器把运行SQL语句的信息放到作业日志中,这个信息指出SQL语句的SQLCODE。

如果语句运行成功,那么SQLCODE的值为零,并发送完成信息,负的SQLCODE导致诊断信息,一个正的SQLCODE表示消息信息。

信息是用SQL前缀的四位代码或者是用SQ前缀的5位代码,例如,-204的SQLCDOE的信息为SQL0204,30000的SQLCODE信息为SQ30000。

和SQLCODE相关的是SQLSTATE,SQLSTATE是在SQLCA提供的返回码,它指出不同于IBM 关系数据库产品的一般的错误条件。

不同的数据库产品的相同的错误条件可以产生相同的SQLSTATE,相同的错误条件却不能产生相同的SQLCODE。

在确定从AS/400系统非DB2关系数据库操作中返回的错误时,这个返回码特别有用。

对于非ILE的调试程序在调方式引用的高级语言语句号必须从编译清单中获得,而对于ILE调试程序,应规定DBGVIEW(*SOURCE)做预编译,然后用源码级调试。

SQL总是把负的SQLCODE和非+100的正返回码信息放到作业日志中,而不考虑它是否在调试方式下。

20.2.2 性能验证段这段测试鉴定索引的可用性及用数据库管理允许的查询方式,在预期的响应时间能否解决查询。

一个SQL应用的性能依赖于访问表的属性,如果使用小表,响应查询的时间不会受索引的影响,但当你用大表对数据库运行相同查询,而没有相应的索引,查询的响应时间就会很长。

测试环境应该尽量地与产品环境相似。

测试集合中的表应用产品集合中有相同名称和结构。

在这两个集合中,表上应有相同的索引,表中的行数和值都应该类似。

20.2.3 SQL性能验证使用的CL命令SQL性能验证可用下列命令:CHGQRYA:修改查询属性命令可以防止用户过长的查询,可用来设置QRYTIMLMT参数来避免启动一个查询后时间大于指定时间的查询,它停止建立临时索引和其他资源集中的查询操作。

由查询时间限制在作业日志中生成的性能信息,即使未在调试状态,也会取消查询。

详细内容请看本书第二十一章。

DSPJOB:有OPTION(*OPNF)参数的DSPJOB命令,用来显示在一个应用程序运行时使用的索引和表。

有OPTION(*JOBCLK)的DSPJOB命令,用来分析目标和行锁采用,它显示目标和锁定的行和占有此锁作业的名称。

有OPTION(*CMTCTL)DSPJOB命令,显示程序运行的隔离级,在一个交易中锁定的行数和待处理的DDL功能。

显示的隔离级是缺省的隔离级,实际的隔离级,任何SQL程序都可用,是用CRTSQLxxx命令中的COMMIT参数规定的。

PRTSQLINF此命令允许打印一个嵌入程序中的有关SQL语句的信息、SQL软件包或服务程序中的SQL语句信息。

信息包括:SQL语句,运行语句所使用的访问计划和用在预编译命令中的参数清单。

详细内容请看AS/400 DB2 CL命令一书的附录D。

TRCJOB用来获得运行SQL语句程序的跟踪信息。

跟踪作业输出列出为每个SQL语句打开处理初始数据库时所用的索引和文件,及运行每个SQL语句的处理单元和使用的页资源。

20.2.4 性能信息可以分析由数据库管理提供的放在工作日志中的SQL语句的功能和结构。

这个信息是在调试方式下由SQL程序或者是交互SQL发出的,适当时数据库管理可以发送任何下列信息,变量(&1,&x)是替代变量,包含目标名或者其它替换值。

这些信息是:_ CPI4321 Access path built for file &1._ CPI4322 Access path built from keyed file &1._ CPI4323 The OS/400 query access plan has been rebuilt._ CPI4324 Temporary file built for file &1._ CPI4325 Temporary result file built for query._ CPI4326 File &1 processed in join position &X._ CPI4327 File &1 processed in join position 1._ CPI4328 Access path &4 was used by query._ CPI4329 Arrival sequence access was used for file &1._ CPI432A Query optimizer timed out._ CPI432B Subselects processed as join query._ CPI432C All access paths were considered for file &1._ CPI432D Additional access path reason codes were used._ CPI432E Selection fields mapped to different attributes._ CPI432F Access path suggestion for file &1._ CPI4330 &6 tasks used for parallel &10 scan of file &1._ CPI4331 &6 tasks used for parallel index created over file &1._ CPI4332 &1 host variables used in query._ CPI4333 Hashing algorithm used to process join._ CPI4334 Query implemented as reusable ODP._ CPI4335 Optimizer debug messages for hash join step &1 follow:_ CPI4336 Group processing generated._ CPI4337 Temporary hash table built for hash join step &1._ CPI4338 &1 Access path(s) used for bitmap processing of file &2._ CPI4341 Performing distributed query._ CPI4342 Performing distributed join for query._ CPI4345 Temporary distributed result file &4 built for query._ SQL7910 SQL cursors closed._ SQL7911 ODP reused._ SQL7912 ODP created._ SQL7913 ODP deleted._ SQL7914 ODP not deleted._ SQL7915 Access plan for SQL statement has been built._ SQL7916 Blocking used for query._ SQL7917 Access plan not updated._ SQL7918 Reusable ODP deleted._ SQL7919 Data conversion required on FETCH or embedded SELECT._ SQL7939 Data conversion required on INSERT or UPDATE.这些信息提供了查询如何运行的反馈,也指出可以令查询速度加快的一些方法。

这些信息包括分析产生信息原因的内容,引用的目标名和可能的用户回答。

信息发送的时间不是必需的,它指出完成相应功能的时间,一起发送的还有查询运行的开始时间。

对下列信息产生的原因和用户回答是简短的解释,实际的信息帮助是很完整的,可用来确定其含义及响应每个信息。