Oracle数据库的网络配置即简单,也复杂。对网络知识了然于胸,也就举重若轻,但涉及到RAC架构的SCAN,以及共享存储网络,还是要花点心思。
由简入繁,简单的弄透彻了,繁杂的也就无非是时间问题了。我们先从最简单的单实例入手。
1.
单实例网络环境配置:
如图(图片来自官方文档),多个客户端通过网络,建立到服务器的连接。
我们先从客户端的角度进入。客户端发起连接请求时,需要提供什么信息呢?
(1) 服务器主机在哪里?
(2) 数据库又在主机的什么地方?
(3) 连接到服务器的哪个实例或者服务?
(4) 用户名和密码是什么?
(5) 什么方式去建立连接? 以上包括具体地址信息、验证信息以及连接方式,也就是到哪里去,谁去,怎么去都明确了。
首先是具体地址信息, 而信息又分几个层次。第一层是服务器主机地址, 也就是主机的IP地址,局域网内的主机唯一标识。然而主机里有很多应用,数据库只是其中之一,数据库就是第二个层级。怎么找到数据库呢?那就是靠端口号的作用了,就像是大楼里的门牌号。1521,数据库默认的端口号,敲门进去,就是数据库的地盘了。然而,事情并没有那么简单。一台服务器可能有多个数据库实例(此处非指RAC),一个实例又可能有多个服务名。所以,第三层是具体到某个实例或者服务,客户端必须明确它要连接的实例名或者服务名。这里说的是单实例,一般默认情况下,是一个实例对应一个服务名,所以走马观花者容易误解,服务即实例。当然,单实例是可以有多个服务名的,而且客户端应该习惯用服务名,实例名(SID)更多是对内,对操作系统而言,比如设置了环境变量ORACLE_SID后,操作系统验证登录,默认进入的是这个实例。而服务名是对外的,名称可以多个,也可以中途修改,更加灵活。
服务,在RAC中的负载均衡和资源管理中,意义重大,后面细说。
其次,是验证信息,也就是用户名和密码。如果是服务器本地登录,还涉及到操作系统验证的问题。如果只是远程客户端,也还是涉及到密码文件。这里只是提及一下,后面专门介绍。
最后,就是指明连接方式。(1)专用模式还是共享模式,一般选择专用模式。(2) TCP还是UDP协议。
连接一般两种方式,简单连接和本地命名。
简单连接:
本地命名:
在Tnsnames.ora文件中,将连接信息定义一个别名,即网络服务名,然后连接时直接用网络服务名连接。如下:
先定义别名,需要在每台客户端机器上定义。可以直接在Tnsnames.ora文件中编辑,也可以通过netca工具配置。文件默认路径:$ORACLE_HOME/network/admin/tnsnames.ora.
用网络服务名连接:
补充说明:
简单连接或本地命名,需要在本客户端的sqlnet.ora文件中添加如下行:
NAMES.DIRECTORY_PATH= (TNSNAMES,EZCONNECT)
如果将此行注释掉,两种方式也都能成功连接。但如果缺少TNSNAMES,TNSNAMES其中一个,那么缺少的方法将不能连接。如果将值设置为NONE,两种方式都失败。
设置成:NAMES.DIRECTORY_PATH= (NONE)
两种方式都报错:
我们再以服务器角度来说明。服务器安装好数据库软件,启动实例,打开数据库,就要等待客户端的访问,不然如死水一般,没有半点涟漪。
打开数据库:实例启动,数据库挂载,数据库打开。
数据库打开了,服务准备就绪了,怎么响应来自客户端的连接请求呢? 客户端的连接请求是认为发起或者应用程序发起的,而响应,只能靠服务器自己了。
跟许多其它应用一样,监听器应运而生。就像小区门卫一样,监听器就是站在某个门口后面的那个人,时刻对访客敲门做出响应,然后联系到访客要找的业主。具体到oracle,访客就是客户端。门口就是默认的1521端口,业主就是某个实例或者服务。
监听器的主要作用就是牵线搭桥,就是服务的连接代理,就是梁上脚下的朱贵。一旦客户端与服务器连接上了,它就功成身退,继续监听。也就是梁山好汉搭上了伙,也就没有朱贵什么事,他继续等候下一个梁上好汉的到来。
查询监听:
不同的是,梁山,是覆巢之下,焉有完卵。梁山灭了,朱贵也就灭了。但数据库服务和监听服务是两个服务,监听是监听,数据库是数据库。以windows为例:
数据库关闭了,监听还在。监听关闭了,数据库也还在。但如果监听关闭了,通往数据库的桥梁也就不存在了,数据库也就名存实亡。
更不同的是,在rac环境中,监听器还负责负载均衡和 错误转( failove ) 的重担。朱贵可没有那么大能耐,能够安排座次和分派岗位。这点留待后面再说。
客户端还扣门,监听器会知道客户端的信息,那么监听器怎么知道数据库服务的呢?计算机学科很多都是对现实世界的观察抽象,不是凭空而来,很多都能找到现实类比。像后面会提到的队列和锁,面向对象中类和对象等。所以呢?监听器知道服务,同门卫知道业主一样,要登记造册啊,也就是注册服务。Oracle分两种方式将服务注册到监听器。
一种是动态注册,即通过数据库实例的PMON进程自动注册。
修改服务前状态:
服务:
监听:
只有一个devdb 服务监听器中注册。
修改服务名:
过一下查看监听:
两个新增服务已经自动注册到监听器。
动态监听也可以通过执行如下命令注册:
另一种是静态监听,就是将数据库服务名的信息手工写了listener.ora文件中。可以用netca工具配置,也可以直接编辑文件。
再说服务
上面说的监听服务,数据库服务,在windows上是就是后台服务,也就像写入注册表的后台守护进程,因为在windows上,Oracle表现为单进程,多线程,所以后台表现为一个后台服务。而在Linux中,Oracle为多进程,表现为一系统的后台守护进程。但我们常规针对oracle说的服务,也就是:
(1) 比喻成业主的服务
(2) 跟实例做比较的服务
(3) 连接中用到的service_name
发起人:用户或应用程序 发起人代理:客户端 服务方代理: 监听器 服务方:数据库服务 万事俱备只欠东风,对的,还欠东风,也就是 防火墙的设置, 下一篇,将单独介绍防火墙的设置,以及顺带介绍 Oracle数据的认证方式。 待续.....
