DB2故障处理的解决办法

合集下载

db2解决死锁的方法

db2解决死锁的方法

db2解决死锁的方法DB2是一种常见的关系型数据库管理系统,它被广泛应用于企业级应用程序中。

然而,随着应用程序的复杂性增加和并发访问的增加,死锁问题也变得越来越常见。

在本文中,我们将探讨一些使用DB2解决死锁问题的方法。

1. 死锁的定义和原因死锁是指两个或多个事务彼此等待对方持有的资源,从而导致所有事务无法继续执行的状态。

死锁通常发生在并发访问数据库时,其中一个事务正在使用某个资源,而另一个事务需要访问相同的资源。

死锁的发生原因可以归结为四个条件:互斥(资源只能被一个事务使用)、持有并等待(一个事务持有资源并等待另一个事务的资源)、不可剥夺(资源不能被其他事务抢占)、循环等待(多个事务形成循环等待资源)。

2. 使用锁机制避免死锁在DB2中,可以使用锁机制来避免死锁的发生。

锁是一种机制,用于协调并发事务对共享资源的访问。

DB2提供了两种类型的锁:共享锁和排他锁。

共享锁允许多个事务同时读取资源,但不允许写入资源;排他锁只允许一个事务同时读取或写入资源。

为了避免死锁,可以采取以下策略:- 在事务开始时,尽量将锁的范围缩小到最小,只锁定必要的资源。

- 在事务执行期间,尽量减少锁的持有时间,执行完操作后尽快释放锁。

- 避免循环等待,即事务在请求资源时按照统一的顺序进行,避免形成死锁的循环等待。

3. 设置适当的隔离级别DB2提供了多种隔离级别,用于控制事务之间的相互影响。

不同的隔离级别对并发访问的控制程度不同。

在选择隔离级别时,需要权衡事务的一致性和性能。

在避免死锁的角度考虑,可以选择较低的隔离级别,如读取已提交(Read Committed)。

较低的隔离级别可以减少锁的竞争,从而降低死锁的风险。

但同时,较低的隔离级别也可能导致数据不一致的问题,需要根据具体业务需求进行权衡。

4. 监控和诊断死锁DB2提供了一些工具和功能,用于监控和诊断死锁问题。

可以通过以下方式来实现:- 使用DB2的系统监控工具,如db2pd命令和db2top工具,可以实时查看数据库的锁和死锁情况。

DB2故障处理的解决办法

DB2故障处理的解决办法

解决问题的关键在于分清问题的种类,并清楚每种问题的解决办法。

另外很多的数据库的问题都是由于错误的操作,错误的配置引起的,所以本文在解释怎么样处理问题时也会给出一些好的建议,来避免产生问题。

本文重点介绍实用的方法。

对问题的分类有很多种方法,在本文中我我采用了两种分类方案。

第一种方案是是否有错误码。

即发生错误时是否同时返回了错误码,错误码既包括执行命令的返回码,也包扩应用程序的返回码。

有返回码的错误解决方案是,在db2 CLP中运行db2?SQLXXXX,然后根据对该问题的解释采取相应的解决方案。

对没有错误码的问题,如数据库hang,CPU使用率过高等问题,解决问题的经验将非常重要,在本文中会有详细的说明。

根据错误码解决问题举例(在下文中,再出现需要用这种方法解决问题时将不再重复):如在连接数据库时发生错误db2 connect to sampleSQL0332N There is no available conversion for the source codepage"1386" tothe target code page "819". Reason Code "1". SQLSTATE=57017错误码分为返回码(SQL0332N)和原因码(Reason Code "1"),针对不同的原因码有不同的解决方案运行db2 ? sql0332从输出种可以看到对于reason code 1的解释是……1 source and target code page combination is not supported bythedatabase manager.……所以可以通过设置代码页来解决这个问题db2set db2codepage=1386db2 terminatedb2 connect to sample就可以成功连接了。

db2 存储过程 异常处理 实例

db2 存储过程 异常处理 实例

一、概述DB2数据库是一种流行的关系型数据库管理系统,它支持存储过程的使用。

存储过程是一组预先编译的SQL语句,用于完成特定的任务。

