分类:
2008-04-14 12:55:25
来源:csdn 作者:胡晶玉 |
当你在使用数据库时,可能会遇到各种不同的问题。我认为解决问题的关键在于分清问题的种类,并清楚每种问题的解决办法。另外很多的数据库的问题都是由于错误的操作,错误的配置引起的,所以本文在解释如何处理问题时也会给出一些好的建议,来避免产生问题。本文重点介绍实用的方法。
对问题的分类有很多种方法,在本文中我我采用了两种分类方案。
第一种方案是是否有错误码。即发生错误时是否同时返回了错误码,错误码既包括执行命令的返回码,也包扩应用程序的返回码。
有返回码的错误解决方案是,在db2 CLP中运行 db2 ? SQLXXXX,然后根据对该问题的解释采取相应的解决方案。对没有错误码的问题,如数据库hang,CPU使用率过高等问题,解决问题的经验将非常重要,在本文中会有详细的说明。
根据错误码解决问题举例(在下文中,再出现需要用这种方法解决问题时将不再重复):
如在连接数据库时发生错误
错误码分为返回码(SQL0332N)和原因码(Reason Code "1"),针对不同的原因码有不同的解决方案
运行db2 ? sql0332
从输出种可以看到对于 reason code 1的解释是
所以可以通过设置代码页来解决这个问题
就可以成功连接了。
第二种分类方案是按照问题的范围和性质进行分类。分类如下:
1.数据库实例问题
2.数据库问题
3.数据库性能问题
4.应用开发与数据库有关的问题
下面对每一类问题进行详细说明。
一、数据库实例的问题
数据库实例问题可以分为两种情况
1.实例无法启动,运行db2start后,直接返回错误码,如SQL1042C。
如果根据错误码信息无法解决,可以尝试如下方案:
重新更新该实例,以root身份登录,
Tip:常见的产生实例无法启动的原因
数据库安装了新的补丁后没有运行db2iupdt
数据库文件的权限被改成了777,数据库文件的权限是有要求的,所以不能将所有的文件都改成777的权限
数据库实例文件被删除或损坏
主机名与db2nodes.cfg里记录的不一致
2.运行db2start时,hang在那里,既不报错,也无法启动实例
这种情况一般是由于实例没有正常的停止造成的,一般运行下列命令可以解决:
(将所有的与该实例有关的db2进程杀死 kill -9 然后重新启动实例。
3.数据库实例崩溃问题
遇到实例崩溃的问题,首先查看db2diag.log,根据里面的信息来分析数据库宕机的原因。再看db2dump目录中是否有trap文件。可以根据这些信息来分析原因,一般这类问题都需要IBM工程师协助解决。
宕机的原因可以分为两类,一类是数据库的BUG,即数据库的缺陷引起的,一般如果遇到了数据库的缺陷,都有临时的解决方案,或者通过安装最新的补丁来解决,对某些问题IBM也提供临时的修订来解决(需要付费)。另一类是操作系统,误操作等非产品问题导致的,对非产品问题导致的宕机尽量要避免。
Tip:常见的数据库宕机原因
系统的交换空间(paging space)用尽
数据库的某个进程被kill |