如何对DB2数据库服务器进行日常运维

运维相关知识 同时被 2 个专栏收录
13 篇文章 1 订阅
20 篇文章 0 订阅

目录

一、DB2数据库日常运维需要关注的操作点

1、 查看表空间状态是否正常

2、查看表的状态

3、查看磁盘空间

4、 检查数据库备份是否正常

5、查看缓冲池命中率

6、查看当前运行最频繁的SQL,其命中率是否正常

7、查看当前连接的应用程序,有没有非法连接

8、 检查有没有死锁

9、 对表和索引进行runstats

10、检查表是否需要重组

11、对需要重组的表进行重组

12、查看DB2日志

13、检查备份和日志是否都保存好

14、通过快照监控器,查看系统性能如何

15、 数据库补丁级别

16、获取数据库的配置参数

17、查看设置的参数

二、DB2数据库运维日常注意事项

三、常用指令


一、DB2数据库日常运维需要关注的操作点

1、 查看表空间状态是否正常

以db2实例所有者登录

#db2 list tablespaces show detail //在单分区上查看表空间的状态,正常返回0x0000

# db2_all list tablespaces show detail //在所有分区上查看表空间的状态

可以使用LIST TABLESPACES 命令确定连接数据库中表空间的当前状态,可以使用SHOW DETAIL选项查看表空间的详细信息。比如,我们连上SAMPLE数据库,执行list tablespaces show detail ,可以看到状态返回值是0x0000,此时,使用db2tbst可以查看状态编号对于的状态含义,具体语法如下:

db2tbst <tablespace state> 可以查看编号所代表的状态

db2inst1@local:~> db2tbst 0x0000

State = Normal

db2tbst 命令接收十六进制的状态值,并返回相应的表空间状态。例如,命令 db2tbst 0x0008 返回 State = Load Pending 。而该十六进制的状态值反过来又是 LIST TABLESPACES 命令输出的组成部分。表空间的外部可见状态是由单个状态值的十六进制总和构成的。例如,如果表空间的状态是 Backup Pending和 Load in Progress,那么所返回的十六进制值就是 0x20020,即(0x00020 + 0x20000)。

2、查看表的状态

查询系统目录视图以获得关于数据库的表的状态信息。例如,下面的语句将返回在 SYSCAT.TABLES 中有项的所有表的名称,以及每个表的列数和表的状态(N = 正常;C = 待审核(check pending))

#db2 select tabname, colcount, status FROM syscat.tables ORDER BY tabname

结果显示如下:

TABNAME       COLCOUNT  STATUS
------------  --------  ------
TEST1          32         N
TEST2          6          N

也可以使用load query命令查看单个表的状态,比如对表TEST1,我们可以发出如下命令:

#db2 load query table test1

结果显示如下:

Tablestate:
  Normal

3、查看磁盘空间

查看数据库活动日志目录是否已满,活动日志目录的位置可以使用db2 get db cfg查看,注意一定不要手工删除活动日志。

显示结果如下:

    Database Configuration for Database

Database Configuration release level     =0x0d00
Database release level                   =0x0d00

Database territory                       =CN
Datebase code page                       =1208
...                                      ...
Path to log files                        =/db2/db2inst1/actlog_ebank/NODE0000/                                  

 查看表空间对应的容器目录空间是否满了:

#df -k/df -g

查看DMS表空间中是否还有可用页:

#db2 list tablespaces show detail //在单分区上查看表空间的是否还有可用页

# db2_all list tablespaces show detail //在所有分区上查看表空间是否还有可用页

4、 检查数据库备份是否正常

查看TSM或第三方存储管理软件,看备份映像文件是否完整的保存到了磁带机上了,想在DB2上查看备份情况,可以使用LIST命令:

# db2 list history backup all for 数据库名

显示结果如下:

        List History File for mbank

Number of matching file entries = 1

Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
-- --- ------------------ ---- --- ------------ ----------- ----------
B   D   20201026113313001  N    D  S0007963.LOG     
----------------------------------------------------------------------
Contains 6 tablespace(s):

00001 SYSCATSPACE
00002 USERSPACE
...
----------------------------------------------------------------------
Comment: DB2 BACKUP MBANK ONLINE
Start Time: 20201026113313
  End Time: 20201026123227
    Statue: A
----------------------------------------------------------------------
 EID:12466 Location: /home/db2inst1

SQLCA Information

