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

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

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

  1. 使用提供的用户凭据、主机、端口和 SID 作为数据库名称的 Oracle 连接。
  2. 使用提供的用户凭据和 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 服务器,新建 -> 分析报告,由于上述异常,打开的对话框没有显示我的多维数据集。

标签: oracle pentaho olap mondrian tns


【解决方案1】:

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

【讨论】:

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

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

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

  1. 按 SID
    jdbc:oracle:thin:[<user>/<password>]@<host>[:<port>]:<SID>

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

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

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

  1. 通过 TNSName
    jdbc: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 名称。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 2017-09-13
    • 2010-09-17
    • 2013-03-27
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多