需求:管理员想要监控在一段时间里,用户DB2TEST跑过哪些SQL语句,这个在DB2中如何做到?

答: 可以采用STATEMENT类型的事件监控器:

测试过程:

1.) 管理员用户连库、创建事件监控器,并运行,下面的事件监控器专为用户DB2TEST的执行的STATEMENT,并将STMT evm group写入到表T1中,表T1会被在表空间USERSPACE1中创建:

db2 "connect to sample"
db2 "create EVENT MONITOR evmonSQLforUser for STATEMENTS where AUTH_ID = 'DB2TEST' write to table STMT(table t1 in userspace1)"
db2 "set event monitor evmonSQLforUser state=1"

2.) 用户DB2TEST连接到数据库后执行SQL语句:

$ db2 "select ID from testdb1"
ID
-----------1119112 record(s) selected.$ db2 "insert into test db1 values(100)"
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "db1 values" was found following "insert into
TEST ".  Expected tokens may include:  "<values>".  SQLSTATE=42601$ db2 "insert into testdb1 values(100)"
DB20000I  The SQL command completed successfully.$ db2 "create table testdb2(id int, name char(20)"
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "END-OF-STATEMENT" was found following "d int,
name char(20)".  Expected tokens may include:  ")".  SQLSTATE=42601$ db2 "create table testdb2(id int, name char(20))"
DB20000I  The SQL command completed successfully.

3.)管理员用户关闭事件监控器 ,并查看监控结果,可以看到无论是正确的SQL语句,还是错误的SQL语句,只要是用户DB2TEST发出的,都有记录(不知道为啥,每个select语句要记录4次,请自动忽略掉后面3个,还有一些的STMT_TEXT结果是空的,也请忽略):

db2 "set event monitor evmonSQLforUser state=0"C:\windows\system32>db2 "select START_TIME, substr(APPL_ID,1,40) as APPL_ID, substr(STMT_TEXT,1,80) as STMT_TEXT from t1"START_TIME                 APPL_ID                                  STMT_TEXT
-------------------------- ---------------------------------------- ------------------------------------------------------
2016-05-26-12.50.34.077069 *LOCAL.DB2INST1.160526031015             select ID from testdb1
2016-05-26-12.50.34.078434 *LOCAL.DB2INST1.160526031015             select ID from testdb1
2016-05-26-12.50.34.078434 *LOCAL.DB2INST1.160526031015             select ID from testdb1
2016-05-26-12.50.34.078434 *LOCAL.DB2INST1.160526031015             select ID from testdb1
2016-05-26-12.50.34.122445 *LOCAL.DB2INST1.160526031015
2016-05-26-12.50.43.366093 *LOCAL.DB2INST1.160526031015             insert into test db1 values(100)
2016-05-26-12.50.43.381406 *LOCAL.DB2INST1.160526031015
2016-05-26-12.50.50.586494 *LOCAL.DB2INST1.160526031015             insert into testdb1 values(100)
2016-05-26-12.50.50.587564 *LOCAL.DB2INST1.160526031015
2016-05-26-12.51.20.025009 *LOCAL.DB2INST1.160526031015             create table testdb2(id int, name char(20)
2016-05-26-12.51.20.025477 *LOCAL.DB2INST1.160526031015
2016-05-26-12.51.22.823535 *LOCAL.DB2INST1.160526031015             create table testdb2(id int, name char(20))
2016-05-26-12.51.22.962340 *LOCAL.DB2INST1.16052603101513 record(s) selected.

补充说明:

1.) 如果使用db2 "describe table t1"去查看,会发现T1有很多字段,会占用表空间,如果觉得不需要,可以在创建事件监控器的时候使用INCLUDE仅指定所需要的字段:

db2 "create EVENT MONITOR evmonSQLforUser for STATEMENTS where AUTH_ID = 'DB2TEST' write to table STMT(table t1 in userspace1 INCLUDES(START_TIME,APPL_ID,STMT_TEXT))"

2.)T1中每个字段的含义,可以参考下面的链接:

https://ibm.biz/Bd49yY

3.)创建事件监控器的完整语法可以参考下面的链接:

https://ibm.biz/Bd49yq

