# 数据库错误提示排查

# 数据源配置

# 连接数据库失败

与数据库管理员确认,配置正确的数据源属性

# 数据源连接数量超过上限

当系统在线用户增多时,对数据库的访问量也会增大,数据源默认有连接数限制,建议增大数据源属性中的最大连接数,或者部署集群分担压力。

# 数据库错误

# 该数据库无法流式写入数据

提取文件数据源数据需要使用LOAD DATA INFILE语句,Mysql默认未启用,联系数据库管理员在Mysql配置文件中添加loose-local-infile=1,并重启Mysql服务。在数据库服务器启用后,若仍然出现该异常,则确认数据源属性URL中是否存在allowLoadLocalInfile=true

# 数据库函数不存在

可能原因:

  1. 当前数据库版本不支持使用该函数,或用户没有该存储过程的执行权限。

解决方法:

  1. 使用SuccBI提供的函数时出现该异常:低版本数据库未支持窗口函数,与数据库管理员确认数据库版本是否符合推荐版本中的要求,例如Mysql8+、Oracle9+。
  2. 使用SQL直通函数时出现该异常:与数据库管理员确认,使用的自定义函数是否已在数据库正确创建。

# 数据已存在

可能原因:

  1. 该问题可能由于插入数据的主键已经在目标表中存在,不允许再次插入。

解决方法:

  1. 数据加工时出现该异常:解决主键数据重复问题,可使用加工中的去重节点。
  2. SuperPage新增数据时出现该异常:确认绑定主键的输入组件值不重复;例如新增ID,可将对应输入组件默认值设置为UUID()

# 缺少执行权限

可能原因:

1、没有该存储过程或自定义函数的执行权限。

解决方法:

  1. 若调用存储过程、自定义函数时出现该异常,请确认当前数据源用户是否拥有该存储过程或自定义函数的执行权限。
  2. 若调用数据库常见函数时出现该异常,检查函数调用是否存在拼写错误、数据源的数据库版本是否支持此函数。

# 无权限访问数据库或表

与数据库管理员确认,当前数据源用户的权限设置是否符合需求。

# 数据长度超出字段的最大长度

可能原因:

  1. 插入的数据某个字段过长,超过了表字段的最大限制长度。

解决方法:

  1. 确认超长的数据是否正确。
  2. 数据正确的情况下,增大异常字段的长度以满足插入数据的要求。

# 数据类型与字段的类型不一致

  1. 确认插入的数据类型是否正确。
  2. 数据正确的情况下,修改异常字段类型与数据一致。

# 表名长度超过数据库允许最大长度

可能原因

  1. 跨库复制数据表时,不同数据库表名长度限制不一样,目标数据库的表名长度限制小于来源库
  2. 重命名物理表时,输入的表名超过数据库表名长度限制

解决方法:

  1. 复制数据表时,修改目标物理表表名,缩小表名的长度
  2. 重命名物理表时,缩小输入的表名的长度

# 对象不存在

  1. 数据库表被重命名或删除,恢复或重新创建数据库表。
  2. 数据库失效,与数据库管理员确认后,修改数据源属性指向有效数据库。

# 非空字段或主键字段不允许提交空值

  1. 补充该字段的值,使该值不为null。
  2. 或是根据业务需求,修改表结构,将字段设置成可以为空。

# 数据类型转换错误

可能原因:

  1. 可能是因为关联字段的数据类型不一致,如整型字段与非整型字段进行比较或关联。

解决方法:

  1. 确认关联的字段类型是否一致。
  2. 将字段转成相同类型再进行比较,如使用TOSTR(1.2345,"0.000")="1.235",把其他类型转成str类型再进行比较。
  3. 或调整表格字段类型,做到类型一致。

# 无法将不同类型的数据进行比较转换

可能原因:

  1. 该问题出现在vertica数据库中,原因可能是将两个不同类型的数据进行比较或是关联导致。

解决方法:

  1. 请确认进行比较或关联的字段的类型是否一致,如果不一致可以使用TOSTR(1.2345,"0.000")="1.235"等函数转成一致。
  2. 或调整表格字段类型,做到类型一致。

# 无法join多个其他表

可能原因:

  1. 可能是由于项目设置中Oracle使用Join语句选项被取消。若想继续使用join多个其他表,建议勾选。

解决方法:

  1. 打开 项目设置>数据
  2. 勾选 Oracle是否使用join语法,点击保存。

# SQL语法错误

可能原因:

  1. 使用了当前数据库不支持的语法。
  2. 类型转换函数,格式不对。
  3. 加工的sql组件、sql数据源、raw函数、直接sql查询等都可能导致sql语法错误。

解决办法:

  1. 检查语法,使用符合当前数据库的语法。

# 行长超过最大限制

可能原因:

  1. MySQL数据库限制了行的最大长度(不包括BLOB和TEXT),在MySQL 8.x中,最大不能超过65535字节

解决办法:

  1. 检查数据模型中字符字段的长度,缩短长度为合理值

  2. 对于字符长度很大的字段,将其类型修改为CLOB

# GROUP_CONCAT超过最大限制

可能原因:

  1. MySQL数据库通过参数group_concat_max_len限制了GROUP_CONCAT函数返回的最大长度,默认为1024
  2. 对于Oracle数据库,SuccBI中的GROUP_CONCAT函数翻译为Oracle中的listagglistagg使用时结果长度超过4000会报错

解决办法

  1. 在MySQL配置文件(linux/mac下是my.cnf,windows下是my.ini)的[mysqld]下修改参数设置为group_concat_max_len=102400102400具体的值可以根据实际情况调整。
  2. 对于Oracle数据库,可以在SuccBI的GROUP_CONCAT函数中给maxlength参数指定一个大于4000的值来解决,具体参见GROUP_CONCAT函数的使用
是否有帮助?
0条评论
评论