在存储过程中,经常会涉及到异常处理,以应对可能出现的错误情况。

本文将以DB2存储过程异常处理为主题,结合实际案例,详细介绍在DB2数据库中如何进行存储过程异常处理。

二、DB2存储过程异常处理概述1. 存储过程异常处理的重要性在存储过程中,可能会发生各种异常情况,例如数据输入错误、数据查询失败等。

良好的异常处理机制可以保证存储过程的稳定性和可靠性,保障数据的完整性。

2. 异常处理的基本原则异常处理的基本原则是捕获异常、处理异常、并作出相应的反应,以确保存储过程能够正常执行或者给出相应的提示信息。

三、DB2存储过程异常处理实例下面将介绍一个实际的DB2存储过程异常处理的案例,以便读者更好地理解异常处理的具体操作。

假设有一个名为“get_employee_info”的存储过程,用于获取员工的信息。

在该存储过程中,可能会涉及到以下异常情况:如果输入的员工ID不存在,则需要给出相应的提示信息;如果查询员工信息失败,则需要进行异常处理。

在这种情况下,可以使用以下方法进行异常处理:1. 使用BEGIN ATOMIC和DECLARE CONTINUE HANDLER语句在存储过程的开头,使用BEGIN ATOMIC语句标识一个原子操作块,以确保事务的原子性。

在该块内部,使用DECLARE CONTINUE HANDLER语句来捕获异常,并对异常进行相应的处理。

具体代码如下:```sqlCREATE PROCEDURE get_employee_info (IN emp_id INT) BEGINDECLARE EXIT HANDLER FOR SQLEXCEPTIONBEGINROLLBACK; -- 回滚事务SIGNAL SQLSTATE 'xxx'SET MESSAGE_TEXT = '查询员工信息失败';END;DECLARE CONTINUE HANDLER FOR NOT FOUNDBEGINSIGNAL SQLSTATE 'xxx'SET MESSAGE_TEXT = '员工ID不存在';END;-- 查询员工信息的SQL语句SELECT * FROM employee WHERE id = emp_id;END```在上述代码中,通过使用DECLARE CONTINUE HANDLER语句捕获SQL异常,例如NOT FOUND异常,以及捕获一般的SQL异常(SQLEXCEPTION)。

DB2安装出错及解决方法

DB2安装出错及解决方法

DB2安装出错及解决方法1.在安装进度条到80%时,窗口直接关闭解决方法:检查杀软是否关闭,关闭后重装2.在安装进度条到80%时,出现错误提示为具有的端口"50000"的服务名称"DB2C_DB2"而更新系统上的服务文件时出错解决方法:打开C:\WINDOWS\system32\drivers\etc\,找到services用记事本打开写入如下信息DB2_DB2 60000/tcpDB2_DB2_1 60001/tcpDB2_DB2_2 60002/tcpDB2_DB2_END 60003/tcpdb2c_DB2 50000/tcp3.正常安装完毕,打开命令编辑器出现错误提示:DB2JA VIT:RC=9505解决方法:方法总结一:题记:WIN7下装DB2,启动任务中心、控制中心报DB2JA VIT:RC=9505。

解决方案:进入(计算机—>管理—>本地用户和组—>用户)把用户加入到DB2ADMNS或DB2USERS,即可解决。

方法总结二:DB2JA VIT : RC = 9505DB2JA VIT : RC = 9505 & SQL5005C System ErrorOn Windows Vista, if the "DB2JA VIT : RC = 9505" error occurs when DB2 starts. Try this to see if it resolves the issues for now: for the programs (CLP, CMD, CC), right click on the launching shortcut and select "Run as administrator".Upon reboot and logging in after the installation, this error might appear: SQL5005C System Error.To resolve this problem, add your user to the DB2ADMNS or the DB2USERS group.4.找不到SAMPLE正常安装完毕,一般会自动创建SAMPLE数据库,在命令行处理器中输入CONNECT TO SAMPLE时出现以下提示:SQL1013N 找不到数据库别名或数据库名称”SAMPLE”.SQlSTATE=42705解决方法:进入cmd命令提示符界面,然后进行如下操作后(这些命令的操作是删除残留的SAMPLE 数据库),你就可以重建SAMPLE数据库了D:\>;db2cmdD:\>;db2 drop db sampleSQL1013N 找不到数据库别名或数据库名"SAMPLE "。

