oracle - Mondrian 无法使用 oracle TNS 名称作为 JDBC 数据源
问题描述
有人可以帮助解决以下问题:
我在 Pentaho BA 服务器中创建了 2 个 JDBC 数据源:
- 使用提供的用户凭据、主机、端口和 SID 作为数据库名称的 Oracle 连接。
- 使用提供的用户凭据和 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。
任何帮助,将不胜感激!
解决方案
我找到了一种解决方法,但不会将其标记为答案,因为我正在搜索适用于 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 选项:
Oracle 连接,提供的用户凭据、主机、端口和 SID 作为数据库名称
对于#2 选项:
使用提供的用户凭据和 TNS 名称作为数据库名称的 Oracle 连接,因为如果有服务名称,那么我应该使用 TNS 名称。
推荐阅读
- c++ - C ++在重载后缀增量运算符时得到一个奇怪的输出
- python - 将 Python Pandas 绘图嵌入到 Tkinter GUI 画布小部件“update_idletasks”问题
- unicode - 是否可以使用表情符号创建 zalgo 文本?
- android - 如果单击按钮,则围绕按钮动画圈
- vue.js - 在子组件和父组件 Vue js 之间共享值
- python - 我应该把 Celery 配置文件放在哪里?
- django - Django 测试:如何从 HTTPResponseRedirect 对象中获取 html 字符串
- python - 在 unittest 期间全局禁用 joblib.memory 缓存
- node.js - 在 NodeJS 中更新猫鼬
- django - 用于编辑大型数据模型结构的 django 后端的 react/redux 前端的优雅架构?