VPN环境下Oracle数据库连接报ORA-12899错误,求排查方案
排查Oracle连接报错ORA-12899: HOST字段值过长问题
错误信息
2023-03-21 13:44:15.150 DEBUG 15189 --- [ restartedMain] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to create/setup connection: ORA-00604: error occurred at recursive SQL level 1 ORA-12899: value too large for column "AUD"."USER_LOG"."HOST" (actual: 31, maximum: 30) ORA-06512: at line 2
问题根源
该错误是数据库审计表AUD.USER_LOG的HOST字段最大长度限制为30,但当前客户端连接时传递的主机标识(主机名或JDBC驱动生成的标识)长度达到31,超出了字段容量。
排查与解决步骤
1. 检查本地主机名长度
在macOS终端执行命令查看当前主机名:
hostname
如果输出字符数超过30,可直接修改短主机名(通过系统偏好设置->共享->修改计算机名称),或在JDBC连接中手动指定短标识。
2. 强制指定JDBC连接的主机标识
在Spring Boot的数据库连接URL中添加oracle.net.client_hostname参数,手动设置一个不超过30字符的主机名,示例:
# application.properties spring.datasource.url=jdbc:oracle:thin:@//your-db-host:port/service-name?oracle.net.client_hostname=my-mac
该参数会强制Oracle JDBC驱动传递指定的短主机名,替代系统默认的长主机名。
3. 升级Oracle JDBC驱动版本
当前使用JDK 19,建议匹配使用适配JDK 11+的最新Oracle JDBC驱动(如ojdbc11),避免驱动与JDK版本适配问题导致主机名解析异常。在pom.xml中更新依赖:
<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc11</artifactId> <version>21.13.0.0</version> </dependency>
4. 联系DBA调整数据库字段长度(可选)
若无法修改客户端配置,可联系DBA调整审计表的HOST字段长度,执行SQL:
ALTER TABLE AUD.USER_LOG MODIFY HOST VARCHAR2(60);
此操作需要数据库修改权限,需确认业务允许后执行。
验证方法
使用sqlplus或其他客户端连接数据库,执行以下SQL查看当前会话的主机标识:
SELECT SYS_CONTEXT('USERENV','HOST') FROM DUAL;
检查返回值的字符数是否超过30,确认问题根源。
内容的提问来源于stack exchange,提问作者Ibhagawati
相关产品推荐
相关产品推荐

