首页 > 解决方案 > Mondrian 无法使用 oracle TNS 名称作为 JDBC 数据源

问题描述

有人可以帮助解决以下问题:

我在 Pentaho BA 服务器中创建了 2 个 JDBC 数据源:

  1. 使用提供的用户凭据、主机、端口和 SID 作为数据库名称的 Oracle 连接。
  2. 使用提供的用户凭据和 TNS 名称作为数据库名称的 Oracle 连接,因为如果有服务名称,那么我应该使用 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 来连接到 DB。

任何帮助,将不胜感激!

标签: oraclepentahoolapmondriantns

解决方案


我找到了一种解决方法,但不会将其标记为答案,因为我正在搜索适用于 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 选项:
Oracle 连接,提供的用户凭据、主机、端口和 SID 作为数据库名称 在此处输入图像描述

对于#2 选项:
使用提供的用户凭据和 TNS 名称作为数据库名称的 Oracle 连接,因为如果有服务名称,那么我应该使用 TNS 名称。 在此处输入图像描述

最后,适用于我当前情况的解决方案(请注意,服务名称带有斜杠): 在此处输入图像描述


推荐阅读