Oracle数据库是网络数据库的典型代表。用户可以通过网络来访问Oracle数据库。Oracle数据库提供了网络互联的各种方案,包括结构和驱动程序,其网络通信协议结构类似于OSI-RM,但又有自己的分层机制。也就是说,Oracle的网络是基于计算机网络的,通过网络使Oracle实现了数据共享、数据完整性控制、数据安全传输、跨操作系统平台(可以同时运行在Linux或者微软的操作系统平台上)、在多硬件平台之间的数据相互操作。
那么是什么保障了Oracle网络的连通性呢?简单的说,是全局数据库名、监听程序与网络服务名这三架马车保障了Oracle网络的连通性。
第一架马车:全局数据库名。
在谈到全局数据库名之前,笔者要先谈谈这个www.chinaitlab.com的域名。这个互联网上的域名就相当于我们现实生活中的门牌号码一样,可以在纷繁芜杂的网络世界里准确无误地把我们指引到我们要访问的站点。从这个www.chinaitlab.com域名来看,它是由几个不同的部分组成的。这几个不同的部分彼此之间具有上下的层次关系。其中最后的.CN是域名的第一层,.COM是域名的第二层,而.Ctocio则是真正的域名,处在第三层,依次类推。至此我们可以看出域名从后到前的层次结构类似于一个倒立的树型结构。其中第一层的.CN叫做地理顶级域名。在这些地理顶级域名下,还可以再根据需要定义次一级的域名。如在我国的顶级域名.CN下又设立了.COM,.NET,.ORG,.GOV,.EDU,以及我国各个行政区划的字母代表如.BJ代表北京,.SH代表上海等等。故当访问网站时,只需要输入域名(www.chinaitlab.com)即可以打开相应的网站,而不需要输入难以记忆的IP地址。
而Oracle数据库系统是一个大型的分布式数据库系统。有时候出于性能等的考虑,往往需要在企业的多个地方部署多个数据库系统,这就构成了Oracle分布式网络环境。为了保障每个数据库名字的唯一性,Oracle数据库系统借鉴了域名的命名规则,使用域名结构来命名分布在各地的数据库。即一个数据库的全局名字由其数据库名和该数据库所在的域名组成。假设现在某一家企业在浙江有宁波、杭州、舟山三个办事处,分别部署了三个Oracle数据库,其中杭州为总部。结构图如下:
根据全局数据库名命名规则,杭州公司数据库名字为ORAL.DTM 宁波公司的数据库名字为ORAL.NINGBO.DTM,舟山公司的数据库名字为ORAL.ZHOUZHAN.DTM。此时如果应用程序要连接不同部门的得数据库就非常的方便。可以通过全局数据库名字来指定需要访问的数据对象。只需要经过简单的修改,用户就可以连接到所需要连接的数据库。另为,还可以在网络环境配置一个默认域,如此访问默认域中的数据库对象不需要指定域名。
利用全局数据库名能够起到两个好处。一是易于数据库进行扩充。如现在企业可能只用一个数据库来处理业务。但是当企业规模扩大的时候,可能一个数据库不能够满足性能上的需求。或者是因为企业合并等原因,需要部署分布式的数据库环境。此时不需要更改原先的存在的数据库,就可以对数据库环境进行扩充。二是方便数据库的连接。当用户在不同的数据库之间进行更换时,使用全局数据库名将会非常的方便。
故笔者建议数据库管理员,即使企业当前只有一台Oracle数据库时,最好对其进行命名时也能够根据全局数据库命名规则来定义其名字。以利益后续数据库的扩充,同时也便于数据库管理员的日常维护。
第二架马车:网络服务名。
当管理员利用conn system/system @tsh命令连接数据库的时候,@后面的内容就是网络服务名。网络服务名是数据库服务器在客户端的名称。换句话说,就是数据库的别名。通常情况下,一个数据库可以有多个网络服务名。网络服务名主要用来将连接标识符解析为连接描述符,帮助客户端应用程序准确的连接到指定的数据库服务器。一般来说,网络服务器主要提供两方面的信息。一是服务名称,默认情况下服务名称就是数据库全局名称;二是路由信息,即达到指定服务的网络路由,或者说是监听程序的网络地址。当应用程序连接数据库时,其连接字符串中的网络服务名就指出了所需要连接到的数据库服务器。另外,在客户端上,也必须配置有于服务器协议地址相同的连接描述符才能够向监听程序发出连接请求。
可见网络服务名这架马车,在Oracle网络连接中就好像其起到一个马夫手中皮鞭的作用,指挥着这辆马车的前进方向。但是,这架马车比较娇贵,动不动就会出现问题。
如当某个客户端非正常关机后,重新启动。可能会发现无法正常连接到客户端,提示网络服务器名错误而无法正常连接到客户端。再如有时候会因为无法解析全局数据库名字而客户端无法连接到数据库。为了防止网络服务名出现错误,笔者有以下几个建议。
一是网络服务名的信息通常情况下是保存在TNSNAMES.ORA这个文件中。如果意外关机等情况,这个文件中的信息可能会丢失。为此最好对这个文件进行独立的备份。在遇到因为网络服务名错误而无法连接到数据库的时候,可以先利用这个文件进行恢复。通常情况下,都可以解决问题。
二是最好不要手工更改这个文件。虽然这个文件看起来比较简单,但是修改起来比较麻烦。除非你是这方面的专家,否则的话最好不要手工更改这文件。通常情况下,最好采用Oracle数据库自带的工具来配置。笔者建议的作法是,先利用TNS工具把原先的配置文件删除,然后再重新建立一个。这是一个不错的选择。
三是当客户端与Oracle数据库服务器进行连接的时候,如果出现提示网络服务器的错误提示时(监听程序无法找到适用于客户机连接的例程),有部分原因是无法解析数据库全局名所造成的。此时,管理员可以尝试着修改这个文件中的全局数据库名。即把全局数据库名修改为数据库服务器对应的IP地址。如果幸运的话,这么修改后就可以解决客户端的连接问题了。
另外需要注意,有时候系统提示网络服务名错误无法连接到数据库时,有可能不是网络服务名错误所造成。有可能使其他的原因。如有时候如果存在防火墙,系统也会提示这个错误信息。如一次用户在Linux系统上安装Oralce数据库。而默认情况下,Linux系统的防火墙是开启的。在事后没有个防火墙关闭,导致Oralce无法正常连接。Oracle数据库并不是不能够通过防火墙,而是需要在防火墙上进行额外的设置。故如果是出于学习的需要,笔者建议可以先把Linux等操作系统的防火墙服务暂时关闭掉。
第三架马车:监听程序。
监听程序是运行在服务器端的一个单独的服务进程。他的作用就是通过监听端口,监听网络上的客户机对服务器的连接请求,并管理客户机与服务器之间的网络通信量。如果做一个形象的比喻,监听程序就好像是宾馆前面的保安。看到有客人来了,就开门来其进去。如果客人没付钱就走人,保安就会拦住客户不让其走。监听程序其的作用就是跟这个保安的作用非常类似。每次客户端请求连接服务器时,监听程序就会第一时间接收到这个请求。然后监听程序会把这个请求汇报给服务器。另外,监听程序还会对用户的合法性做出辨别。如果客户端提供的连接信息与监听程序保存在配置文件中的信息(如协议、端口、数据库等等信息)匹配的话,则监听程序就授权客户机连接到服务器。否则的话,就会拒绝客户机的连接请求。可见,监听程序这架马车,在数据库连接中起着举足轻重的作用。
当服务器端的监听程序没有正常启动时,客户端将无法通过网络连接到数据库服务器。