1 数据库实例挂起
现象:
数据库操作无返回,应用程序无响应,查看数据库实例发现挂起。
分析:
1、执行ps -ef|grep db2sysc 确认系统中是否存在db2sysc 进程,判断数据库实例是否出现异常。
2、执行db2gcf -s -p 分区号-i 实例名确认实例状态是否为Available。
处理:
1、执行如下命令收集db2fodc -hang 数据:
db2fodc –hang –alldbs
2、如果收集的时间过长,可适当减小收集范围:
db2pd –stack all –repeat 5
db2pd –latch –repeat 5
3、使用DB2 数据库系统用户执行db2_kill 命令杀掉DB2 进程,使用ps –ef|grep db2 命令确认DB2 进程已全部清除,然后执行db2start 命令启动数据库,再执行
db2 connect to db_name;
db2 "select * from syscat.bufferpools"
验证DB2 数据库操作正常。
4、重新启动DB2 后再使用db2support 收集相关信息:
db2support /tmp/db2data -d <db_name> -a -g -l -r -s
5、在AIX 系统中可执行snap -gc 命令、在Linux 系统可执行support –a 命令收集操作系统信息,以帮助分析数据库实例进程为何出现异常。
2 数据库实例崩溃
现象:
DB2 进程异常结束,无法提供服务。
分析:
执行ps –ef |grep db2sysc 发现DB2 进程消失。
处理:
1、使用DB2 数据库系统用户执行db2start 命令启动数据库,并执行
db2 connect to db_name;
db2 "select * from syscat.bufferpools"
验证DB2 数据库操作正常。
2、执行db2support . –d db_name -c –s –f 命令收集数据,执行
db2trc on -t -f server.dmp;
db2trc fmt server.dmp server.fmt;
db2trc flw -t server.dmp server.flw
命令开启db2trc,监控问题是否重现,收集trace 数据。
3 数据库连接数满
现象:
应用程序连接数据库时出现SQL1040N The maximum number of applications is already connected to the database 报错,无法建立新的数据库连接。
分析:
1、执行db2 get db cfg for sample | grep –i maxappls 查看当前数据库maxappls 参数值。
2、执行db2pd –db db_name –app 或者db2 list applications |wc –l 检查应用程序的总连接数是否已超过数据库最大允许连接数。
处理:
执行db2 update db cfg for sample using maxappls automatic 命令更新maxappls 参数,使之自动增长。
4 数据库事务日志满
现象:
单个交易处理数据量大,导致日志满情况发生。
分析:
执行如下查询,可检查占用日志较大的交易:
db2 "SELECT SUBSTR(DB_NAME,1,8) AS DB_NAME, AGENT_ID, ROWS_READ,ROWS_WRITTEN, UOW_LOG_SPACE_USED, UOW_START_TIME, UOW_STOP_TIME,ELAPSED_EXEC_TIME_S FROM SYSIBMADM.SNAPAPPL"
处理:
1、若数据库日志满,DB2 将强制回滚事务。可通过db2pd –db db_name –apinfo 数据库名察看应用状态,应该处于rollback 状态。
2、DB2 数据库有2 个参数可以控制每个交易使用的日志量,避免单个交易占用索引日志情况, 可执行
db2 update dbm cfg using MAX_LOG 80 和db2 update dbm cfg usingNUM_LOG_SPAN 80
设置该参数为80%,避免单个大交易的情况。
3、规避方法:
当数据库日志空间存在用尽风险时,可以通过在线增加logsecond 参数来增加可用的日志空间,避免出现日志空间满的情况。在扩展此参数前,需确认数据库日志所在的文件系统有空闲空间。
确认数据库的日志路径:
db2 get db cfg for <dbname> |grep "Path to log files"
增加logsecond:
单分区环境:
db2 update db cfg using logsecond <num>
注:num 为参数logsecond 的新的值。
多分区环境:
db2_all "db2 update db cfg using logsecond <num>"
注:num 为参数logsecond 的新的值。
5 数据库事务日志误删
现象:
数据库活动日志被误删除。
分析:
进入DB2 活动日志目录下,检查发现日志文件已经被误删除。
处理:
通过最新的数据库备份进行恢复,执行恢复之后前滚日志。命令:
db2 RESTORE DATABASE 数据库名 FROM 备份文件位置" TAKEN AT 时间戳 to 待恢复的实例名" logtarget 日志目录REPLACE EXISTING redirect
注:日志重置后,强烈建议数据库重建,避免存在隐患。
6 数据库表空间满
现象:
巡检发现数据库日志中出现如下错误信息:
FUNCTION: DB2 UDB, buffer pool services, sqlbDMScheckObjAlloc, probe:830
MESSAGE : ZRC=0x85020021=-2063466463=SQLB_END_OF_CONTAINER "DMS Containerspace full"
分析:
1、执行如下SQL 语句,确认表空间使用率:
$db2 "connect to 数据库名 user 用户 using 密码
$db2 "select substr(a.tbsp_name,1,18) as name,substr(a.tbsp_type,1,10) as
tbstype,a.TBSP_USING_AUTO_STORAGE as AUTO_STORAGE,substr(a.tbsp_state,1,8) as
state,a.tbsp_total_size_kb/1024 as TotalMB ,a.TBSP_PAGE_TOP*a.TBSP_PAGE_SIZE/1024/1024 as
top_size_mb,a.tbsp_used_size_kb/1024 as UsedMB, a.TBSP_UTILIZATION_PERCENT as
UsedPer ,b.CONTAINER_NAME from sysibmadm.tbsp_utilization a, sysibmadm.SNAPCONTAINER
b where tbsp_type='DMS' and a.TBSP_ID=b.TBSP_ID order by AUTO_STORAGE,UsedPer desc"
2、执行如下命令确认容器类型:
单分区环境
$db2pd -d <db> -tab
多分区环境:
$db2_all "db2pd -d <db> -tab"
处理:
执行
$db2 "alter tablespace <name> extend(all NG)"
扩容表空间。
注:表空间增加的大小为容器数量*N,N 为每个容器增加的大小。
7 数据库表空间状态异常
现象:
系统监控报警数据库表空间状态异常。
分析:
1、由于存储、操作或者权限等原因,会导致DB2 表空间状态异常。此时,可查询表空间16 进制的状态值。命令:
$db2 list tablespaces show detail|grep -i state
2、根据返回的16 进制值,确认表空间状态。命令:
$db2tbst <tablespace state>
3、表空间状态信息对应的描述:
Return code |
Description |
描述 |
0x0 |
Normal |
正常 |
0x1 |
Quiesced: SHARE |
静止态共享 |
0x2 |
Quiesced: UPDATE |
静止态更新 |
0x4 |
Quiesced: EXCLUSIVE |
静止态排它 |
0x8 |
Load pending |
载入挂起 |
0x10 |
Delete pending |
删除挂起 |
0x20 |
Backup pending |
备份挂起 |
0x40 |
Roll forward in progress |
正在回滚 |
0x80 |
Roll forward pending |
回滚挂起 |
0x100 |
Restore pending |
存储挂起 |
0x100 |
Recovery pending (not used) |
恢复挂起 |
0x200 |
Disable pending |
禁用挂起 |
0x400 |
Reorg in progress |
正在重组 |
0x800 |
Backup in progress |
正在备份 |
0x1000 |
Storage must be defined |
存储器未被指定 |
0x2000 |
Restore in progress |
正在恢复 |
0x4000 |
Offline and not accessible |
表空间不可访问 |
0x8000 |
Drop pending |
删除挂起 |
0x2000000 |
Storage may be defined |
存储器需被指定 |
0x4000000 |
StorDef is in 'final' state |
存储器终止 |
0x8000000 |
StorDef was changed prior to rollforward |
存储器被改变至回滚状态 |
0x10000000 |
DMS rebalancer is active |
表空间的容器重新分布 |
0x20000000 |
TBS deletion in progress |
表空间删除 |
0x40000000 |
TBS creation in progress |
表空间建立 |
处理:
常见异常状态的处理方式:
状态 |
状态值 |
原因 |
状态描述及处理方式 |
Backup Pending |
0x20 |
归档日志下进行LOAD 操作导致 |
对状态异常的表空间执行备份,命令: db2 backup database db_name tablespace(syscatspace, userspace1) to/dbbackupdir |
Offline and Not Accessible |
0x4000 |
1.表空间使用的物理设备不可访问 2.物理设备权限不对 |
修复物理设备问题,保证权限正确,然后修改表空间为online 状态,命令: db2 ALTER TABLESPACE <name> SWITCH ONLINE |
Restore Pending |
0x100 |
恢复过程中,表空间对应的物理设备不可用,表空间就处于这种状态。 |
必须恢复单个表空间(或者是整 个数据库)。命令: db2 restore database db_name tablespace (XXX) 如果是归档日志,则前滚日志,命令: db2 rollfoward db db_name to end of logs and complete |
Roll Forward Pending |
0x80 |
由于物理设备不可用或者权限问题, 导致CRASH RECOVERY 时日志无法前滚,出现上述问题; |
必须前滚数据库,命令: db2 rollfoward db db_name to end of logs and complete |
Storage Must be Defined |
0x1000 |
在将恢复操作重定向到新数据库期间,如果省略了设置表空间容器的阶段,或者,如果在设置表空间容器的阶段期间无法获得指定的容器,那么数据库的表空间就会处于这种状态。 |
需要重新制定表空间使用的容器,命令: db2 SET TABLESPACE CONTAINERS FOR 1 USING (容器名) |
8 数据库表或数据误删
现象:
数据库中的表或数据被误删除。
分析:
与操作人员确认误删除发生的时间以及被删除的数据内容。
处理:
1、如果该表或数据所在的表空间不大,恢复时间较短,且该表所在的表空间已启用DROPPED TABLE RECOVERY 选项,建议采用数据库前滚恢复的方式恢复表或数据。可通过如下命令查询字典表SYSCAT.TABLESPACES 来验证表空间是否已开启DROPPED TABLE RECOVERY选项:
db2 "select tbspace,drop_recovery from syscat.tablespaces"
TBSPACE DROP_RECOVERY
---------------------- ------------------
SYSCATSPACE N
TEMPSPACE1 N
USERSPACE1 Y
ALANSPACE1 Y
ALANSPACE2 Y
SYSTOOLSPACE Y
2、尝试恢复数据库:
(a)、执行db2 restore database irmdb from D:\IBM\alanbak taken at 20100628154742 into irmdb命令,将会显示SQL2539W 警告!正在复原至与备份映像数据库相同的现有数据库。
数据库文件将被删除。想要继续吗?(y/n)
回答Y。
DB20000I RESTORE DATABASE 命令成功完成。
(b)、执行db2 list history dropped table all for irmdb从历史文件中检索已经丢失表对象的ID。列示irmdb 的历史记录文件:
匹配的文件条目数= 1
Op 对象时间戳记+序列类型设备最早日志当前日志备份标识
-- --- ------------------ ---- --- ------------ ------------ ----------
D T 20100628154949 000000000000f40200030004
----------------------------------------------------
"DB2ADMIN"."ALANTEST1" 驻留在1 表空间中:00001 ALANSPACE1
----------------------------------------------------
注释:DROP TABLE
开始时间:20100628154949
结束时间:20100628154949
状态:A
----------------------------------------------------
EID:13
DDL: CREATE TABLE "DB2ADMIN"."ALANTEST1" ( "ID" INTEGER , "NAME" VARCHAR(10) ) IN "ALANSPACE1" ;
----------------------------------------------------
其中我们可以查看一下备份标识:000000000000f40200030004,这个信息对于恢复表非常重要。
(c)、Rollforward数据库到日志结尾,同时生成恢复导入文件(我们需要利用上面的备份标识000000000000f40200030004来恢复数据库,同时准备出一个导出目录D:\IBM\exporttab)。执行如下命令:
db2 "rollforward database irmdb to end of logs and stop tablespace (alanspace1) online recover
dropped table 000000000000f40200030004 to D:\IBM\exporttab"
前滚状态
输入数据库别名= irmdb
节点数已返回状态= 1
节点号= 0
前滚状态= 未暂挂
下一个要读取的日志文件=
已处理的日志文件= S0000002.LOG - S0000004.LOG
上次落实的事务= 2010-06-28-07.49.50.000000 UTC
DB20000I ROLLFORWARD 命令成功完成。
(d)、此时我们可以看到在D:\IBM\exporttab\NODE0000目录下生成了一个data文件,内容就是我们表中丢失的数据。然后,我们用LIST HISTORY中的DDL来重建表结构并IMPORT相应的数据,如下:
DDL: CREATE TABLE "DB2ADMIN"."ALANTEST1" ( "ID" INTEGER , "NAME" VARCHAR(10) ) IN "ALANSPACE1" ;
db2 CREATE TABLE "DB2ADMIN"."ALANTEST1" ( "ID" INTEGER , "NAME" VARCHAR(10) )
DB20000I SQL 命令成功完成。
db2 import from D:\IBM\exporttab\NODE0000\data of del insert into db2admin.alantest1
SQL3109N 实用程序正在开始从文件"D:\IBM\exporttab\NODE0000\data" 装入数据。
SQL3110N 实用程序已完成处理。从输入文件读了"5" 行。
SQL3221W ...开始COMMIT WORK。输入记录计数= "5"。
SQL3222W ...对任何数据库更改的COMMIT 都成功。
SQL3149N 处理了输入文件中的"5" 行。已将"5" 行成功插入表中。拒绝了"0" 行。
读取行数= 5
跳过行数= 0
插入行数= 5
更新行数= 0
拒绝行数= 0
落实行数= 5
3、如果该表所在的表空间很大,恢复时间远大于停机窗口,建议根据之前的建表语句重建表,并利用最新的逻辑备份导入最新的备份数据,手工补做数据丢失的时间段业务。
9 死锁或超时,导致当前事务回滚
现象:
当前事务因死锁或超时而回滚,提示信息如下:
SQL0911N The current transaction has been rolled back because of a deadlock or timeout. Reason code "2"
分析:
根据报错的具体信息,可以判定,原因为死锁导致超时。
处理:
为了帮助避免死锁或锁定超时,可以采用如下两种方法
1、对长时间运行的应用程序或有可能遇到死锁的应用程序频繁发出COMMIT 操作(若有可能的话)。
2、修改数据库参数,适当地增大锁超时时间(此处60 秒为例),命令如下:
db2 update db cfg using LOCKTIMEOUT 60
相关推荐
db2数据库在Linux中的其他常见操作包括: 1. **查看数据库**:`db2 list db directory`用于列出所有数据库。 2. **连接/断开数据库**:`db2 connect to db_name`建立连接,`db2 connect reset`或`db2 terminate`...
DB2数据库是IBM公司开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。为了更好地管理和维护DB2数据库,可视化工具的使用至关重要。Quest Central for DB2正是这样一款高效且用户友好的工具,它提供...
分析DRDA报文格式对于理解DB2数据库的内部工作原理、性能优化和问题排查至关重要。通过对报文的解码,可以获取SQL语句、数据库元数据(如表、库、用户名等)等重要信息,从而更好地管理和维护DB2数据库系统。
#### 四、DB2 数据库备份与恢复的常见策略 - **定期备份**:根据业务需求和数据变化频率制定合理的备份计划,例如每日备份、每周备份等。 - **差异备份**:在全量备份的基础上,只备份自上次备份以来发生变化的数据...
本篇文章将深入探讨DB2数据库错误解决代码SQLCODE的相关知识点,帮助你更好地理解和处理这些问题。 SQLCODE是一个三位数的整数,它表示DB2在执行SQL语句时遇到的错误。正数SQLCODE通常表示成功但非正常结束,而负数...
在.NET环境中连接到DB2数据库是一项常见的任务,尤其对于开发跨平台的企业级应用程序而言。本文将详细介绍如何使用.NET Framework和IBM Data Provider for .NET来实现这一目标,以及相关的编程概念和示例。 首先,...
文件可能包括安装步骤、配置示例、SQL语法教程、常见问题解答等内容。通过仔细阅读和实践,读者可以快速掌握DB2的基本操作,并能够应对日常的数据库管理工作。 总之,DB2数据库入门教程是初学者学习数据库管理系统...
DB2数据库作为IBM开发的关系型数据库管理软件,其在...以上技术涵盖了DB2数据库在实际开发中常见的操作,包括连接、查询、转换、错误处理和存储过程等。理解并熟练运用这些技术,对于DB2数据库的管理和维护至关重要。
在IT领域,数据库管理系统(DBMS)是至...总结来说,DB2数据库的SQL基础涵盖了数据类型的选用、NULL值的处理以及自增长列的使用等关键概念。理解并熟练掌握这些知识对于在电信行业中有效管理和操作DB2数据库至关重要。
【DB2数据库管理最佳实践】 在DB2数据库管理系统中,保持数据库的良好运行状态至关重要,这涉及到一系列的日常运维任务。本文主要围绕两个关键工具——Runstats和Reorg,以及它们在提升DB2性能中的作用进行深入讲解...
【DB2数据库性能调优】 在数据库管理领域,性能优化是一项关键任务,特别是对于像IBM DB2 Universal Database (UDB)这样的大型企业级数据库系统。本文档深入探讨了如何使用Java示例程序PERFORMER来监控和优化DB2 ...
DB2数据库是一个强大的关系型数据库管理系统,SQL(Structured Query Language)是它主要的数据操作和管理工具。本篇文章将深入探讨DB2中的SQL语法,包括DDL(Data Definition Language)用于定义数据库结构,DML...
### DB2数据库备份与恢复详解 #### 一、概述 DB2是一种广泛使用的数据库管理系统,提供了强大的数据管理和处理能力。为了确保数据的安全性和完整性,DB2支持多种备份和恢复策略,包括脱机备份(冷备份)和联机备份...
DB2数据库是一款由IBM开发的关系型数据库管理系统,广泛应用于企业级的数据存储和处理。本教程主要涵盖DB2的高级主题,包括数据恢复、高可用性、安全性、性能优化以及安装和管理等方面,旨在帮助读者深入理解和掌握...
DB2数据库管理员手册是针对那些想要深入理解和管理IBM DB2数据库的专业人士的重要资源。DB2是一种功能强大的关系型数据库管理系统,广泛应用于企业级的数据存储和处理。本手册旨在帮助读者从初学者逐步成长为DB2的...
根据提供的标题、描述和部分内容,我们可以总结出关于“DB2数据库调整数据库性能”的一系列关键知识点。下面将详细探讨这些知识点: ### 一、DB2数据库调整数据库性能的重要性 DB2数据库作为IBM公司的一款高性能...
在DB2数据库系统中,处理日期和时间数据是一项常见的需求。对于开发人员来说,能够准确地获取和操作日期时间数据至关重要。本文将详细介绍如何在DB2数据库中使用SQL语句来获取当前日期、当前时间和当前时间戳,并...
总的来说,DB2 9数据库在XML处理、数据仓库管理和性能优化上表现出众,但同时也存在关闭机制和API不足的问题。尽管如此,随着IBM的持续改进和用户对系统深入理解,DB2依然是一个强大且可靠的数据库解决方案。
DB2数据库驱动jar包是IBM公司为连接...总之,DB2数据库驱动jar包是Java开发者与DB2数据库进行通信的关键组件,它提供了丰富的功能,包括数据访问、事务处理、性能优化等,是构建Java应用与DB2数据库间桥梁的重要工具。