开发者

Oracle connection string for other user's tables

开发者 https://www.devze.com 2023-02-05 20:43 出处:网络
We have 2 servers with the same database schema, however due to the way our infrastructure is setup on one server we must prefix all table names with a username

We have 2 servers with the same database schema, however due to the way our infrastructure is setup on one server we must prefix all table names with a username

ex:

select * from engmon.cmts

However on the other server the query would need to look like this

select * from cmts

This is because one server connects to a table in a different schema/username. Is it possible to change somethi开发者_运维知识库ng in the jdbc url to make both queries look like #2? That way we do not need to dynamically change the sql depending on which server we are connecting to (dev or prod).

Any ideas?


I don't believe you can do anything to the JDBC URL. However, you could issue the SQL statement

ALTER SESSION SET current_schema = ENGMON

immediately after connecting (you could also put this in a logon trigger in Oracle). This would have the effect of instructing Oracle to resolve unqualified object names using the ENGMON schema rather than the current user's schema. This has no impact on permissions-- your session still only has the privileges assigned to the current user, not to the ENGMON user.

Alternately, you could create synonyms for the various tables that you need to access. Either local synonyms (visible just to you) or public synonyms (visible to all users). So

CREATE [PUBLIC] SYNONYM cmts
   FOR engmon.cmts

Synonyms would only need to be created once and would apply to all sessions no matter what application they come from. Setting the CURRENT_SCHEMA would need to be done every time.

0

精彩评论

暂无评论...
验证码 换一张
取 消