Mondrian 无法使用 oracle TNS 名称作为 JDBC 数据源

Posted

技术标签:

【中文标题】Mondrian 无法使用 oracle TNS 名称作为 JDBC 数据源【英文标题】:Mondrian cannot use oracle TNS name as JDBC Data source 【发布时间】:2018-08-08 14:41:55 【问题描述】:

有人可以帮忙解决以下问题吗:

我在 Pentaho BA Server 中创建了 2 个 JDBC 数据源:

    使用提供的用户凭据、主机、端口和 SID 作为数据库名称的 Oracle 连接。 使用提供的用户凭据和 TNS 名称作为数据库名称的 Oracle 连接,因为如果有 SERVICE NAME,那么我应该使用 TNS 名称。

以上两个连接都 ping 成功。

当我使用 #1 选项作为我的 Cube 架构的 JDBC 数据源时 - 一切正常。

但是,当我使用#2 选项时,无法加载多维数据集,并且在日志文件中出现以下异常:

java.lang.RuntimeException: Unable to get connnection 
jdbc:mondrianataSource=Report DB; EnableXmla=false; overwrite=false; 
Locale=en_US; Catalog=mondrian:/My_Cube_Schema; UseContentChecksum=true
at com.pentaho.analyzer.service.impl.OlapConnectionManagerImpl.createConnection(SourceFile:152)
at com.pentaho.analyzer.service.impl.OlapConnectionManagerImpl.createConnection(SourceFile:75)
at com.pentaho.analyzer.service.impl.a.getConnection(SourceFile:55)

所以,问题是,是否可以使用 #2 选项,因为我只有 SERVICE NAME 来连接数据库。

任何帮助将不胜感激!

【问题讨论】:

您的意思是说您在 PSW 中创建了一个多维数据集,并且在将其发布到 BA 服务器时遇到了问题? @WorkingHard..,不,当我从 PSW 发布我的多维数据集时没有问题。来自 PSW 的多维数据集已成功发布。当我尝试创建分析报告时发生异常。以下是我的重现步骤:我转到 BA 服务器,新建 -> 分析报告,由于上述异常,打开的对话框没有显示我的多维数据集。 【参考方案1】:

问题背后的原因是连接名称。 PSW 和 BA 服务器的连接名称必须相同,这是基本要求。

【讨论】:

感谢您的建议,但更改连接名称无济于事。此外,在 PSW 中,我尝试将连接名称更改为任何随机名称,将其发布并在 BA 服务器中将已发布多维数据集的 JDBC 数据源更改为已在 BA 服务器上创建的一个 - 对于一个连接它有效,而对于另一个它不不工作。虽然当我尝试在 BA 服务器中编辑它们时,两个连接都成功 ping。我在最初的帖子中写过它们之间的区别。 你有没有尝试过我在帖子中描述为第二个选项的这种连接?也许蒙德里安根本不支持这种连接? 每次更改后我都会清除缓存。结果相同。 好的。那就不知道了。让正在使用 oracle 的人回答这个问题。【参考方案2】:

我找到了解决方法,但不会将其标记为答案,因为我正在搜索适用于 TNSName 的解决方案。

从以下页面http://www.orafaq.com/wiki/JDBC我发现了3种有效的JDBC URL方式:

    按 SIDjdbc:oracle:thin:[<user>/<password>]@<host>[:<port>]:<SID>

例如:jdbc:oracle:thin:@myhost:1521:orcl

    按服务名称jdbc:oracle:thin:[<user>/<password>]@//<host>[:<port>]/<service>

例如:jdbc:oracle:thin:@//myhost:1521/orcl

    通过 TNSNamejdbc:oracle:thin:[<user>/<password>]@<TNSName>

例如:jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=<host>)(PORT=<port>))(CONNECT_DATA=(SERVICE_NAME=<service>)))

这是我在问题中描述的案例的屏幕截图: 对于 #1 选项:使用提供的用户凭据、主机、端口和 SID 作为数据库名称的 Oracle 连接

对于#2 选项:Oracle Connections 使用提供的用户凭据和 TNS 名称作为数据库名称,因为如果有 SERVICE NAME,那么我应该使用 TNS 名称。

最后,适用于我当前情况的解决方案(请注意,服务名称带有斜杠):

【讨论】:

以上是关于Mondrian 无法使用 oracle TNS 名称作为 JDBC 数据源的主要内容,如果未能解决你的问题,请参考以下文章

Cx Oracle 'TNS 无法解析连接标识符'

oracle在使用tnsping时,老是提醒:TNS-03505: 无法解析名称?

Oracle几个基础配置问题:ORA-12154: TNS: 无法解析指定的连接标识符ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务ORA-12516 TNS监听程序找(代

如何解决ORA-12154:TNS:无法解析指定的连接标识符

请教Oracle11监听无法自动启动怎么办?总提示TNS-12541: TNS: 无监听程序 错误。

Oracle几个基础配置问题:ORA-12154: TNS: 无法解析指定的连接标识符ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务ORA-12516 TNS监听程序找(代