关于DB2常见性能问题的解决参考

关于DB2常见性能问题的解决参考

关于DB2常见性能问题的解决参考关于DB2常见性能问题的解决参考最近⼀个项⽬在做性能测试时,在并发达到⼀定数后,DB2数据库资源占⽤很⼤,必须对数据库和应⽤进⾏优化。

该项⽬要求性能指标(CPU<70%,内存占⽤<70%,IO<60),按照⽹友介绍的经验,分别针对CPU、内存、IO进⾏问题排查和分析。

现将过程总结如下:⼀、CPU分析通过资源监视器查看⼀个或多个CPU 的使⽤率,确定确实存在CPU使⽤率⼀直居⾼不下的情况。

1、⾸先排除掉存在死循环的情况。

(并发下来后,CPU使⽤率会降下来)。

2、DB2占⽤CPU的主要⾏为有:语句编译、⼤量排序、DB2实⽤⼯具运⾏。

3、先查看是否有⼤量的语句编译:通过DB2的表函数MON_GET_WORKLOAD,可以查看到:select varchar(workload_name,30) asworkload_name,sum(total_cpu_time),sum(total_compile_proc_time),sum(act_rqsts_total),um(total_compilations),sum(total_act_time), sum(pkg_cache_inserts), sum(pkg_cache_lookups) fromTABLE(MON_GET_WORKLOAD('',-2)) as T group by workload_name如果compile_proc_time ⾼于5-10% 的total_cpu_time,并且pkg_cache_inserts/pkg_cache_lookups ⾼于4-5%,则数据库在语句编译上花费了太多的时间。

必须调⼤语句集中器STMT_CONC的⼤⼩。

采⽤逐步调⼤的⽅式来跟踪效果。

4、查看是否存在⼤量的SORT⾸先通过db2的快照,看是否存在⼤量的sort溢出Sort overflows/Total sorts * 100% 表⽰排序溢出百分⽐,通常情况下,该值应该⼩于3。

db2锁超时解决方案

db2锁超时解决方案

db2锁超时解决方案DB2是一种关系型数据库管理系统,用于存储和管理大量结构化数据。

在使用DB2时,经常会遇到锁超时的问题。

本文将介绍DB2锁超时的解决方案。

我们需要了解什么是锁超时。

在多用户并发访问数据库的情况下,为了保证数据的一致性和完整性,DB2会对需要修改数据的操作进行加锁。

当一个事务获取了一个锁并且没有释放时,其他事务要修改相同数据就需要等待该锁释放。

如果等待的时间超过了系统设置的锁超时时间,就会发生锁超时。

那么,如何解决DB2锁超时问题呢?1. 优化查询语句:锁超时通常是因为某个事务长时间占用了锁资源,导致其他事务等待超时。

优化查询语句可以减少事务执行时间,从而减少锁资源的占用时间。

可以通过添加索引、优化SQL语句等方式进行优化。

2. 提高锁粒度:锁粒度是指锁的范围,粒度越小,锁的冲突越少。

可以通过调整事务的隔离级别,减少锁的粒度,从而减少锁冲突。

但需要注意的是,锁粒度过小会增加锁的数量,可能会导致性能下降。

3. 使用乐观锁:乐观锁是一种乐观的并发控制方式,不会进行加锁操作,而是在更新数据时比较数据的版本号,如果版本号相同则更新成功,否则更新失败。

乐观锁可以减少锁的冲突,提高并发性能。

4. 分批处理数据:如果需要处理大量数据,并且有可能会引发锁超时问题,可以将数据分批处理,每次处理一部分数据,减少单个事务的执行时间,降低锁冲突的可能性。

5. 设置合理的锁超时时间:可以根据系统的实际情况,设置合理的锁超时时间。

如果锁超时时间设置过短,可能会导致正常的事务因为等待超时而失败;如果锁超时时间设置过长,可能会导致事务等待时间过长,影响系统的响应速度。

需要根据系统的负载情况和性能要求来进行调整。

