数据库service和数据库实例
数据库服务,下面显示了2个数据,每一个数据有自己的数据库服务。一个服务 sales.us.acme.com能让销售访问销售数据库,另一个服务,finance.us.acme.com能让财务分析人员访问财务数据库
图例
服务名字被初始化参数service_name指定,服务的名字默认是全局数据库名,这个名字包含了数据库名和 域名。在sales.us.acme.com这个例子中,sales是数据库名,us.acme.com是域名。数据库可以有多个服务,下面的例子中,一个数据库有2个不同的服务,一个是book.us.acme.com,另外一个是soft.uf.acme.com.
图例
一个数据库有多个服务有下面的功能:
1一个数据库对不同的客户有不同的用途
2数据库管理员可以限制或是保留系统资源。这个级别的控制能更好的分配资源给客户。
服务的访问
为了连接到数据库的服务,客户使用连接描述符,这个连接符提供了数据库的位置和数据库服务的名字。下面的例子显示了一个连接符能够让客户连接到数据库上一个叫sales.us.acme.com的服务上。
(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.acme.com)))
连接描述符的地址部分其实是监听的协议地址。为了连接到数据库服务,客户端先连接到监听器进程,监听器接受传入的客户端连接请求,把这些请求发送到数据库服务端。一旦连接建立了,客户端和数据库服务端就直接通信了。
连接描述符指定了想要建立连接的数据库服务名。监听器知道他能处理的连接的服务,因为数据库动态注册这个服务信息到监听器中。这个注册的动作叫做服务注册。他也提供数据库实例和实例上可用的服务处理器的信息给监听。服务处理器就是连接数据库server的连接点。一个服务处理器可以是dispatcher或是专用server。
如果要连接到数据库的指定的实例上去,客户也可以在连接描述符中指定instance_name,这个特色对于rac环境很有帮助,下面的连接描述符指定了与服务sales.us.acme.com相关的实例sales1.
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com)
(INSTANCE_NAME=sales1)))
有时候,客户端想要使用特别的服务处理器,下面的例子中,一个连接描述符配置使用共享server的dispatcher
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com)
(SERVER=shared)))
如果客户端想要使用专用server,那么可以指定server=dedicated,如果server参数没有被设置,那么就假设是使用的共享server,然而,如果没有dispatcher可以使用,那么客户端将会使用专用server。
当监听器接受到客户的请求,它选择一个之前注册了的服务处理器,依赖于选择的处理器的类型,通信协议的选择,和数据库服务所在的操作系统,监听器做下面其中的一个动作;
1将连接请求直接分给dispatcher
2发送dispachter和专用server的重定向的信息给客户端,然后客户端直接连接diapacher或专用服务器进程。
3生成一个专用服务器进程,并传递客户端的连接给专用服务器。
使用多个监听加强服务的访问性
一些配置,像是rac,在多节点上的多监听可以配置来处理客户请求对相同的服务。下面的例子中,可以使用sales1-server或sales2-server上的监听来连接sales.us.acme.com
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com)))
多监听配置可以让你有下面的故障转移和负载平衡功能:1连接时故障转移 2透明应用程序故障转移3客户端的负载均衡4运行时连接负载均衡
连接时故障转移
如果在初始连接第一个监听失败的时候能够 连接都别的监听上去。监听协议地址的数量决定了有多少监听被尝试,没有连接时故障转移,oracle net只使用一个监听来尝试连结。
透明程序 故障转移
taf是为高可用环境的运行时故障转移,像是rac,taf重新连接 程序到服务的连接。可以让客户应用程序在连接失败了的时候自动重新连接数据库,回复当时在运行的select语句。
客户负载均衡
客户端的负载均衡能让客户端在监听中随机的连接。在不同的监听上负载均衡。没有客户端负载均衡,oracle net进程会在地址列表中顺序的访问直到一个成功的为止。
运行时负载均衡
在多dispatcher的环境中,该特色均衡了活动连接的数量。在单实例中,监听器选择负载最低的dispatcr来处理客户端的请求,在rac环境中,运行时的负载均衡能够平衡多个实例的活动连接数量。
由于动态服务注册,一个监听器总是知道所有的实例和dispatcher,不管他们的位置在哪。依赖于负载的信息,监听器决定哪个实例胡哪个dispacher被发送客户的请求。
在共享服务配置中,监听按下面的顺序来选择一个dispatcher
1负载最小的节点
2负载最小的实例
3那个实例上负载最小的dispatcher
在专用server配置中,监听器按下面的顺序选择实例
1负载最小的节点
2负载最小的实例
服务处理器
dispatcher
在共享服务架构中,使用一个dispatcher来处理讲客户的连接导向到普通的请求队列中,共享server池中一个空闲的共享server在队列中取出一个请求,这种方法能够使用一个小的server池来处理大量的客户请求。共享server模式比专用server模式的一个明显的优点就是,共享模式减少了系统资源。监听器使用dispatcher作为服务处理器,来转发客户请求,当一个请求过来时,监听器做下面的动作;
1讲连接请求转到dispatcher
2返回给客户一个重定向的信息,该信息包含了dispatcher的地址,客户端然后终端和监听的网络回话,然后建立和dispacher的连接。
监听器尽可能使用直接转发,但是当dispacher对监听是远程的时候,就使用重定向
直接转发:
1监听器接受客户的请求
2监听器直接把请求发给dispacher
3客户端直接连接dispacher
重定向连接:
1监听接受dispacher
2监听提供dispacher的地址,返回给客户重定向的信息
3客户端使用重定向的信息连接dispacher
专用服务 器模式
专用服务器模式中,监听在接受到客户端请求后开始,为了完成客户服务的连接,下面中的一个动作发生:
1专用服务器继承在监听的连接请求
2专用服务器告诉监听器它的监听协议地址,监听器传递协议地址到客户端,给客户端一个重定向信息结束连接,客户端使用重定向地址直接连接专用服务器。