DB2中使用事件监控器获取某个时间段里某个用户执行的SQL语句相关推荐

  1. DB2中使用事件监控器抓取锁超时、死锁信息

    锁事件监控器可以抓取死锁.锁超时事件,包含这些事件发生时应用正在执行的SQL语句. 具体的介绍可以参考下面的官方文档: http://www.ibm.com/developerworks/cn/dat ...

  2. asp.net中, 如何在后台获取访问这个页面的用户的名字?

    asp.net中, 如何在后台获取访问这个页面的用户的名字? 在集成安全认证下, 可以利用以下代码获取: System.Security.Principal.WindowsIdentity wi =  ...

  3. ThinkPHP中的getLastSql函数---获取上次执行的SQL语句

    Thinkphp是我们经常用使用的一个php的MVC框架.通常我们把业务分类,分层,在不同的层处理不同的业务逻辑. 本文要讲的是model层,关于获取上次执行的SQL语句的问题.(用于日志记录,或者分 ...

  4. ef执行原生sql语句_EF Core中执行原生SQL语句

    一.课程介绍之所以今天录制这个系列文章的主要原因是,想在快速帮助到大家上手在ASP.NET Core WebAPI中结合EF Core来操作我们的数据库.EF Core的基础文章和基础课程实在是太多了 ...

  5. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数

    oracle中有没有可动态执行sql语句的函数 关注:233  答案:2  手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...

  6. php sql取数据生成数组中,php中实现数组生成要执行的sql语句

    本篇文章主要介绍php中实现数组生成要执行的sql语句,感兴趣的朋友参考下,希望对大家有所帮助. 会不会碰到这样一种情况呢?每次获取数据将数据和历史版本都有一定的差别,然而用ThinkPHP的addA ...

  7. laravel中查看执行的SQL语句

    今天想查看laravel框架中执行的SQL语句,百度了一圈,才找到,这文档真心看着不爽,下面上查看方法 DB::connection()->enableQueryLog();$navObj = ...

  8. thinkphp mysql 预处理_thinkPHP框架中执行原生SQL语句的方法

    本文实例讲述了thinkPHP框架中执行原生SQL语句的方法.分享给大家供大家参考,具体如下: 怎样在thinkphp里面执行原生的sql语句? $Model = new Model();//或者 $ ...

  9. SQL允许你用EXECUTE执行一个变量中定义的SQL语句,并且允许你在被执行的SQL语句中,再次嵌套入一个变量定义的语句,并且再次在其中用EXECUTE执行它...

    declare @sqlstr varchar(3000) set @sqlstr='declare @subsqlstr varchar(1000);' set @sqlstr=@sqlstr+'s ...

最新文章

  1. MySQL下mysql.sock丢失问题的解决[ubuntu, linux, mysqld.sock]
  2. ORACLE表空间的相关操作
  3. Jmeter(一)-精简测试脚本
  4. java 与 c#的 中 字符串比较“==”与“equals”的差异
  5. 用html制作广告图片切换效果,基于jquery实现图片广告轮换效果代码
  6. C#设计模式之23-访问者模式
  7. ES6-使用 super 关键字访问原型对象
  8. Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
  9. android office转pdf插件,Office自带Word转PDF插件 让office的另存为可存储为PDF文件
  10. 深山红叶袖珍PE工具箱V16正式版
  11. 微信小程序开发(1)—— 微信开发者工具
  12. 显卡mx150和230哪个好_MX130与MX150差距对比分析
  13. 各种定律(心理学定律、思考定律)
  14. 编译coccinelle-1.0.0-rc24时的错误Error: Unbound module Parmap以及解决方法
  15. 高德地图的测试key_如何获取高德地图api key
  16. Android系统屏幕亮度调节Brightness
  17. 吉林大学计算机伦理学,王爱民-吉林大学计算机科学与技术学院
  18. ROOT/RStringView.hxx:32:37: error: ‘experimental’ in namespace ‘std’ does not name a type
  19. Goodbye,OI!
  20. 安卓数据恢复_安卓手机禁广告、数据恢复

热门文章

  1. 【Small Problem In Work】Sci论文如何查询卷号期号,以及发表日期?
  2. Python识别二维码的两种方法(cv2)
  3. 标清、高清、超清、1080p
  4. feiq发送消息对方已下线
  5. 软考高级-系统架构师-软件架构设计练习题
  6. 排班问题——Nurse Rostering Problem(NRP)实战
  7. libev和libuv的区别
  8. python的ai写作_使用Python创建AI比你想象的轻松
  9. 基于近场动力学的二维疲劳裂纹扩展模型_高强度螺栓疲劳寿命分析与设计改进...
  10. 三、python实现模拟退火算法