【问题标题】:Oracle connection string for other user's tables其他用户表的 Oracle 连接字符串
【发布时间】:2011-06-13 10:21:01
【问题描述】:

我们有 2 台服务器具有相同的数据库架构,但是由于我们在一台服务器上设置基础架构的方式,我们必须在所有表名前加上用户名

例如:

select * from engmon.cmts

但是在其他服务器上,查询需要看起来像这样

select * from cmts

这是因为一台服务器连接到不同架构/用户名的表。是否可以更改 jdbc url 中的某些内容以使两个查询看起来像 #2?这样我们就不需要根据我们连接的服务器(开发或生产)动态更改 sql。

有什么想法吗?

【问题讨论】:

    标签: oracle jdbc oracle10g


    【解决方案1】:

    我不相信您可以对 JDBC URL 做任何事情。但是,您可以发出 SQL 语句

    ALTER SESSION SET current_schema = ENGMON
    

    连接后立即(您也可以将其放在 Oracle 中的登录触发器中)。这将具有指示 Oracle 使用 ENGMON 模式而不是当前用户的模式来解析不合格对象名称的效果。这对权限没有影响——您的会话仍然只有分配给当前用户的权限,而不是分配给 ENGMON 用户的权限。

    或者,您可以为需要访问的各种表创建同义词。本地同义词(仅对您可见)或公共同义词(对所有用户可见)。所以

    CREATE [PUBLIC] SYNONYM cmts
       FOR engmon.cmts
    

    同义词只需要创建一次,并且适用于所有会话,无论它们来自哪个应用程序。每次都需要设置 CURRENT_SCHEMA。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-28
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 2021-09-25
      • 1970-01-01
      • 2018-03-06
      相关资源
      最近更新 更多