WEB开发网
开发学院数据库DB2 浅谈DB2数据库的故障处理及最佳实践 阅读

浅谈DB2数据库的故障处理及最佳实践

 2007-05-20 16:20:36 来源:WEB开发网   
核心提示: 查看 sql.exp可以看到这个sql语句的执行成本,如果确认该语句有问题,浅谈DB2数据库的故障处理及最佳实践(6),可以使用db2advis来通过建索引的方法来优化该语句db2advis –d <dbname> -i sql.in如果通过创建索引无法优化该语句,

查看 sql.exp可以看到这个sql语句的执行成本。

如果确认该语句有问题,可以使用db2advis来通过建索引的方法来优化该语句

db2advis –d <dbname> -i sql.in

如果通过创建索引无法优化该语句,一般只能从业务角度优化。

3.如果发生锁的问题如何处理

发生锁的问题,一般有两种情况,一是锁等待,二是死锁。首先检查数据库配置参数locktimeout,该参数一定不能设为-1,因为会引起某些应用无限期的等待。

可以通过快照来确定数据库发生的问题是哪一种。

db2 get snapshot for db on <dbname>

查看输出中的下列内容:

Deadlocks detected             = 0
Lock Timeouts               = 0

如果发生了死锁,可以通过创建死锁监视器来分析产生死锁的原因,命令如下:

mkdir /tmp/dlmon
db2 connect to <db>
db2 create event monitor dlmon for deadlocks with detail write to file ‘/tmp/dlmon’ replace
db2 set event monitor dlmon state 1
…..等有死锁发生后
db2 set event monitor dlmon state 0
db2evmon –d /tmp/dlmon >/tmp/dlmon.out

分析/tmp/dlmon.out文件就可以找到造成死锁的信息,结合应用就可以找到造成死锁的原因了。

四、应用开发与数据库有关的问题

1.与64位实例数据库问题

目前随着硬件的升级,64位实例数据库开始广泛使用。

有些人担心数据库使用64位以后,对程序的运行很大,因此不愿意使用64位的数据库,实际上64位数据库对客户的应用影响非常小,所以建议如果资源充足,尽量使用64位实例的数据库。

可以通过创建一个32位实例的客户端,然后通过客户端来使用64位实例数据库的方法来将64位的问题完全忽略。

如果使用java 存储过程或自定义函数,64位实例数据库需要安装64位的JDK。

2.从DB2 V7移植程序到V8有关问题

sqlc的应用程序中,数据类型long在V8中需要改成sqlint32,否则编译无法通过。如果确定long类型的数据长度与平台无关,也可以在编译时,指定LONGERROR NO选项。

在编译sqlc程序时可能会遇到sql20230的错误,原因是在V8中不允许在call中使用主机变量,将执行语句改成动态sql后,可以解决该问题。

在执行存储过程时,遇到sql0433的错误,原因同上,将call 存储过程的语句改成动态调用即可。

3.Java程序问题

编写良好的程序是避免产生问题的关键。对JAVA程序有如下建议,一定要用数据库的连接池;在执行大量的sql语句时使用prepared statement。

结束语

本文描述常见的数据库故障,并给出了简单有效的解决方案。对某些技术问题,如命令的使用没有详细介绍,当需要时可以查阅DB2相关的文档。

上一页  1 2 3 4 5 6 

Tags:DB 数据库 故障

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接