2011-01-21 38 views
2

我們有2臺服務器使用相同的數據庫模式,但由於方式我們的基礎架構的Oracle連接字符串是設置一臺服務器上,我們必須有一個用戶名對其他用戶的表

前前綴的所有表名:

select * from engmon.cmts 

然而在其他服務器上查詢需要看起來像這樣

select * from cmts 

這是因爲一臺服務器在一個不同的模式/用戶名連接到一個表。是否有可能改變jdbc網址中的內容使兩個查詢看起來像#2?這樣我們就不需要根據我們連接的服務器(dev或prod)來動態更改sql。

任何想法?

回答

5

我不相信你可以對JDBC URL做任何事情。但是,您可以在連接後立即發出SQL語句

ALTER SESSION SET current_schema = ENGMON 

(您也可以將它放在Oracle的登錄觸發器中)。這可能會指示Oracle使用ENGMON模式而不是當前用戶的模式解析非限定對象名稱。這對權限沒有影響 - 您的會話仍然只有分配給當前用戶的權限,而不是ENGMON用戶。

或者,您可以爲需要訪問的各種表創建同義詞。可以是本地同義詞(只對您可見)或公共同義詞(對所有用戶都可見)。所以

CREATE [PUBLIC] SYNONYM cmts 
    FOR engmon.cmts 

同義詞將只需要創建一次,並適用於所有會話,無論他們來自哪個應用程序。每次都需要設置CURRENT_SCHEMA。

+0

+1:公共同義詞是我以前用過的 – 2011-01-21 21:31:46