6. 监控和诊断锁超时问题:通过DB2的性能监控工具,可以实时监控系统的锁超时情况,并对发生锁超时的事务进行诊断。

通过分析诊断信息,可以找到引发锁超时的原因,并进行相应的优化和调整。

DB2锁超时问题是在多用户并发访问数据库时常见的问题。

记录一次问题解决:DB2死锁解决办法(SQLCODE=-911,SQLSTATE=40001)

记录一次问题解决:DB2死锁解决办法(SQLCODE=-911,SQLSTATE=40001)

记录⼀次问题解决:DB2死锁解决办法(SQLCODE=-
911,SQLSTATE=40001)
(DB2的数据库)在做update更新的时候,发⽣了死锁。

后台报的错误为:SQLCODE=-911, SQLSTATE=40001
---------------------------------------
SQLCODE=-911, SQLSTATE=40001 错误的原因:是在执⾏update语句的时候发⽣了死锁
SQLCODE=-911, SQLSTATE=40001 解决⽅法:
---------------------------------------
然后我在CSDN上看到⼀个解决办法,成功搞定死锁
db2 命令⾏:
1、⽤管理员⽤户登录:db2 connect to 你的数据库名 user ⽤户名 using 密码
2、db2 "get snapshot for locks on 数据库名"
-------上⾯语句执⾏完成以后,你可以找到下⾯⼀段⽂字
应⽤程序句柄 = 689
应⽤程序标识 = *LOCAL.DB2.120711101108
序号 = 00001
应⽤程序名 = javaw.exe
CONNECT 授权标识 = DB2ADMIN
应⽤程序状态 = UOW 正在等待
3、db2 "force application(689)" 689就是上⾯查询出来的应⽤程序句柄
杀掉死锁进程。

DB2报错参考解决方案

DB2报错参考解决方案

DB2报错:SQL10007N Message "-1390" could not be retrieved. Reason code:"3"2009-09-22 16:07问题现象:某人安装完DB2 9.7以后,发现db2inst1用户下无法运行一切db2命令,如果跑到d 会给出标题内的错误提示。

分析:开始以为是传统的PATH变量抽风了,后来发现不是。

偶然发现db2ilist可以运行,只是结没有建立instance造成的。

解决:回到root用户,运行db2icrt命令去创建instance,再切回db2inst,一切ok。

当然,不以下是引用了某位兄弟博客里的关于db2 创建instance的,蛮详细的这个问题解决了。

刚接触DB2不久,不知道要运行db2profile正确运行后,OK#find /home -name db2profile搜索出这个文件的路径以后,我的显示如下/home/db2inst1/sqllib/db2profile然后我执行一下这个语句#. /home/db2inst1/sqllib/db2profile这样上面出现的问题就可以解决了,这个文件涉及到了DB2数据库环境变量的问题,在具体的原因我也说不好,请大家在到网上查阅详细资-------------------------------------------------------------------------------------使用db2icrt 创建实例DB2® 实例是用来存储数据和运行应用程序的一种环境。

使用db2icrt 命令来创建实例。

在Linux® 或UNIX® 操作系统上,必须具有root 用户权限。

在Windows® 操作系统上,必须以本地管理员登录。

要使用db2icrt 创建实例:1. 使用适当权限登录。

2. 运行db2icrt 命令。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解决问题的关键在于分清问题的种类,并清楚每种问题的解决办法。

另外很多的数据库的问题都是由于错误的操作,错误的配置引起的,所以本文在解释怎么样处理问题时也会给出一些好的建议,来避免产生问题。

本文重点介绍实用的方法。

对问题的分类有很多种方法,在本文中我我采用了两种分类方案。

第一种方案是是否有错误码。

即发生错误时是否同时返回了错误码,错误码既包括执行命令的返回码,也包扩应用程序的返回码。

有返回码的错误解决方案是,在db2 CLP中运行db2?SQLXXXX,然后根据对该问题的解释采取相应的解决方案。

对没有错误码的问题,如数据库hang,CPU使用率过高等问题,解决问题的经验将非常重要,在本文中会有详细的说明。

