暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8s 问题排查方法

原创 ZM 2023-05-29
1637

本文介绍,使用GBase 8s数据库过程中,遇到SQL执行报错,怎么排查问题,常用的几种方法如下:


方法一:如果执行SQL语句失败,会有报错信息,比如:

“-201 A syntax error has occurred.”

“-206 The specified table is not in the database.”

这些问题比较直观,可以直接看出原因,举例:

--示例1,206错误,表t1不存在

> select * from t1;

  206: The specified table (t1) is not in the database.

  111: ISAM error:  no record found.
Error in line 1
Near character position 16

--示例2,201语法错误,错误位置“Near character position 10”,可以发现是“from”写成了“fro”

> select * fro t1;

  201: A syntax error has occurred.
Error in line 1
Near character position 10


方法二:finderr工具,查询报错信息详情

##语法规则 finderr error_number
##示例1
finderr 201

##示例2
finderr 206


方法三:onmode工具

如果上述方法还不能定位问题,另一个收集信息的方法:onmode -I(控制诊断信息收集)

使用onmode -I开始和停止诊断信息的收集

开启:遇到错误时,执行onmode -I iserrno(iserrno:要收集诊断信息的错误编号)选项启动收集收集诊断信息。
也可以指定会话ID,onmode -I sid(sid:要收集诊断信息的会话ID)

关闭:执行onmode -I(不需要附加其他参数),即停止诊断信息的收集

--示例:创建存储过程成功,调用存储过程时报错,不好定位问题
create database test with log;
set environment sqlmode 'oracle';
--创建存储过程
create or replace procedure pro1 as
sqlstr varchar(100);
begin
sqlstr := 'create create table t1(id int)';
execute immediate sqlstr;
end;
/
--调用
call pro1();

如上图所示,procedure创建成功了,但是调用时报错,此时用前两种方法不能定位问题。

这里用方法三解决问题:执行onmode -I 201,201为上图报错语句的错误号,并再次调用pro1。


执行完上述操作,进到数据库实例安装路径下的tmp目录中,cd $GBASEDBTDIR/tmp,会看到af前缀文件。


查看af文件,可以搜索onstat -g sql,会看到当时错误的语句以及“Last parsed SQL statement”。

由此定位到问题语句“create create table t1(id int)”


找到上述SQL,可以单独执行这句,发现又是语法错误,出现两次“create”关键字。


问题解决。


本文只是提供一些思路,解决问题的方法很多,不仅限于此。



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论