sqlcaid:SQLCA   sqlcabc:136  sqlcode:-2001 sqlerrml:0
sqlerrmc:
sqlerrp : sqlubcka
sqlerrd : (1) 0    (2) 0    (3) 0
          (4) 0    (5) 0    (6) 0
sqlwarn : (1)  (2)  (3)  (4)  (5)  (6)
          (7)  (8)  (9)  (10)  (11)  
sqlstate:

5、查看缓冲池命中率

# db2 get snapshot for bufferpools on 数据库名

查看缓冲池命中率,是否低于95%,越高越好。

6、查看当前运行最频繁的SQL,其命中率是否正常

# db2 get snapshot for bufferpools on 数据库名 > log.txt

# db2 "select * from SYSCAT.BUFFERPOOLS" 查缓冲池大小信息

查看缓冲池大小结果如下:

BPNAME       BUFFERPOOLID DBPGNAME NPAGES PAGESIZE ESTORE NUMBLOCKPAGES BLOCKSIZE NGNAMME
------       ------------ -------- ------ -------- ------ -------------- ------- --------
IBMDEFAULTBP       1        -       -2     4096     N     0               0       -
DBP_MBANK          2        -       -2     32768    N     0               0       -

命中率计算:

(1- ((Buffer pool data physical reads + Buffer pool index physical reads) /(Buffer pool data logical reads + Buffer pool index logical reads))) * 100%

用grep命令查看" Number of executions"执行次数最频繁的语句,看其命中率是否正常。比如:

grep -n " Number of executions" log.txt | grep -v "= 0" | sort -k 5,5rn | more

7、查看当前连接的应用程序,有没有非法连接

#db2 list applications show detail

看这些连接的情况,看有没有不合适的IP连上来,或者不被允许的第三方工具连上来,比如一些第三方工具连上来会对表进行锁定,影响业务系统正常运行,这个时候可以用db2 "force application(应用程序句柄号)" 将某个单独的句柄停下来。

8、 检查有没有死锁

# db2 get snapshot for all on 数据库名 > log.txt

用grep命令查看输出的文件中是否有死锁的记录,比如

grep -n "Deadlocks detected" log.txt | grep -v "= 0" | more

9、 对表和索引进行runstats

#db2 runstats on table 表名 and index all

对系统表以及变化比较频繁的表运行统计信息,建议写成shell脚本自动运行。

结果显示如下:

DB20000I The RUNSTATS command completed successfully.

10、检查表是否需要重组

使用REORGCHK命令,通过统计数据检查表是否需要重组,语法如下:

REORGCHK [UPDATE | CURRENT ]STATISTICS ON [TABLE SYSTEM| TABLE USER | TABLE ALL | TABLE table_name | SCHEMA schema_name]

UPDATE STATISTICS: 更新表的统计数据,根据该统计数据判断是否需要重组表

CURRENT STATISTICS:根据当前表统计数据判断是否需要重组表

TABLE table_name : 对单个表进行分析

TABLE ALL: 对数据库所有的表进行分析

TABLE SYSTEM: 对系统表进行分析

TABLE USER : 对当前用户模式下的所有表进行分析

#db2 reorgchk update statistics on table all

显示结果如下:

Doing RUNSTATS...
...
Table: SYSTOOLS.HMON_COLLECTION
Index: SYSTOOLS.HI_OBJ_UNIQ
                                0    1   0  1  0  0  14  14  442  442  0  100 - -  0  0 ---

11、对需要重组的表进行重组

#db2 reorg table 表名  //通过重构行来消除“碎片”数据

#db2 reorg indexes all for table 表名 //只重组索引

比如:

reorg table db2inst1.org index by_id

将根据索引by_id,如果不加INDEX选项将重组表和所有的索引

reorg table db2inst1.org index by_id use tempspace1

使用指定的临时表空间重组表

表重组完成后需要进行RUNSTATS。另外,记住在分区数据库环境中,如果想在所有节点运行命令,需要使用db2_all命令。

12、查看DB2日志

db2 get dbm cfg 
Diagnostic data directory path  (DIAGPATH) = /home/db2inst1/sqllib/db2dump

至少每天查看一次db2diag.log文件,看其中是否有异常。

13、检查备份和日志是否都保存好

通过TSM或第三方存储管理软件,查看备份和归档日志是否都保存好了,在数据库级别查看备份,可以使用:

# db2 list history backup all for 数据库名

