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方式:
-
按 SID
jdbc: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
-
通过 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 名称。
最后,适用于我当前情况的解决方案(请注意,服务名称带有斜杠):
【讨论】:
以上是关于Mondrian 无法使用 oracle TNS 名称作为 JDBC 数据源的主要内容,如果未能解决你的问题,请参考以下文章
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监听程序找(代