我们有2台具有相同数据库架构的服务器,但由于我们的基础架构在一台服务器上的设置方式,我们必须在所有表名前加上用户名
例如:
select * from engmon.cmts
但是在另一台服务器上,查询需要看起来像这样
select * from cmts
这是因为一台服务器连接到不同架构/用户名中的表。是否可以在jdbc url中更改某些内容以使两个查询看起来像#2?这样我们就不需要根据我们连接的服务器(dev或prod)动态更改sql。
有什么想法吗?
答案 0 :(得分:5)
我不相信你可以对JDBC URL做任何事情。但是,您可以发出SQL语句
ALTER SESSION SET current_schema = ENGMON
连接后立即(你也可以把它放在Oracle的登录触发器中)。这将导致指示Oracle使用ENGMON模式而不是当前用户的模式来解析非限定对象名称。这对权限没有影响 - 您的会话仍然只具有分配给当前用户的权限,而不是分配给ENGMON用户。
或者,您可以为需要访问的各种表创建同义词。本地同义词(仅对您可见)或公共同义词(对所有用户可见)。所以
CREATE [PUBLIC] SYNONYM cmts
FOR engmon.cmts
同义词只需要创建一次,无论它们来自哪个应用程序,都适用于所有会话。每次都需要设置CURRENT_SCHEMA。