专用服务器与共享服务器


1.专用服务器

    在我登陆时,Oracle总是会为我创建一个新的进程来连接Oracle服务器,这样配置的服务器叫做Oracle专用服务器,这个产生的服务器进程会在SGA生存周期里专门为我的请求服务。也就是说,每当我打开一个会话,则会产生一个进程,会话与服务器的对应关系是一对一的映射关系。

客户端 --> 1521端口:监听器 --> 生成进程 --> 连接实例 --> 数据库

而实例是通过parameter文件查找control文件的位置,来构建起与数据库进行数据交换的桥梁的。

2.共享服务器

    在共享服务器当中,Oracle使用共享进程池来为大量的用户提供服务(类似排队的机制)。

    不像专用服务器,我们不必每次为连接过来的客户端专门打开一个进程进行服务,如果我有10000个用户同时访问数据库,那么我们要打开10000个进程,这会使得我的Oracle服务器资源损耗巨大,甚至将服务器压垮。但是我在进程共享池里打开100个进程供所有用户使用,系统在管理进程的时候,由于进程数不大,提高管理效率,而且不会由于负载过大而造成崩溃的状态。

    但是为了有效的管理这100个进程,需要引入一个新的概念叫做调度器来管理,当客户端对服务器进行访问,监听器收到客户端请求,监听器通过调度器了解到这100个进程中其中一个进程正在空闲当中,那么就会回复客户端哪个进程正在闲置并且进行访问。然后访问实例,进而访问数据库。

客户端 --> 1521端口:监听器 -->调用调度器 -->发现18888进程正在闲置 --> 回复客户端通过18888进程进行访问 --> 客户端通过18888端口访问实例 --> 数据库

3.TNS透明网络底层

    tns是处理Oracle远程访问的基本软件,查看一下Oracle工作目录下的tnsnames.ora,在$ORACLE_HOME/network/admin/下。查看一下内容:

    ORCL = 

        (    DESCRIPTION =

            (    ADDRESS =

                (    PROTOCOL = TCP)

                   ...

))

    这里配置着客户端要访问哪个主机的哪个端口,使用哪一个实例来访问底层数据库。

    在Server端也会存放着Client端的相关信息,类似于Linux的ssh服务ssh_know_hosts文件。


该文章仅供技术参考,如有不足,尽请指正。谢谢。