无法使用不同的OS用户帐户连接到oracle

时间:2013-02-15 06:40:56

标签: oracle ubuntu-12.04

我在Ubuntu上安装了Oracle用户oracle。当我以不同的OS用户(oracle除外)登录时尝试连接到Oracle时,出现错误:

SQL> connect user1/user1@orcl 
ORA-12154: TNS:could not resolve the connect identifier specified

但是,如果我没有提到Oracle SID,那么我不会收到任何错误:

SQL> connect user1/user1
Connected to:
Oracle Database 
SQL>

我在用户个人资料中声明了ORACLE_HOMESID。但它没有用。有人可以帮我理解这个问题。

1 个答案:

答案 0 :(得分:1)

从某种意义上说,你真的没有问题;您可以使用ORACLE_HOMEORACLE_SID环境变量进行本地连接,这很好。

当您使用connect user1/user1@orcl版本时,orcl 您的SID;正如the documentation中所解释的那样,它是'Oracle网络连接标识符'。

  

connect_identifier

     

Oracle Net连接标识符。确切的语法取决于   Oracle Net配置。有关更多信息,请参阅Oracle   网络手册或联系您的DBA。 SQL * Plus不会提示服务   name,但如果不包含connect,则使用默认数据库   标识符

因此,您通过网络连接进行连接,即使它连接到同一主机,而不是内部使用IPC。这样做时甚至不需要设置ORACLE_SID,因为它用于IPC而不是网络连接的一部分。

现在,连接标识符实际上可能与您的SID是相同的字符串,但它不一定是。通常,当您使用orcl这样的单个术语时,您使用的是tnsnames.ora文件中定义的“网络服务名称”。 (取决于naming methods are configured in your sqlnet.ora如何确定连接标识符的解析方式;但这仍然是我认为最常见的配置。

可以使用netca配置助手配置Oracle Net配置,作为oracle用户,但您可以创建一个私有tnsnames.ora来覆盖它。

有关连接如何工作和配置的详情,请参阅Oracle Net admin guide,以及更短版本的SQL*Plus user guide

要使user1/user1@orcl连接正常工作,您需要tnsnames.ora条目,如下所示:

orcl = 
 (DESCRIPTION = 
   (ADDRESS = (PROTOCOL=tcp)(HOST=my_host)(PORT=1521))
   (CONNECT_DATA = (SERVICE_NAME = orcl)))

...其中my_host是Oracle服务器的DNS名称或IP地址,1521是侦听器配置为运行的端口。 (听众必须为你运行才能以这种方式连接)。 SERVICE_NAME也不一定与您的SID相同,但取决于数据库配置; lsnrctl status命令将显示可用的服务名称。

ORA-12154错误告诉您根本没有tnsnames.ora文件,或者它没有包含别名orcl的条目。

正如@a_horse_with_no_name指出的那样,还有其他形式的连接标识符,您不一定需要tnsnames.ora文件来进行网络连接;选项为explained here。我只关注你试图使用的那个。您不一定需要使用其中任何一个,因为您可以在本地连接。