14、通过快照监控器,查看系统性能如何

通过快照监控器,抓取数据库的信息,分析数据库性能是否合理:

# db2 get snapshot for all on 数据库名 > log.txt

15、 数据库补丁级别

# db2level

结果显示如下:

Informational tokens are "DB2 V9.7.0.7" , "S121002", "IP23367", and Fix Pack "7".
Product is installed at "/opt/IBM/db2/v9.7"

16、获取数据库的配置参数

查看现有数据库管理器配置文件中的配置参数的当前值,可以使用以下命令:

db2get database manager configuration

可简写为:db2 get dbm cfg

更新数据库管理器配置文件中的单个配置参数的值,可以使用以下命令:

 db2update database manager configuration using <parameter name> <newvalue> <next parameter name> <new value>…

可简写为:db2 upadte dbm cfg using<parameter name> <new value> <next parameter name> <newvalue>…

查看数据库配置文件中的配置参数的当前取值,可以使用以下命令:

db2 get database configuration for 数据库名

可简写为:db2 get db cfg for 数据库名

更新数据库配置文件中的单个配置参数的取值,可以使用以下命令:

db2 update database configuration for 数据库名 using 参数名参数值…

可简写为:db2 upadte db cfg for 数据库名 using 参数名参数值…

17、查看设置的参数

$ db2set

DB2_INLIST_TO_NLJN=YES

DB2_EVALUNCOMMITTED=YES

DB2_RR_TO_RS=YES

DB2COUNTRY=86

DB2COMM=TCPIP

DB2CODEPAGE=1208

二、DB2数据库运维日常注意事项

1、 不要删除活动日志文件

DB2 的活动日志文件不能被删除。一旦 DB2 的活动日志文件被删除,或者所在的存储设备出现问题,则不可避免地造成 DB2 数据库系统宕机。活动日志包含尚未提交或回滚的事务单元的相关信息,以及已提交但尚未写入数据库文件的事务的信息。

2、 注意交易日志存储空间

在归档日志模式下,如果没有使用自动归档方式,则存储的日志文件会不断增多,有可能造成日志所在的文件系统空间满。 当这种情况发生时,会根据参数 BLK_LOG_DSK_FUL 的配置而有不同的现象:

  1. 如果该参数启用,则 DB2 数据库可继续读操作,但是写操作会挂起
  2. 如果该参数没有启用,则 DB2 数据库会停止工作

两种情况下,都需要到日志所在的文件系统添加了空间才恢复正常,避免出现事务日志满的问题。

3、 按照系统的实际工作量配置日志空间

DB2数据库通过日志文件维护数据的完整性和一致性。DB2 数据库的日志空间可通过如下公式计算:

日志空间 = (主日志文件 + 辅助日志文件) * 日志文件尺寸

其中:

  1. 主日志文件由参数 LOGPRIMARY 控制,
  2. 辅助日志文件由参数 LOGSECOND 控制
  3. 日志文件尺寸由参数 LOGFILSIZ 控制
  4. LOGPRIMARY + LOGSECOND < 256 (不同的 DB2 版本略有不同,请参看相同版本的 DB2 手册确认)

4、 设置正确数据库代码页

由于数据库的代码页在数据库创建之后是无法修改的,所以在创建数据库时一定要选择正确的代码页。错误的数据库代码页会造成 JDBC/ODBC 访问时中文字段被截断(包括控制中心),这种情况需要重建数据库以修改数据库代码页。从全局规划来说,如果应用需要访问多个数据库,那么这多个数据库的代码页应该是一致的。

5、 创建数据库前调整好系统时间

在数据库创建好之后,调整系统时间会造成数据库内部时间戳的异常。数据库中一些对象和时间相关,一旦时间不准确要调整需要很小心。错误的时间调整可能会造成很多问题,如:

  1. 某些对象失效,例如 :SQL0440N,找不到具有兼容自变量的类型为 “<例程类型>” 的名为 “<例程名>” 的已授权例程
  2. 数据库日志逻辑错误 -> 宕机
  3. 常见错误 – 只调整时间,未调整时区

6、不要随便执行 chown (chmod) –R (UNIX/Linux)

在实例目录下chown (chmod) -R 会造成

  1. 在数据库服务器上 db2 connect to <dbname> 能连接上数据库
  2. db2 connect to <dbname> user ... using ...连接不上

三、常用指令

DB2数据库常用指令以及重要知识点学习

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值