2

数据库客户端如何在没有 tns 条目的情况下连接到本地系统上的数据库服务器?

我的印象是客户端总是通过 tcp/ip 通道连接到数据库服务器。因此 tnsnames 应该反映 tns 条目,并且侦听器服务应该在服务器上运行,客户端可以通过该服务建立连接。

如果数据库服务器在本地运行,今天我意识到,只需指定 SID 就可以在没有监听服务的情况下连接到数据库,如下所示

SET ORACLE_SID=<SID>
sqlplus username/password

现在我的问题是客户端通过什么通信渠道与服务器通信?

4

1 回答 1

1

它使用不通过侦听器的“遗赠”连接。从网络服务管理员指南

如果客户端和数据库存在于同一台计算机上,则客户端连接可以直接传递到专用服务器进程,而无需通过侦听器。这被称为遗赠协议。启动会话的应用程序为连接请求生成一个专用服务器进程。如果用于启动数据库的应用程序与数据库位于同一台计算机上,则会自动发生这种情况。

因此,如果您不指定连接字符串,SQL*Plus(或 SQL*Loader,或任何本地本机应用程序)会生成一个专用进程 - 当然,假设您的 ORACLE_SID 已设置。

侦听器产生的专用进程也是遗赠的——我相信这个术语来自继承连接的分叉进程。如果您查看psUnix 系统上的输出,您可以看到差异;当您在不使用 TNS 的情况下进行连接时,您会看到一个名为andoracle<SID>的专用进程;如果您有一个经过侦听器的专用进程,它将改为。(PROTOCOL=beq)(LOCAL=YES)(LOCAL=NO)

如果您只是在本地连接,那么您根本不需要运行监听器。当然,这有点不寻常,当有人假设听众存在并且因为他们在本地连接而启动时可能会引起一些混乱......

于 2014-04-23T11:09:45.740 回答