DB2中使用事件监控器获取某个时间段里某个用户执行的SQL语句
需求:管理员想要监控在一段时间里,用户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语句相关推荐
- DB2中使用事件监控器抓取锁超时、死锁信息
锁事件监控器可以抓取死锁.锁超时事件,包含这些事件发生时应用正在执行的SQL语句. 具体的介绍可以参考下面的官方文档: http://www.ibm.com/developerworks/cn/dat ...
- asp.net中, 如何在后台获取访问这个页面的用户的名字?
asp.net中, 如何在后台获取访问这个页面的用户的名字? 在集成安全认证下, 可以利用以下代码获取: System.Security.Principal.WindowsIdentity wi = ...
- ThinkPHP中的getLastSql函数---获取上次执行的SQL语句
Thinkphp是我们经常用使用的一个php的MVC框架.通常我们把业务分类,分层,在不同的层处理不同的业务逻辑. 本文要讲的是model层,关于获取上次执行的SQL语句的问题.(用于日志记录,或者分 ...
- ef执行原生sql语句_EF Core中执行原生SQL语句
一.课程介绍之所以今天录制这个系列文章的主要原因是,想在快速帮助到大家上手在ASP.NET Core WebAPI中结合EF Core来操作我们的数据库.EF Core的基础文章和基础课程实在是太多了 ...
- oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数
oracle中有没有可动态执行sql语句的函数 关注:233 答案:2 手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...
- php sql取数据生成数组中,php中实现数组生成要执行的sql语句
本篇文章主要介绍php中实现数组生成要执行的sql语句,感兴趣的朋友参考下,希望对大家有所帮助. 会不会碰到这样一种情况呢?每次获取数据将数据和历史版本都有一定的差别,然而用ThinkPHP的addA ...
- laravel中查看执行的SQL语句
今天想查看laravel框架中执行的SQL语句,百度了一圈,才找到,这文档真心看着不爽,下面上查看方法 DB::connection()->enableQueryLog();$navObj = ...
- thinkphp mysql 预处理_thinkPHP框架中执行原生SQL语句的方法
本文实例讲述了thinkPHP框架中执行原生SQL语句的方法.分享给大家供大家参考,具体如下: 怎样在thinkphp里面执行原生的sql语句? $Model = new Model();//或者 $ ...
- SQL允许你用EXECUTE执行一个变量中定义的SQL语句,并且允许你在被执行的SQL语句中,再次嵌套入一个变量定义的语句,并且再次在其中用EXECUTE执行它...
declare @sqlstr varchar(3000) set @sqlstr='declare @subsqlstr varchar(1000);' set @sqlstr=@sqlstr+'s ...
最新文章
- MySQL下mysql.sock丢失问题的解决[ubuntu, linux, mysqld.sock]
- ORACLE表空间的相关操作
- Jmeter(一)-精简测试脚本
- java 与 c#的 中 字符串比较“==”与“equals”的差异
- 用html制作广告图片切换效果,基于jquery实现图片广告轮换效果代码
- C#设计模式之23-访问者模式
- ES6-使用 super 关键字访问原型对象
- Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
- android office转pdf插件,Office自带Word转PDF插件 让office的另存为可存储为PDF文件
- 深山红叶袖珍PE工具箱V16正式版
- 微信小程序开发(1)—— 微信开发者工具
- 显卡mx150和230哪个好_MX130与MX150差距对比分析
- 各种定律(心理学定律、思考定律)
- 编译coccinelle-1.0.0-rc24时的错误Error: Unbound module Parmap以及解决方法
- 高德地图的测试key_如何获取高德地图api key
- Android系统屏幕亮度调节Brightness
- 吉林大学计算机伦理学,王爱民-吉林大学计算机科学与技术学院
- ROOT/RStringView.hxx:32:37: error: ‘experimental’ in namespace ‘std’ does not name a type
- Goodbye,OI!
- 安卓数据恢复_安卓手机禁广告、数据恢复