1、说明
IBM DB2出现异常终止后,可能出现无法使用DB2命令,无法更新实例的情况。如何才能彻底的停止DB2数据库相关的进程?这是本文探究的问题。
命令的几个级别:
级别 | 命令 |
---|---|
会话 | commit terminate quit connect reset |
进程 | db2stop db2_kill kill |
信号 | ipcs ipcrm |
2、对会话操作
2.1 commit
1、提交数据。
2、不
断开数据库连接。
3、不
退出CLP。
1、查看会话是否自动提交;ON为开启;OFF为关闭。
-- 临时关闭或开启自动提交;ON开启;OFF关闭。
[db2inst1@localhost ~]$ db2 list command options | grep Auto-Commit
-c Auto-Commit ON
[db2inst1@localhost ~]$ db2 update command options using C off
DB20000I The UPDATE COMMAND OPTIONS command completed successfully.
[db2inst1@localhost ~]$ db2 update command options using C on
DB20000I The UPDATE COMMAND OPTIONS command completed successfully.
-- 永久关闭或开启自动提交;+C 开启;-C 关闭。
[db2inst1@localhost ~]$ db2set -lr|grep -i db2option
DB2OPTIONS
[db2inst1@localhost ~]$ db2set DB2OPTIONS=+C
[db2inst1@localhost ~]$ db2set
DB2OPTIONS=+C
DB2COMM=TCPIP
[db2inst1@localhost ~]$ db2set DB2OPTIONS=-C
[db2inst1@localhost ~]$ db2set
DB2OPTIONS=-C
DB2COMM=TCPIP
2、手动提交命令
[db2inst1@localhost ~]$ db2 commit work
DB20000I The SQL command completed successfully.
[db2inst1@localhost ~]$ db2 commit
DB20000I The SQL command completed successfully.
db2 => commit
DB20000I The SQL command completed successfully.
db2 => commit work
DB20000I The SQL command completed successfully.
[db2inst1@localhost ~]$ db2 "commit work"
DB20000I The SQL command completed successfully.
[db2inst1@localhost ~]$ db2 "commit"
DB20000I The SQL command completed successfully.
[db2inst1@localhost ~]$
3、未提交时,几种情况。
对象 | 会话窗口A | 会话窗口B |
---|---|---|
创建表 | [db2inst1@localhost ~]$ db2 “create table t2 (no1 int,tname1 char(8))” DB20000I The SQL command completed successfully. |
[db2inst1@localhost ~]$ db2 list tables for all 卡住,出不来结果。
|
插入数据 | [db2inst1@localhost ~]$ db2 “insert into t1 values (1,‘wang’)” DB20000I The SQL command completed successfully. |
[db2inst1@localhost ~]$ db2 “select * from t1” NO SNAME |
2.2 terminate
1、提交数据。
2、断开数据库连接。
3、退出CLP。
说明:CLP backend process会在从CLP提交命令和SQL语句时启动,其作用就是将Directory file的内容读到内存中,这样不用每次connect都去读一次I/O,以提高效率。
---执行命令:
[db2inst1@localhost ~]$ db2 terminate
DB20000I The TERMINATE command completed successfully.
[db2inst1@localhost ~]$ db2 "terminate"
DB20000I The TERMINATE command completed successfully.
[db2inst1@localhost ~]$ db2
db2 => terminate
DB20000I The TERMINATE command completed successfully.
2.3 quit
1、不
提交数据。
2、不
断开数据库连接。
3、退出CLP。
db2 => quit
DB20000I The QUIT command completed successfully.
[db2inst1@localhost ~]$
2.4 connect reset
1、提交数据。
2、断开数据库连接。
3、不
退出CLP。
3、对进程操作
3.1 db2stop
1、停止db2sysc:主系统控制器 EDU;它处理关键的 DB2 服务器事件
2、停止db2vend:这是代表 EDU 执行供应商代码的进程;例如,执行用户出口程序以进行日志归档(仅适用于 UNIX)。
3、停止db2fmp
说明:EDU - 引擎可分派单元
--启动:
[db2inst1@localhost ~]$ db2start
04/17/2023 15:46:25 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
[db2inst1@localhost ~]$ ps -ef|grep db2sys | grep -v grep
db2inst1 5700 5698 3 15:46 pts/2 00:00:00 db2sysc 0
--停止:
[db2inst1@localhost ~]$ db2stop
2023-04-17 15:46:39 0 0 SQL1064N DB2STOP processing was successful.
SQL1064N DB2STOP processing was successful.
[db2inst1@localhost ~]$ ps -ef|grep db2sys | grep -v grep
[db2inst1@localhost ~]$
3.2 db2_kill
分区数据库命令,普通数据库不能使用。
突然停止正在多个数据库服务器上运行的所有进程,并清除所有数据库分区服务器上的所有资源。此命令使数据库变得不一致。除非在 IBM 软件支持机构的指导下,否则,请不要发出此命令;或者按指示从持续陷阱进行恢复。
db2_kill
ipclean
3.3 删除进程 - kill
--查看db2inst1用户的进程
[db2inst1@localhost bin]$ ps -fu db2inst1
UID PID PPID C STIME TTY TIME CMD
db2inst1 2912 2911 0 14:57 pts/1 00:00:00 -bash
db2inst1 3449 3448 0 15:02 pts/2 00:00:00 -bash
db2inst1 3783 1 0 15:06 pts/1 00:00:00 /home/db2inst1/sqllib/bin/db2bp 2912A1001 5 A
db2inst1 5216 2912 0 15:36 pts/1 00:00:00 db2
db2inst1 8370 1 0 16:38 pts/2 00:00:00 /home/db2inst1/sqllib/bin/db2bp 3449A1001 5 A
db2inst1 10077 10075 0 16:53 pts/2 00:00:00 db2sysc 0
db2inst1 10087 10075 0 16:53 pts/2 00:00:00 db2vend (PD Vendor Process - 1) 0
db2inst1 10100 10075 0 16:53 pts/2 00:00:00 db2acd 0 ,0,0,0,1,0,0,00000000,0,0,0,0000000000000000,0000000000000000,00000000,00000000,00000000,00000000,00000000,000000
db2inst1 10563 3449 0 17:01 pts/2 00:00:00 ps -fu db2inst1
-- 查看实例用户DB2INST1中USE1用户的进程
[db2inst1@localhost bin]$ ps -fu db2inst1 | grep use1 | awk '{print "kill -9", $2}'
kill -9 2912
kill -9 3449
kill -9 3783
kill -9 5216
kill -9 8370
kill -9 10077
kill -9 10087
kill -9 10100
kill -9 10635
kill -9 10636
kill -9 10637
-- 执行命令
[db2inst1@localhost bin]$ ps -fu db2inst1 | grep db2inst1 | awk '{print "kill -9", $2}' | sh
3.4 删除信号 - ipcs
ipcs 多进程间通信常用的技术手段包括共享内存、消息队列、信号量等等。
其实只是一种信号
ipcrm
描述
ipcrm 命令删除一个或更多的消息队列、信号量集或者共享内存标识。
标志
-m SharedMemory ID 删除共享内存标识 SharedMemoryID。与 SharedMemoryID 有关联的共享内存段以及数据结构都会在最后一次拆离操作后删除。
-M SharedMemoryKey 删除用关键字 SharedMemoryKey 创建的共享内存标识。与其相关的共享内存段和数据结构段都将在最后一次拆离操作后删除。
-q MessageID 删除消息队列标识 MessageID 和与其相关的消息队列和数据结构。
-Q MessageKey 删除由关键字 MessageKey 创建的消息队列标识和与其相关的消息队列和数据结构。
-s SemaphoreID 删除信号量标识 SemaphoreID 和与其相关的信号量集及数据结构。
-S SemaphoreKey 删除由关键字 SemaphoreKey 创建的信号标识和与其相关的信号量集和数据结构。
msgctl、shmctl 和 semctl 子例程提供了删除操作的细节。标识和关键字可以用 ipcs 命令找到。
示例
如果要删除和 SharedMemoryID 18602 相关的共享内存段,请输入:
ipcrm -m 18602
-- 启动数据库前
[db2inst1@localhost bin]$ ipcs -a | grep db2inst1
0x3b68f262 2621440 db2inst1 711 0 0
0x4b0faf7c 2654209 db2inst1 711 0 0
0x00000000 3145730 db2inst1 711 0 0
0x3e9c5802 4947971 db2inst1 711 0 0
0x4e43151c 4980747 db2inst1 711 0 0
0x00000000 458755 db2inst1 601 34156360 2 目标
0x00000000 3244039 db2inst1 601 131072 1 目标
0x276b0369 7405582 db2inst1 661 1
-- 启动数据库后
[db2inst1@localhost bin]$ ipcs -a | grep db2inst1
0x3b68f262 2621440 db2inst1 711 0 0
0x4b0faf7c 2654209 db2inst1 711 0 0
0x00000000 3145730 db2inst1 711 0 0
0x3e9c5802 4947971 db2inst1 711 0 0
0x00000000 5636101 db2inst1 601 0 0
0x00000000 5701638 db2inst1 601 0 0
0x276b0271 5767176 db2inst1 663 0 0
0x00000000 5799945 db2inst1 601 0 0
0x276b0272 5832714 db2inst1 663 0 0
0x4e43151c 4980747 db2inst1 711 0 0
0x276b0277 5865484 db2inst1 665 0 0
0x00000000 458755 db2inst1 601 34156360 2 目标
0x276b0274 3964932 db2inst1 601 34156360 8
0x276b0261 3997701 db2inst1 601 163446784 6
0x00000000 3244039 db2inst1 601 131072 1 目标
0x276b0274 9273344 db2inst1 645 1
0x00000000 9306113 db2inst1 661 1
0x00000000 9371650 db2inst1 661 1
0x00000000 9404419 db2inst1 661 1
0x00000000 9437188 db2inst1 661 1
0x00000000 9469957 db2inst1 661 1
0x00000000 9502726 db2inst1 661 1
0x00000000 9535495 db2inst1 661 1
0x00000000 9568264 db2inst1 661 1
0x276b0273 9601033 db2inst1 667 1
0x00000000 9633802 db2inst1 661 1
0x00000000 9666571 db2inst1 661 1
0x00000000 9699340 db2inst1 661 1
0x00000000 9732109 db2inst1 661 1
0x276b0369 9830414 db2inst1 661 1
-- 移除
[db2inst1@localhost bin]$ ipcrm -s 458755
ipcrm: 已移除的 id (458755)
4、对实例操作
删除实例
# /opt/IBM/db2/V9.7/instance
# db2idrop instancename
如果删除实例失败,可能实例损坏,此时可执行两步:
1、删除/home/db2inst1/sqllib目录
2、删除/var/db2/global.reg文件
[db2inst1@localhost db2]$ cat /var/db2/global.reg
使用 db2greg 显示和改变全局注册表 (UNIX)
在 UNIX 和 Linux 平台上,可以使用 db2greg 命令来查看全局注册表。
在 DB2® V9.7 及更高版本中,DB2 全局概要文件注册表并非记录在文本文件 /default.env
中。现在,使用全局注册表文件 global.reg 来注册与当前 DB2 安装版本相关的 DB2 全局概要文件设置。全局注册表只存在于 UNIX 和 Linux 平台上: 对于 root 安装,全局注册表文件为 /var/db2/global.reg(HP-UX 上为 /var/opt/db2/global.reg)。 对于非 root安装,全局注册表文件为 $HOME/sqllib/global.reg,其中 $HOME 是非 root 用户的主目录。
全局注册表由以下三种不同记录类型组成: “服务”:服务记录包含产品级别的信息,如版本和安装路径。
“实例”:实例记录包含实例级别的信息,如实例名、实例路径、版本和“引导时启 动”标志。
“变量”:变量记录包含变量级别的信息,如变量名和变量值。 注释。 可使用 db2greg 工具查看全局注册表。此工具位于
sqllib/bin 和 bin 下的 install 目录中(以供作为 root 用户登录时使用)。可使用 db2greg 工具编辑全局注册表。在 root 安装中编辑全局注册表需要 root 权限。文章来源:https://www.toymoban.com/news/detail-422643.html
仅当 IBM 软件支持人员要求使用 db2greg 工具时,您才应使用该工具。文章来源地址https://www.toymoban.com/news/detail-422643.html
到了这里,关于<IBM DB2>《IBM DB2进程清理 for AIX》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!