---
order: 99
navTitle: 错误提示排查
---
# 数据库错误提示排查

## 数据源配置{#ds-config}

### 连接数据库失败{#err.db.connectionFail}

与数据库管理员确认，配置正确的[数据源属性](../datasources.md#properties-setting)。

### 数据源连接数量超过上限{#err.db.poolFull}

当系统在线用户增多时，对数据库的访问量也会增大，数据源默认有连接数限制，建议增大[数据源属性](../datasources.md#properties-setting)中的`最大连接数`，或者部署[集群](../../devops/cluster/README.md)分担压力。

## 数据库错误{#db-error}

### 该数据库无法流式写入数据{#err.db.cantBulkLoad}

提取文件数据源数据需要使用`LOAD DATA INFILE`语句，Mysql默认未启用，联系数据库管理员在[Mysql配置文件](../../devops/install/database/MySQL.md)中添加`loose-local-infile=1`，并重启Mysql服务。在数据库服务器启用后，若仍然出现该异常，则确认[数据源属性](../datasources.md#properties-setting)的`URL`中是否存在`allowLoadLocalInfile=true`。

### 数据库函数不存在{#err.db.functionNotExist}

**可能原因：**

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

**解决方法：**

1. 使用SuccBI提供的[函数](../../exp/func/README.md)时出现该异常：低版本数据库未支持窗口函数，与数据库管理员确认数据库版本是否符合[推荐版本](../../devops/install/database/README.md)中的要求，例如Mysql8+、Oracle9+。
2. 使用[SQL直通函数](../../exp/func/others/RAWSQL_STR.md)时出现该异常：与数据库管理员确认，使用的自定义函数是否已在数据库正确创建。

### 数据已存在{#err.db.duplicateKey}

**可能原因：**

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

**解决方法：**

1. 数据加工时出现该异常：解决主键数据重复问题，可使用加工中的[去重](/data-process/daduplicated)节点。
2. SuperPage新增数据时出现该异常：确认绑定主键的输入组件值不重复；例如新增ID，可将对应输入组件默认值设置为[UUID()](../../exp/func/string/UUID.md)。

### 缺少执行权限{#err.db.routineDenied}

**可能原因：**

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

**解决方法：**

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

### 无权限访问数据库或表{#err.db.commandDenied}

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

### 数据长度超出字段的最大长度{#err.db.columnValueTooLong}

**可能原因：**

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

**解决方法：**

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

### 数据类型与字段的类型不一致{#err.db.columnTypeDisaccord}

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

### 表名长度超过数据库允许最大长度{#err.db.tableNameOutOfBounds}

**可能原因**

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

**解决方法：**

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

### 对象不存在{#err.db.objectNotFound}

1. 数据库表被重命名或删除，恢复或重新创建数据库表。
2. 数据库失效，与数据库管理员确认后，修改[数据源属性](../datasources.md#properties-setting)指向有效数据库。

### 非空字段或主键字段不允许提交空值{#err.db.notAllowNull}

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

### 数据类型转换错误{#err.db.invalidNumber}

**可能原因：**

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

**解决方法：**

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

### 无法将不同类型的数据进行比较转换{#err.db.differentTypeConvent}

**可能原因：**

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

**解决方法：**

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

### 无法join多个其他表{#err.db.notAllowedJoin}

**可能原因：**

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

**解决方法：**

1. 打开 [项目设置>数据](../../project-manage/data-mgr-setting.md)。
2. 勾选 Oracle是否使用join语法，点击保存。

### SQL语法错误{#err.db.sqlSyntax}

**可能原因：**

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

**解决办法：**

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

### 行长超过最大限制{#err.db.rowSizeOutOfBounds}

**可能原因：**

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

**解决办法：**

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

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

### GROUP\_CONCAT超过最大限制{#err.db.groupConcatRowOutOfBounds}

**可能原因：**

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

**解决办法**

1. 在MySQL配置文件(linux/mac下是my.cnf，windows下是my.ini)的`[mysqld]`下修改参数设置为`group_concat_max_len=102400`，`102400`具体的值可以根据实际情况调整。
2. 对于Oracle数据库，可以在SuccBI的`GROUP_CONCAT`函数中给`maxlength`参数指定一个大于`4000`的值来解决，具体参见[GROUP\_CONCAT函数的使用](../../exp/func/analysis/GROUP_CONCAT.md)。