根据错误码解决问题举例(在下文中,再出现需要用这种方法解决问题时将不再重复):如在连接数据库时发生错误db2 connect to sampleSQL0332N There is no available conversion for the source codepage"1386" tothe target code page "819". Reason Code "1". SQLSTATE=57017错误码分为返回码(SQL0332N)和原因码(Reason Code "1"),针对不同的原因码有不同的解决方案运行db2 ? sql0332从输出种可以看到对于reason code 1的解释是……1 source and target code page combination is not supported bythedatabase manager.……所以可以通过设置代码页来解决这个问题db2set db2codepage=1386db2 terminatedb2 connect to sample就可以成功连接了。

第二种分类方案是按照问题的范围和性质进行分类。

分类如下:1.数据库实例问题2.数据库问题3.数据库性能问题4.应用开发与数据库有关的问题下面对每一类问题进行详细说明。

一、数据库实例的问题数据库实例问题可以分为两种情况1.实例无法启动,运行db2start后,直接返回错误码,如SQL1042C。

如果根据错误码信息无法解决,可以尝试如下方案:重新更新该实例,以root身份登录,cd /usr/opt/db2_08_01/instance/./db2iupdtTip:常见的产生实例无法启动的原因数据库安装了新的补丁后没有运行db2iupdt数据库文件的权限被改成了777,数据库文件的权限是有要求的,所以不能将所有的文件都改成777的权限数据库实例文件被删除或损坏主机名与db2nodes.cfg里记录的不一致2.运行db2start时,hang在那里,既不报错,也无法启动实例这种情况一般是由于实例没有正常的停止造成的,一般运行下列命令可以解决:su -db2_killipcleansu – root(将所有的与该实例有关的db2进程杀死kill -9 )然后重新启动实例。

3.数据库实例崩溃问题遇到实例崩溃的问题,首先查看db2diag.log,根据里面的信息来分析数据库宕机的原因。

再看db2dump目录中是否有trap文件。

可以根据这些信息来分析原因,一般这类问题都需要IBM工程师协助解决。

宕机的原因可以分为两类,一类是数据库的BUG,即数据库的缺陷引起的,一般如果遇到了数据库的缺陷,都有临时的解决方案,或者通过安装最新的补丁来解决,对某些问题IBM也提供临时的修订来解决(需要付费)。

另一类是操作系统,误操作等非产品问题导致的,对非产品问题导致的宕机尽量要避免。

Tip:常见的数据库宕机原因系统的交换空间(paging space)用尽数据库的某个进程被kill二、数据库问题1.数据连接问题无法连接数据库,常见的错误有代码页错误,通讯协议错误,数据库状态错误等。

对代码页类错误,可以通过设置db2codepage,db2country来解决,这两个变量需要用db2set设置成与数据库一致的值。

当发生通讯类错误时,首先要要检查环境变量DB2COMM=TCPIP是否已经设置,然后要检查dbmcfg的SVCENAME,该变量可以直接设置成端口号,或者设置成服务名,该服务名要在services文件中设置成对应的端口号。

要检查该端口号是否已经被其他服务占用。

在启动数据库后,可以运行netstat–angrep,来查看该端口处于的状态。

TCP 0.0.0.0:50000 0.0.0.0:0 LISTENING还有一种情况,当连接数据库时,数据库处于backup pending状态,无法连接。

这是只要对数据库做一个备份就可以了。

Tip:通常导致数据库处于备份赞挂的原因当一个数据库从循环日志改成归档日志时,数据库要求进行一次脱机备份,在重新启动数据库后,数据库就处于备份赞挂的状态对于一个使用线形日志的数据库,当做load时,表空间会处于备份赞挂的状态,为了避免这种情况,load命令需要使用copyyes,或者nonrecoverable参数。

2.数据库损坏数据库最严重的问题莫过于数据库损坏,那么当数据库损坏时,最好的办法是从备份恢复数据库。

如果无法从备份恢复,可以根据损坏的原因尝试相应的解决方案。

由于存储问题导致部分数据文件损坏,但是数据库还可以连接,这种情况可以采用导出数据库的表结果和数据的方法来恢复数据库。

当然对损坏的表,导出是无法完成的,这是可以使用db2dart的导出数据功能来导出这些损坏的表的数据。

如果数据库损坏到已经无法连接的程度,那么除了从备份恢复,唯一的办法是使用db2dart来导出所有的数据了。

