系统默认的死锁事件监控器 db2detaildeadlock
db2diag.log
日志
db2cmd --> db2diag -g "message^=ADM2017C"
-----------------------------------------
2012-05-02-16.00.50.522000+480 E6349H690 LEVEL: Warning
PID : 5128 TID : 4924 PROC : db2syscs.exe
INSTANCE:
DB2 NODE : 000 DB : INFODMS
APPHDL : 0-11 APPID: *LOCAL.DB2.120502080053
AUTHID : ADMINISTRATOR
EDUID : 4924 EDUNAME: db2evmli (DB2DETAILDEADLOCK)
FUNCTION: DB2
UDB, database monitor, sqmEvmonWriter::activate, probe:40
MESSAGE : ADM2017C The Event Monitor "DB2DETAILDEADLOCK" has reached its file
capacity. Delete the files in the target directory
"D:DB2NODE0000SQL00001DB2EVENTdb2detaildeadlock" or move them to
another directory.
在做以下处理时报错:
-------------------------
db2 set event monitor db2detaildeadlock state 1
db2 flush event monitor db2detaildeadlock
SQL1617N 指定的事件监视器已达到其 MAXFILES 和 MAXFILESIZE 限制。
SQLSTATE 54031: 已对事件监视器分配了最大
文件数
处理:
del /f/s/q D:DB2NODE0000SQL00001DB2EVENTdb2detaildeadlock*.EVT
db2 connect to dbname user username using pwd
db2 set event monitor db2detaildeadlock state 1
db2 set event monitor db2detaildeadlock state 0
补充一:
忘了一点,删除死锁监控文件时,保留00000000.EVT,不然下次想格式化会报"Cannot open Event Monitor file"错误。
copy 00000000.EVT 00000000.EVT.BAK
格式化事件监控跟踪文件
db2evmon -db dbname -evm db2detaildeadlock > deadlock_event_monitor_fmt.txt
补充二:
其实没那么复杂,删除事件监视文件时删彻底一点,连DB2EVENT.CTL一起删,这样在下次再激活该事件监视器时会从00000000开始编号,呵呵!
del /f/s/q D:DB2NODE0000SQL00001DB2EVENTdb2detaildeadlock*.*
Windows下DB2端口查看/修改/分配
简单总结Windows下DB2端口有关操作.
1. 端口查看
1. 在DB2
命令行中, 运行: DB2 GET DBM CFG |FIND "SVCENAME", 将会获得如下输出:
TCP/IP Service name (SVCENAME) = db2c_DB2
2. 打开c:windowssystem32driversetcservices, 查看1中找到的服务名称对应的端口号, 如:
db2c_DB2 50000/t
cp2. 端口修改
直接修改ttcServices中的对应端口. 然后db2stop, db2start即可.
可通过te
lnet ip:port 检查是否已启动.
3. 为新建的Insta
nce分配端口
1. 增加Service: 编辑etcservices文件, 增加Service名称及端口, 如增加:
db2c_MYINST 50006/tcp
2. 分配端口:
db2 UPDATE DBM CFG USING SVCENAME db2c_MYINST
/*******************************************************************************/
一个用户赋予可以select数据库中的所有表的权限
db2数据库不支持对一个数据库中所有表的授权。如果遇到一个需求是新建一个用户,但是要求这个用户只能select一个数据库中的所有表格,但是没有其他权限。这就需要一个批量脚本。
如下是一个类似的需求,数据库的版本是V9.5
第一步:新建一个client用户pmap_fgs
mkuser -a id=321 groups=app pgrp=app home=/home/usr/pmap_fgs cpu='-1' fsize='-1' data='-1' stack='-1' rlogin='false' pmap_fgs
注意:用户的group不能和实例用户是一个组,否则新建的用户就和实例用户有相同的权限。 echo pmap_fgs:pmap_fgs|chpasswd
pwdadm -c pmap_fgs
chsec -f /etc/security/passwd -s pmap_fgs -a flags=NOCHECK
/opt/IBM/db2/V9.5/instance/db2icrt -s client -u pmap_fgs pmap_fgs
第二步:创建授权脚本grant.sh
db2 connect to $1
rm -f table.txt
db2 grant connect on database to user pmap_fgs
db2 -x "select TABSCHEMA,tabname from syscat.tables with ur">table.txt
cat table.txt|while read schema tabname
do
db2 grant select on table $schema.$tabname to user pmap_fgs
done
第三步:执行脚本对用户pmap_fgs授权
sh grant.sh
DBNAME这样,新建的用户pmap_fgs就对数据库中所有表格就有了select权限。
/***************************************************************************************/
添加新评论0 条评论