2010-12-12 98 views
1

如果我有一個Oracle 11g數據庫設置,使我可以別名數據庫在Oracle

sqlplus user/[email protected]:1521/ora11 

訪問它。然而,我想知道是否可以設置別名通過訪問它:

sqlplus user/[email protected] 

我可以設置Oracle SID和通過

export ORACLE_SID=ora11 
sqlplus user/pass 

連接但是,如果我有一個以上的數據庫,即,ORA10 - > ORACL E-10和ORA11 - >預言11,然後我更願意連接爲

sqlplus user/[email protected] 
sqlplus user/[email protected] 

而不必鍵入出本地主機或每次設置ORACLE_SID。

如果我試圖訪問遠程oracle數據庫並且不希望每次希望連接時都記住IP/PORT/SID,那麼這樣做也會很有用。

回答

4

添加一個條目$ORACLE_HOME/network/admin/tnsnames.ora你想連接到每個數據庫:

 
ORA11 = 
(DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 
    ) 
(CONNECT_DATA = 
    (SERVICE_NAME = ORA11) 
) 
) 

現在,您可以連接到使用sqlplus user/[email protected]這個數據庫。

+0

我不知道,但我的ORACLE 11服務器上的這些TNS項創建自動的,當我創建數據庫 – 2010-12-12 15:51:42

+1

是,服務器會自動生成它們(因爲如果您創建數據庫鏈接,它將需要充當客戶端),但是如果需要它們,您可以添加額外的別名,或者維護單獨的每個用戶tnsnames.ora('$ HOME/.tnsnames .ora',來自內存)。 – SimonJ 2010-12-12 15:59:46

+1

[RenéNyffenegger的頁面](http://www.adp-gmbh.ch/ora/network/connection.html)可能是有趣的。 – SimonJ 2010-12-12 16:02:51

0

在客戶端,您可以使用TNSNANES.ORA來執行此操作。但類似於ODBC設置,它僅爲一個客戶端定義名稱。不同的客戶可以使用不同的名稱。

0

我的建議是項而不是

SERVICE11 = 
(DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 
    ) 
(CONNECT_DATA = 
    (SID = INSTANCE11) 
) 
) 

這是更好的命名您的實例和服務模仿的概念。因此,名稱SERVICE11代表服務的概念,而INSTANCE11代表實例的概念。對於與Oracle 10g的服務,您可以:

SERVICE10 = 
(DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1520)) 
    ) 
(CONNECT_DATA = 
    (SID = INSTANCE10) 
) 
) 

您必須設置兩個偵聽器,每次聽不同的端口值。在我看來,你想使用幾個DBMS。如您所見,tnsnames.ora中沒有涉及數據庫。因此,「連接到數據庫」這個短語是錯誤的。

設置好兩個偵聽器和相關的偵聽器配置文件後,將兩個服務的條目放入客戶端主機的tnsnames.ora中。然後,您可以

sqlplus的用戶名/密碼@ service10 sqlplus的用戶名/密碼@ service11