【问题标题】:liquibase Oracle ORA-00942liquibase Oracle ORA-00942
【发布时间】:2016-08-21 18:11:37
【问题描述】:

当使用 Oracle 数据库调用 liquibase migrate、generatechangelog 等时,当 liquibase 调用 oracle jdbcdriver 获取元数据时,我们总是会收到 ORA-00942 错误

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)

【问题讨论】:

标签: oracle liquibase


【解决方案1】:

通过跟踪 ojdbc_g 驱动程序中的日志记录发现问题。原来 jdbcdriver 中的 getSchemas() 查询 Oracle 中的“ALL_USERS”视图

DatabaseMetaData metadata=conn.getMetaData(); ResultSet rs2=metadata.getSchemas();

SELECT username AS table_schem,null as table_catalog FROM all_users ORDER BY table_schem ORA-00942: 表或视图不存在

在我们的数据库中,ALL_USERS视图不存在,所以我用标准的Oracle方式再次创建了视图

CREATE OR REPLACE FORCE VIEW "ALL_USERS" ("USERNAME", "USER_ID", "CREATED") ...

【讨论】:

  • 如果您的 Oracle 安装中不存在 all_users,那么您的安装就严重搞砸了。我宁愿假设您的 Oracle 用户在该视图上没有 select 权限(尽管这很不寻常,也可能表明您的安装存在问题)
  • 或者只是没有 sys.all_users 视图的权限 :)
  • 这就是我所说的“您的 Oracle 用户没有对该视图的选择权限” - 这也是非常不寻常的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多