GBase 8s
运维管理
文章

常见SQL错误的排查方法

发表于2024-07-03 13:14:241237次浏览0个评论

常见sql错误的排查方法

一、如果执行SQL时遇到报错,定位问题的方法一般有:

方法一,SQL语句的报错信息,一般比较直观:

“-201 A syntax error has occurred.”
“-206 The specified table <table-name> is not in the database.”

方法二,可以用finderr命令查看具体错误信息,比如:

方法三,查看实例的online.log,该log的路径由onconfig中参数MSGPATH控制

#MSGPATH      --指定日志文件的路径

MSGPATH $GBASEDBTDIR/tmp/online.log

二、以上还无法定位问题的话,另一个收集信息的方法,onmode -I:

使用onmode -I选项来启动或停止诊断信息的收集。
当遇到错误时,可以指定onmode -I iserrno选项以开始收集诊断信息。此外,还可以指定会话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();

执行onmode -I 201,201为上图报错语句的错误号

执行完上述操作,cd $GBASEDBTDIR/tmp,会看到af前缀文件

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

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

 

评论

登录后才可以发表评论