数据库调试
- 数据库调试是在进行了成功的数据库测试之后才开始的工作。它与数据库测试不同,测试的目的是尽可能多地发现错误,而调试的目的是进一步诊断和改正数据库中的潜在错误。
- 调试活动由两部分组成:
- 确定数据库中可疑错误的性质和位置。
- 对数据库的设计或编码进行修改,排除这个错误。
数据库调试的原则
- 因为调试活动由两部分组成,所以数据库的调试原则分成两组。
- 确定错误的性质和位置的原则
- 认真分析与错误征兆有关的信息。
- 避开死胡同。
- 只把调试工具当作辅助手段来使用。
- 避免用试探法,最多只能把它当作最后手段。
- 修改错误的原则
- 在出现错误的地方,很可能还有别的错误。
- 修改错误的一个常见失误就是只修改了错误的征兆或错误的表现,而没有修改错误的本质。
- 当心修正一个错误的同时有可能会引入新的错误。
- 修改错误的时候将迫使人们暂时回到数据库设计阶段。
- 修改源代码,不要改变目标代码。
数据库调试的步骤
-
加载调试数据
根据数据库需求分析的结果,确定一些常用事务(或是业务,或是某一具体处理),并且将它们所需要的数据(通常上百个元组)加载到数据库中。
-
运行:运行数据库系统。
-
评价
- 检查是否获得预期结果。
- 如果不能获得预期结果,则
-
检查数据库系统模块、数据库存储过程和触发器的逻辑、SQL语句语法是否存在问题。若有,则修正后重新调试。
-
若没有问题,则检查数据库模式(基本表、视图等的结构),分析加载的数据是否与数据库需求分析的要求相吻合,若不吻合,则修正后调试,直到能获得满意结果为止。
- 若数据库模式描述不正确,就要返回到数据库逻辑设计阶段,进行逐级修正。
- 若已加载数据不正确,就要对它们进行必要的修正,然后重新调试。
-
如果获得预期结果,但是时间、空间不符合要求,则
- 进行评价后处理:为节省时间,在空间允许的情况下,用合并、缩短存取路径的方法进行数据库逻辑结构的变通。为节省空间,在响应时间允许的情况下,进行数据“分离”,当然也是对数据库逻辑结构的变通。
- 如果设计者对逻辑模型,无论如何“变通”都不能满足时间、空间的要求,那么这就说明系统选型不当,这意味着数据库需求分析与可行性论证工作开展得不充分。
- 一旦遇到这种情况,只能做最坏的处理:将原来的应用分解成更小的应用,并且使这种小应用所涉及的关系、数据更少。这当然是一项复杂的工作,不仅要修改模式、子模式,并且还要修改应用程序,以此来弥补由于数据库需求分析与可行性论证不足所带来的缺陷。
数据库调试的方法
数据库调试的关键在于判断数据库系统内部的错误位置及原因。为此,可以采用以下方法:
-
强行排错:这是目前使用较多,效率较低的调试方法。它不需要过多的思考,比较省事。例如:
- 通过打印全部内存来排错。
- 在模块特定部位设置打印语句来排错。
- 利用SQL语言的调试功能或专门的交互式调试工具来排错。
-
回溯法排错
这是在小程序中常用的一种有效的排错方法。一旦发现了错误,人们先分析错误征兆,确定最先发现“症状”的位置。然后,人工沿程序的控制流程,逆向追踪源程序代码,直到找到错误根源或确定错误产生的范围。
-
归纳法排错
归纳法排错的基本思想是:从一些线索(错误征兆)着手,通过分析它们之间的关系来找出错误。归纳法排错步骤大致分为以下4步:
- 收集有关的数据。
- 组织数据。
- 提出假设。
- 证明假设。
-
演绎法排错
演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。演绎法主要有以下4个步骤:
- 列举所有可能出错原因的假设。
- 利用已有的测试数据,排除不正确的假设。
- 改进余下的假设。
- 证明余下的假设。