GBase 8s
其他
问答

配置多个数据库 数据库厂商标识(databaseIdProvider) properties.put("GBase 8s Server","oracle");启动报错

发表于2024-04-12 15:17:57253次浏览4个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】: gbase 8s

【操作系统】:

【CPU】:

【问题描述】*: 配置多个数据库 数据库厂商标识(databaseIdProvider) properties.put("GBase 8s Server","oracle");启动报错

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.GenericJDBCException: Error accessing table metadata
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
    ... 21 common frames omitted
Caused by: org.hibernate.exception.GenericJDBCException: Error accessing table metadata
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
    at org.hibernate.tool.schema.extract.internal.AbstractInformationExtractorImpl.convertSQLException(AbstractInformationExtractorImpl.java:124)
    at org.hibernate.tool.schema.extract.internal.AbstractInformationExtractorImpl.getTables(AbstractInformationExtractorImpl.java:577)
    at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.getTablesInformation(DatabaseInformationImpl.java:122)
    at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:68)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:220)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:123)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:196)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:85)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:335)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1498)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
    ... 25 common frames omitted
Caused by: java.sql.SQLException: 无法引用区分大小写的外部数据库。
    at com.gbasedbt.util.IfxErrMsg.getSQLException(IfxErrMsg.java:409)
    at com.gbasedbt.jdbc.IfxSqli.a(IfxSqli.java:3576)
    at com.gbasedbt.jdbc.IfxSqli.D(IfxSqli.java:3856)
    at com.gbasedbt.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2746)
    at com.gbasedbt.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2671)
    at com.gbasedbt.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1616)
    at com.gbasedbt.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1543)
    at com.gbasedbt.jdbc.IfxResultSet.a(IfxResultSet.java:215)
    at com.gbasedbt.jdbc.IfxStatement.executeQueryImpl(IfxStatement.java:1253)
    at com.gbasedbt.jdbc.IfxStatement.executeQuery(IfxStatement.java:350)
    at com.gbasedbt.jdbc.DatabaseMetaDataOracleMode.getTables(DatabaseMetaDataOracleMode.java:799)
    at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.processTableResultSet(InformationExtractorJdbcDatabaseMetaDataImpl.java:64)
    at org.hibernate.tool.schema.extract.internal.AbstractInformationExtractorImpl.getTables(AbstractInformationExtractorImpl.java:565)
    ... 37 common frames omitted
Caused by: java.sql.SQLException: null
    at com.gbasedbt.util.IfxErrMsg.getSQLException(IfxErrMsg.java:409)
    at com.gbasedbt.jdbc.IfxSqli.D(IfxSqli.java:3861)
    ... 47 common frames omitted

Process finished with exit code 0
 

 

 

 

评论

登录后才可以发表评论
用户头像
GBase用户137发表于 2年前
方便告知部署的GBase 8s版本和所在操作系统环境吗?
GBase用户15957发表于 2年前
@GBase用户137:GBase 8s版本:GBase8sV8.8_TL_3.5.1_x86_64.7z
所在操作系统环境:CentOS Linux 7 (Core)

部署成功后,用官方的 GBase8s Data Studio工具能正常访问,增删改查SQL语句都没问题。

springboot 的数据源配置如下:
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
master:
## gbase 8s
driver-class-name: com.gbasedbt.jdbc.Driver
url: jdbc:gbasedbt-sqli://127.0.0.1:9088/qa:GBASEDBTSERVER=gbaseserver;SQLMODE=Oracle;DB_LOCALE=zh_CN.5488
username: gbasedbt
password: GBase123
# 从数据源开关/默认关闭
enabled: true
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: false
# 设置白名单,不填则允许所有访问
allow: 127.0.0.1
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: admin
login-password: admin123
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true


// 代码增加多数据源配置
@Bean
public DatabaseIdProvider databaseIdProvider() {
VendorDatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
Properties properties = new Properties();
// Properties 中 "Oracle" 为 DatabaseProductName 每种数据库的JDBC都有自己Name,
// 如果下面列的没有自己的数据库类型, 可以Debug模式下调试VendorDatabaseIdProvider.getDatabaseName()
properties.put("Oracle","oracle");
properties.put("MySQL","mysql");
properties.put("GBase 8s Server","oracle");
properties.put("GBASE8S","oracle");
databaseIdProvider.setProperties(properties);
return databaseIdProvider;
}


启动后,就是上面的报错信息。
用户头像
wty发表于 2年前
Caused by: java.sql.SQLException: 无法引用区分大小写的外部数据库。
查一下 sysmaster 库里的 sysdatabase 表,看一下is_case_insens,1表示ncha/nvarchar区分大小写,0表示不区分大小写,这两种库之间不能互相查询,把不一样的库重新建一下。
从报错看应该是你当前连的这个库设置成不区分了,默认是区分的。
用户头像
liaosnet发表于 2年前
Caused by: java.sql.SQLException: 无法引用区分大小写的外部数据库。
这个库创建时使用了不区分大小写的,无法引用区分大小写的库。
你这个库在sysmaster:sysdatabases中的is_case_insens (值为1)应该与系统库不同。
最佳回答