0

我已经在 Ubuntu 上使用 OS 用户安装了 Oracle oracle。当我以不同的操作系统用户(除了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但它没有用。有人可以帮我理解这个问题。

4

1 回答 1

1

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

当您使用该connect user1/user1@orcl版本时,orcl不是您的 SID;如文档中所述,它是“Oracle Net 连接标识符”。

连接标识符

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

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

现在,连接标识符实际上可能与您的 SID 是相同的字符串,但不一定非要如此。通常,当您使用单个术语时,例如使用文件orcl中定义的“网络服务名称” tnsnames.ora。(取决于你的命名方法是如何配置的sqlnet.ora,这决定了连接标识符是如何解析的;但这仍然是我认为最常见的配置)。

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

有关连接如何工作和配置的更多信息,请参阅Oracle Net 管理员指南,有关较短版本的SQL*Plus 用户指南

为了使您的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_NAMESID 相同,但取决于数据库配置;该lsnrctl status命令将显示可用的服务名称。

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

正如@a_horse_with_no_name 指出的那样,还有其他形式的连接标识符,您不一定需要tnsnames.ora用于网络连接的文件;选项在这里解释。我只是专注于您尝试使用的那个。您不一定需要使用它们中的任何一个,因为您可以在本地连接。

于 2013-02-15T09:36:40.203 回答