写在前面的话
Oracle数据库是一个大型的网络关系型数据库。
Oracle 11g是骨甲文公司在2007年7月12日推出的数据库软件,Oracle 11g有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。oracle 9i (i=internet)是互联网的意思,oracle 11g (g=grid)是网格的意思。
下面展示的图示均基于Oracle11g。对于Oracle数据库而言,其内核这么多年变化并不大,更多地是外延的改变。本篇博文将从操作系统和计算机网络等角度去认识一下Oracle。
一、基本概念和术语
数据库系统的基本概念和术语见下图。
后面的Oracle数据库的模式,内容基于此。
下面罗列的概念是必须要掌握的,也是能够更好地认识Oracle的必备基础。
网络协议
网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。
只有相同网络协议的计算机才能进行信息的沟通与交流。
网络协议也有很多种,Oracle使用的网络协议为TCP/IP协议、使用SSL的TCP/IP协议、命名管道(分布式IPC)。
这里拓展点内容: SQLserver现在主要使用的3种网络协议: Shared Memory、TCP/IP和 Named Pipe
TCP/IP协议是“transmission Control Protocol/Internet Protocol”的简写,中文译名为传输控制协议/互联网络协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。TCP/IP是INTERNET的基础协议,由网络层的IP协议和传输层的TCP协议组成。
TCP/IP已经成为一个标准,这个协议是操作系统内核实现的,内核提供api接口让你写应用层的程序。可以把TCP/IP协议理解为操作系统的一个组件,属于操作系统用来支持网络的一个部分。
非常详细的内容请参考:
【计算机网络】谢希仁笔记 运输层
【计算机网络】谢希仁笔记 网络层
应用层协议
应用层协议(application layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文。
应用层协议有很多例如:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS。Oracle使用TTC、TNS应用层协议。
应用层协议建立在网络层协议基础上的。网络层协议保证在各种硬件和软件环境的网络中能够准确传递应用层协议的数据。
TNS协议是ORACLE服务端和客户端通讯连接的应用层协议
TNS协议传输可以使用TCP/IP协议、使用SSL的TCP/IP协议、命名管道(分布式IPC)和IPC(本地IPC)协议传输,其中TCP/IP协议传输是使用明文传送。
Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器。
ORACLE当中,如果客户机想访问某个服务器,必须要设置TNS;通过读取TNS配置文件才能列出经过配置的服务器名。配置文件名一般为:tnsnames.ora。
如果想了解更多应用层的信息,可以参考【计算机网络】谢希仁笔记 应用层
客户机和服务器(Client/Server)
一般情况下,都是从软件角度来区分服务器和客户机。
服务器(Server)
-
软件角度(逻辑角度)的服务器:
当一台可以连入网络的计算机,其身上安装了提供网络服务的服务端软件,可以向其他计算机提供各种网络服务(如数据、文件的共享等)时,它就被叫做服务器。 -
硬件角度(物理角度)的服务器:
提供各种网络服务的高性能计算机。服务器配备大容量存储器、24h不间断的UPS电源等高性能硬件设备,并且可热插拔功能。而服务器与微机在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面存在差异很大。
客户机(Client)
- 软件角度(逻辑角度)的客户机:
当一台可以连入网络的计算机,其身上安装了享受网络服务的客户端软件,可以连接到服务器,从服务器享受各种网络服务(如数据、文件的共享等)时,它就被叫做客户机。客户机使用服务器共享的文件、打印机和其他资源。 - 硬件角度(物理角度)的客户机
享受网络服务的PC计算机。
从软件角度来区分远程客户机和本地客户机
本地客户端/机:既安装服务器软件,又安装了客户端软件的客户机。
远程客户端/机:只安装了客户端软件的客户机。
远程访问和本地访问
- 远程访问:客户机通过网络协议访问服务器。本地客户端和远程客户端均可以进行远程访问。
- 本地访问:客户机不通过网络协议访问服务器(比如:通过本地IPC,简称IPC)。只有本地客户端才可以进行本地访问。
Oracle采用IPC机制完成本地进程间通讯。
IPC:Inner Process Communication 是操作系统的概念,本地进程间通信机制。服务器和客户端都在同一台机器的话,就用IPC这种通信方式。这是非常重要的概念
桌面类(型)与服务类(型)
- 服务器操作系统(Service operating system)
提供网络服务的操作系统
服务器版操作系统包含服务器端专用的功能和管理工具,对安全和稳定性方面也有更严格的要求,相对来说速度上就慢了些。同时服务器版还会支持特殊的硬件。 - 桌面操作系统(Desktop operating system)
安装在个人电脑上的,为单机服务的操作系统。
网络数据库(Network Database)
网络数据库其含义有三个:
①在网络上运行的数据库。
②网络上包含其他用户地址的数据库(多用户)。
③信息管理中,数据记录可以以多种方式相互关联的一种数据库。
桌面型数据库(Desktop database)
小型数据库,安装在本机的,广泛应用于单机环境。
下面就要探讨Oracle数据库的模式,上面提到的概念不再多解释
二、Oracle数据库的模式
正如前面所说,Oracle数据库是一个大型的网络关系型数据库。
对于网络数据库有三种工作模式,或者叫三种工作结构。
我们需要重点关注它体系结构,有下面四个方面:
1) 组成部分
2) 每部分的功能
3) 各部分的关系
4) 各部分的协作
(1)C/S结构/模式
客户机/服务器模式, Client/Server, 简称C/S结构/模式
图中展示了C/S的两种情况:一种是客户端与服务器不在同一台机器上,客户端与服务器之间需要远程访问。一种是客户端与服务器在同一台机器上,它们之间需要通过IPC网络协议进行通讯。
C/S 结构,恐怕是大家非常熟知的客户机和服务器结构叭。
? 先说 客户端与服务器不在同一台机器上
它是很经典的软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
对于应用程序从结构上一般分为四层:用户界面层(UI)、业务逻辑层(BLL)、数据访问层(DAL)和数据存储。
传统的C/S计算多是基于两级模式,在这种模式中,所有的用户界面层、业务逻辑层、数据访问层均驻留在Client端,而Server则成为数据库服务器,负责各种数据的处理和维护。
因此Server变得很“瘦”,被称为“瘦服务器(Thin Server)”。与之相反,这种模式需要在客户端运行庞大的应用程序,这就是所谓的“胖客户机(Fat Client)”。
在C/S应用模式中,用户只关心完整地解决自己的应用问题。C/S有很多优点:用户使用简单,直观;编程,调试和维护费用低;系统内部负荷可以做到比较均衡,资源利用率较高;允许在一个客户机上运行不同计算机平台上的多种应用;系统易于扩展,可用性较好,对用户需求变化的适应性好。
但是由于所有的用户界面层、业务逻辑层、数据访问层均驻留在Client端, 这是非常不安全的。可以通过仅在局域网内使用等方式提高安全性。
下面好好说一下它们的通讯
操作系统提供了一个Socket对象,它将计算机网络体系的物理层,数据链路层,网络层和运输层给封装起来了,我们可以通过Socket去通知操作系统,间接去实现网络编程的操作。
当我们启动服务器端的时候,会有一个监听Socket负责监听请求,这个过程叫做 链接
,有新的请求后,服务器会创建一个进程负责建立一个被动Socket(被动Socket有编号),负责响应请求,这个就是连接
了, 这期间发生了TCP/IP的三次握手(上面展示的图仅仅是概括)等事件,只是被封装起来了,我们感受不到。
在监听Socket后面和被动Socket后面都是消息队列了。为了便于区分,监听Socket后面的消息队列是请求队列,而被动Socket后面的消息队列是响应队列,后台进程处理请求队列的信息后(首先会将应用层协议剥下来取出数据,消息队列有专门的协议哈),将信息打包发送到对应的被动Socket的响应队列中,被动Socket拿到信息后便进行响应消息的一系列操作,大致如下图:
其实关于连接的部分没有说完,因为这个会涉及到Oracle的监听器,端点相关的东西,这个会更加深入,下篇博文会好好探讨一下。
? 下面来看一下客户端与服务器在同一台机器上的情况
进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。
(2)B/S结构/模式
浏览器/服务器模式, Browser/Server, 简称B/S模式
在B/S模式中,Web服务器既作为一个浏览服务器,又作为一个应用服务器,在这个中间服务器中,可以将用户界面层/表示层、业务逻辑层、数据访问层整个应用逻辑驻留其上,而只有表示层下载在客户机上。这种结构被称之为“瘦客户机”。
这种结构中,无论是应用的HTML网页还是Java Applet都是运行时刻动态下载的,只需随机地增加中间层的服务 (应用服务器),即可满足扩充系统的需要。由此我们可以用较少的资源建立起具有很强伸缩性的系统,这正是网络计算模式带来的重大改进。
与C/S结构相比,B/S结构的优势是维护和升级简单;劣势是服务器负担比较重、客户端界面不够丰富和快速响应不如C/S等。
这种结构相比上面的C/S结构安全一些。
(3)C/A/S结构/模式
客户机/应用服务器/服务器模式, Client/Application Server/Server, 简称C/A/S模式
与两层C/S结构相比三层C/S结构具有更灵活的硬件系统构成,对于各个层可以选择与其处理负荷和处理特性相适应的硬件。合理地分割三层结构并使其独立,可以使系统的结构变得简单清晰,这样就提高了程序的可维护性。三层C/S结构中,应用的各层可以并行开发,各层也可以选择各自最适合的开发语言,有利于变更和维护应用技术规范。按层分割功能使各个程序的处理逻辑变得十分简单。
用户界面层驻留在Client端,业务逻辑层、数据访问层驻留在应用服务器端。
这是最安全的结构了,应用服务器的设计是自主的,比如应用服务器的应用层协议可以自定义,应用层协议的格式需要破解,而且一般情况下,就算你能破解应用层协议(微乎其微的概率),拿到的数据也是经过加密的。更何况还有别的安全措施呢?
关于上面的Socket相关内容的叙述,这里补充一点C/A/S结构的内容。监听Socket将信息打包成消息队列之前会进行拆包,解密,重新打包成含消息队列的协议交给服务器进程进行处理。
(4)多用户
根据在同一时间系统内可以使用的用户多少,系统可分为单用户系统和多用户系统。单用户系统是指一台计算机在同一时间只能由一个用户使用,一个用户独自享用系统的全部硬件和软件资源,而如果在同一时间允许多个用户同时使用系统,则称为多用户系统。
能设计出多用户的数据库是基本功,Oracle算是最牛的数据库了,关键看你怎么搞吧。
对了这里还需要补充一下:Oracle在当初设计的时候,由一些热血青年做的。怎么快怎么搞,所以有点地方并不符合数据库原理标准。
下面展示一下概括性的图示:
你可能觉得并没有点出Oracle数据库网络和操作系统等相关 比较重点而且细节的内容。确实是这样的,所以这篇文章停留在认知上,下面会写一篇长文好好说一下。
既然你翻到这篇文章,就是有缘人,说一下关于Oracle数据库学习的看法吧:
我比较喜欢实实在在的东西,脚踏实地才走得稳,像 三十天入门到精通Oracle 的东西不要看,还有为了卖课程鼓吹一波的东西也没多大的价值。选一本好书,或者找一门真正实实在在的课程(书和课程未必要新,涉及到底层的东西一般不会有太大的变化),不懂的地方利用搜索技巧去寻找吧~