跟踪SQL ERR

  在客户现场工作时经常会遇到一些关于SQL报错的问题,因为这类问题只是即时报错,可能不算比较重要的错误,一般来说也只有执行的本人才能看到这类错误,如果是晚上跑批,对SinoDB了解有限的人,那就更头疼了。
  现在介绍一个SinoDB自带的一个工具onmode ,他的-I参数可以跟踪指定的SQL ERR。工作原理为在执行SQL如果发生指定的err code,会立马生成一个af文档,收集当下数据库的状态信息放到DUMPDIR指定的路径下。
  语法如下:

onmode
-I stop verbose error trapping
-I <iserrno> [<session ID>] trap specified error for session ID

  提示:可以指定sqlerr+session id,只针对指定sid进行跟踪,如果不指定sid,则全局跟踪,关闭为onmode -I。

示例:
追踪244的错误信息
数据库版本: SinoDB12.10

1.准备环境

create table aa(id int);
insert into aa values(1);

2.使用sinodbms用户登录开启针对244错误的追踪

onmode -I 244

查看onlinelog发现如下信息:
23:26:02 Verbose error trapping set, errno = 244, session_id = -1

3.手动锁表,制造错误
Terminal 1
更新一条记录,但不提交:

Terminal 2
查询或者更新该记录,出现244错误:

查看onlinelog

16:27:08  Assert Failed: found errno 244 in session 62
16:27:08  Sinoregal Dynamic Server Version 12.10.FC7
16:27:08   Who: Session(62, sinodbms@IDS4, 27908, 0x44c28fd8)
		Thread(95, sqlexec, 44be7368, 1)
		File: rsdebug.c Line: 3398
16:27:08   Action: Use onmode -I to stop verbose error trapping.
16:27:08  stack trace for pid 19021 written to /opt/ids1210/tmp/af.44763f2
16:27:08   See Also: /opt/ids1210/tmp/af.44763f2
16:27:09  found errno 244 in session 62

4.可以看到online.log中有发生244 err的session id为62.因为af文档中只有关于session 62的一些信息,如果还需要更详细的资料,可以定制脚本去根据online.log中err信息作为触发条件再去系统中抓取我们想要的信息。