【问题标题】: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。