nanjing_2013
作者nanjing_2013·2012-05-08 16:12
系统架构师·北京卓望

常用操作实践总结

字数 3621阅读 1260评论 0赞 0
系统默认的死锁事件监控器 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/tcp

2. 端口修改

直接修改ttcServices中的对应端口. 然后db2stop, db2start即可.

可通过telnet ip:port 检查是否已启动.

3. 为新建的Instance分配端口

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

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广