本地数据库客户端如何在没有侦听器服务的情况下与服务器连接

时间:2014-04-23 10:28:16

标签: database oracle tnsnames

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

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

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

SET ORACLE_SID=<SID>
sqlplus username/password

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

1 个答案:

答案 0 :(得分:1)

它使用&#39;遗赠&#39;没有通过听众的连接。 From the Net Services admin guide

  

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

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

监听器产生的专用进程也是遗留的 - 这个术语来自继承连接的分叉进程,我相信。如果你看一下Unix系统上的ps输出,你可以看到差异;当您在不使用TNS的情况下进行关联时,您会看到一个名为oracle<SID>(PROTOCOL=beq)(LOCAL=YES)的专用流程;如果你有一个通过听众的专用流程,它将改为(LOCAL=NO)

如果您只是在本地连接,那么您根本不需要让听众运行。这当然有点不寻常,当有人认为听众存在并且由于他们在本地连接起来时会引起一些混乱......