Tip:怎么样使用db2dart来导出数据运行命令db2dart /DDEL#Table t data formatting start.#Please enter#Table ID or name, tablespace ID, first page, num of pages:#(suffic page number with "p" for pool relative),按照提示输入表名,表空间id,起始页数,需要导出的页数3.数据库的活动日志被删除这个问题经常会遇到。

也属于数据库损坏的一种情况。

并且数据库无法连接。

首先考虑是否有可以恢复的备份,如果有,可以从备份恢复,然后前滚到日志的末尾,可以完全恢复该数据库。

如果没有可用的备份来恢复,可以通过IBM的技术支持中心来协助解决。

如果想自己解决那只有使用db2dart工具了。

Tip:怎么样避免数据库的活动日志被删除启用数据库的镜像日志功能启用数据库的日志出口程序,这样可以避免手工来删除活动日志目录中的日志当一定要手工删除活动日志目录中的归档日志时,使用命令PRUNE LOGFILE PRIOR TO log-file-name,]可以避免失误将活动日志删除三、数据库性能问题数据库的性能问题一般不属于故障,但是当性能问题变得很严重时,就变成了故障。

解决数据库的性能问题,可以从以下方面入手,检查数据库的配置,如缓冲池,排序堆等是否合理;检查数据库是否收集过统计信息,准确的统计信息对语句优化起着重要的左右;对sql语句进行优化;查看是否有系统资源瓶颈。

确认性能问题首先要从系统的资源消耗来分析,一般可以借助操作系统的工具,如aix 的topas命令。

数据库的性能问题一般的表现是应用变慢,甚至没有响应。

Tip:怎么样快速定位问题如果系统的CPU利用很高,IO很少,那么数据库的排序较多如果系统的IO繁忙,CPU很多是wait,那么说明数据库有过多的IO如果系统CPU,IO都很空闲,那么说明可以是有锁的问题如果系统IO,CPU都非常忙,说明有执行代价非常高的sql在执行数据库一般有三类的性能问题,一是CPU占用过多,二是IO过于繁忙,三是有锁等待。

1.快速找到执行成本较高的sql首先要打开监视器的开关db2 update monitor switches using bufferpool on lock on sortonstatement on table on uow on在系统最繁忙的时候,运行db2 get snapshot for all applications > app.out然后在该文件中查找处于Executing状态的应用,找到执行的对应的sql语句。

如果用这种方法找不到,可以收集sql的快照db2 get snapshot for dynamic sql on > sql.out这个快照记录了动态语句的快照信息,可以根据Total execution time (sec.ms) = 0.000000Total user cpu time (sec.ms) = 0.000000Total system cpu time (sec.ms) = 0.000000这些信息来找到最耗时的语句。

2.怎么样优化sql语句DB2提供了很好的工具来做sql语句优化。

首先要对找到的sql语句进行分析,看是否是该语句引起了性能问题。

我们可以使用db2expln来查看sql语句的访问计划和执行成本。

首先将找到的sql语句写到一个文本文件中sql.in,以“;”结尾,然后运行db2expln –d -f -z “;”–g –o sql.exp查看sql.exp可以看到这个sql语句的执行成本。

如果确认该语句有问题,可以使用db2advis来通过建索引的方法来优化该语句db2advis –d -i sql.in如果通过创建索引无法优化该语句,一般只能从业务角度优化。

3.如果发生锁的问题怎么样处理发生锁的问题,一般有两种情况,一是锁等待,二是死锁。

首先检查数据库配置参数locktimeout,该参数一定不能设为-1,因为会引起某些应用无限期的等待。

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

db2 get snapshot for db on查看输出中的下列内容:Deadlocks detected = 0Lock Timeouts = 0如果发生了死锁,可以通过创建死锁监视器来分析产生死锁的原因,命令如下:mkdir /tmp/dlmondb2 connect todb2 create event monitor dlmon for deadlocks with detail writetofile "/tmp/dlmon" replace编辑推荐利用函数解决DB2中日期时间问题DBase:DB2必须了解的常用命令及技巧利用表空间的备份快速恢复IBM DB2数据库。

相关文档
最新文档