建立数据库连接失败
Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
问题分析:客户端与服务端网络不通、端口错误或待连接CN异常。
- 客户端ping服务端IP,查看网络是否畅通,网络不通则需解决网络问题。
- 检查URL中连接CN的端口是否正确,若端口不正确则需修改为正确的端口(默认为8000)。
FATAL: Invalid username/password,login denied.
问题分析:用户名或密码配置错误。
处理方法:检查用户名密码是否为数据库用户名和密码,将其修改为正确的数据库用户名和密码。
No suitable driver found for XXXX
问题分析:通过JDBC建连时URL格式错误。
- gsjdbc4.jar对应URL格式为: jdbc:postgresql://host:port/database
- 在使用pom依赖时对应8.1.x版本
- gsjdbc200.jar对应URL格式为:jdbc:gaussdb://host:port/database
- 在使用pom依赖时对应8.1.x-200版本
conflict
问题分析:JDBC jar包和应用程序冲突。例如JDBC和应用程序拥有相同路径相同名称的类导致:
- gsjdbc4.jar和开源postgresql.jar冲突,两者具有完全相同的类名。
- gsjdbc4.jar由于IAM特性引入了一些其他工具,例如fastjson,和应用程序中的fastjson冲突。
处理方法:
- 针对和开源postgresql.jar的冲突,DWS提供了gsjdbc200.jar,使用和开源驱动不同的url格式和驱动路径,驱动名由org.postgresql.Driver修改为com.huawei.gauss200.jdbc.Driver,URL格式由org:postgresql://host:port/database改为jdbc:gaussdb://host:port/database,彻底解决了和开源jar包的冲突。
- 针对JDBC引入的jar和应用程序中引入jar的冲突,可以通过maven的shade修改了jar中类的路径,解决此类冲突。
-
排查使用的JDBC驱动是gsjdbc4.jar还是gsjdbc200.jar,如果是gsjdbc4.jar应该替换为gsjdbc200.jar,尝试建立连接。
对于pom依赖,将8.1.x版本替换为8.1.x-200版本。
org.postgresql.util.PSQLException: FATAL: terminating connection due to administrator command Session unused timeout
问题分析:会话超时导致连接断开。
处理方法:排查CN和客户端JDBC上的超时配置,按业务实际情况调长超时时间或关闭超时设置。
-
查看报错的CN日志,如果有session unused timeout这样的日志,说明是会话超时导致的。
解决办法:
- 登录控制台单击指定集群名称。
- 在左侧导航栏选择“参数修改”,搜索参数“session_timeout”查看超时时间参数。
- 将session_timeout的CN、DN参数值设置为0,详情可参见修改数据库参数。
Connection refused: connect.
问题分析:第三方工具的默认驱动不兼容。
处理方法:用户可更换JDBC驱动包,查看是否正常连接。
Connections could not be acquired from the underlying database!
问题分析:按照新建连接排查项进行排查:
- 驱动配置是否有误。
- 数据库连接地址是否有误。
- 密码或账号是否有误。
- 数据库未启动或无权访问。
- 项目未引入对应的驱动jar包。
处理方法:
- 排查驱动配置,将其修改为正确的驱动配置。
- gsjdbc4.jar driver=org.postgresql.Driver
- gsjdbc200.jar driver=com.huawei.gauss200.jdbc.Driver
- 排查数据库连接地址,将其修改为正确的数据库连接地址。
- gsjdbc4.jar对应jdbc:postgresql://host:port/database
- gsjdbc200.jar对应jdbc:gaussdb://host:port/database
- 排查用户名密码是否为数据库用户名或密码,将其修改为正确的数据库用户名或密码。
- 排查数据库是否启动或有权限访问。
-
检查使用的JDBC驱动是gsjdbc4.jar还是gsjdbc200.jar,请使用正确JDBC驱动jar包。
- gsjdbc4.jar:与PostgreSQL保持兼容,其中类名、类结构与PostgreSQL驱动完全一致,曾经运行于PostgreSQL的应用程序可以直接移植到当前系统中使用。
- gsjdbc200.jar:如果同一JVM进程内需要同时访问PostgreSQL及GaussDB(DWS) 请使用该驱动包。该包主类名为“com.huawei.gauss200.jdbc.Driver”(即将“org.postgresql”替换为“com.huawei.gauss200.jdbc”),数据库连接的URL前缀为“jdbc:gaussdb”,其余与gsjdbc4.jar相同。
JDBC DEV环境没问题,测试环境连接出错报空指针或URI报错uri is not hierarchical
问题分析:某些虚拟环境不支持获取扩展参数,需关闭。
处理方法:在连接时可设置连接参数“connectionExtraInfo=false”,详情可参见使用JDBC连接数据库。
1
|
jdbc:postgresql://host:port/database?connectionExtraInfo=false |
使用开源JDBC SSL方式连接DWS报错
问题分析:使用开源JDBC会进行SSL全校验,校验url是否完全匹配。
处理方法:在开源连接时可设置连接参数“sslmode=require”。
1
|
jdbc:postgresql://host:port/database?sslmode=require |
在CopyManager场景使用连接池获取连接,Connection无法转换为BaseConnection
问题分析:BaseConnection为非公开类,需要对连接池对象解封装然后获取原始PGConnection。
处理方法: 对当前对象解包装,返回原始对象以允许访问未公开方法。
1 2 3 4 5 |
//解封装 PGConnection unwrap = connection.unwrap(PGConnection.class); //转换BaseConnection BaseConnection baseConnection = (BaseConnection)unwrap; CopyManager copyManager = new CopyManager(baseConnection); |