我在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_HOME
和SID
。但它没有用。有人可以帮我理解这个问题。
答案 0 :(得分:1)
从某种意义上说,你真的没有问题;您可以使用ORACLE_HOME
和ORACLE_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。我只关注你试图使用的那个。您不一定需要使用其中任何一个,因为您可以在本地连接。