2010-12-12 94 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