预计阅读时间:8分钟
按照《Oracle Conecpt》的结构一起了解Oracle。
历史文章:
《》
《》
《》
《》
《》
《》
作为《Concept》的前言,有六个主题,可以说是整本书的缩略,
About Relational Databases
Schema Objects
Data Access
Transaction Management
Oracle Database Architecture
Oracle Database Documentation Roadmap
本文主题:前言《Introduction to Oracle Database》 - “Oracle Database Architecture”。
Oracle体系结构,Oracle Database Architecture
数据库服务器是信息管理的关键。通常意义上,服务器管理着大量数据,在多用户环境下,用户可以并发访问相同的数据。数据库服务器也要阻止非法访问,并且提供失败恢复的有效方案。
其实,值得我们关注的,就是“Oracle数据库服务器”的概念。这里我们所说的“Oracle数据库服务器”,包括了一个数据库(database),以 及至少一个数据库实例(instance),如果一个实例,就叫单实例,如果多个实例,就叫RAC(真正应用集群)。由于实例和数据库联系紧密,因此我们所说的“Oracle数据库”,往往特指这两者。
严格意义上,“Oracle数据库服务器”包含以下概念:
一组文件的集合,使用磁盘来存储数据。这些文件可以独立于数据库实例进行存在。
管理数据库文件的一组内存结构。包含了一块共享内存区域,称为“系统全局区”,即system global area (SGA),以及一系列后台进程。实例可以独立于数据库文件存在。
下图展示了Oracle实例和数据库,这可以说是Oracle基础中的基础,对于体系结构,这张图可以讲半天,因为他牵扯到非常丰富的内容,如果了解了体系结构,可以说你对Oracle就会有新的认识,算是入了门了。
对于每一个和实例相连的用户连接,应用会起一个客户端进程。每个客户端进程会和他自己的服务器进程关联。服务器进程拥有自己独立的私有会话内存区域,称为“程序全局区”,即PGA。
可以从物理视角和逻辑视角来了解数据库。物理数据,就是在操作系统层面,能看见的数据。例如,用一些操作系统的指令,Linux下的ls和ps,可以列出数 据库文件以及进程。卤藕级数据,例如表,仅仅对数据库是有意义的。一条SQL语句可以列出数据库的表,但操作系统工具无法做到。
数据库分为物理和逻辑两种结构。由于物理和逻辑结构是分开的,因此管理数据的物理存储,不会影响逻辑存储结构的访问。例如,重命名一个物理数据库文件,不会重命名存储于这个文件中的数据表名。
我们会在第13章“Oracle Database Instance”继续了解这部分内容。
数据库存储结构
关系型数据库最基础的任务,就是存储数据。下面会简单描述一下,Oracle数据库使用的物理和逻辑存储结构。
物理存储结构
所谓物理数据库结构,其实就是存储数据的文件。当你执行CREATE DATABASE语句,会自动创建如下一些文件:
每个Oracle数据库会有一个或更多的物理数据文件,他们包含了所有数据库的数据。数据库逻辑结构中的数据,例如表和索引,物理上也会存储于数据文件中。
每个Oracle数据库会有一个控制文件。他包含了描述数据库物理结构的元数据,例如数据库名称,以及数据文件的存储路径。
每个Oracle数据库会有一组在线重做日志,可能包含两个或更多的在线重做日志文件。一个在线重做日志是由日志条目(也叫做日志记录)组成,他会记录数据的所有变更。
还有很多其他重要的文件,支持着Oracle数据库服务器的正常运行。例如参数文件和诊断文件。对于备份恢复来说,备份文件和归档重做日志文件,是非常重要的离线文件。
我们会在第11章”Physical Storage Structures”继续了解这部分内容。
逻辑存储结构
下面的逻辑存储结构,会让Oracle对于磁盘空间,可以进行细粒度的控制。
在最细粒度的级别,Oracle数据库的数据是存储于数据块中。一个数据块会对应到磁盘上的具体字节大小。
区是一系列逻辑上连续的数据块,并且在一次分配中获得,用来存储特定类型的信息。
段是一组分配给用户对象(例如表和索引)、回滚段数据或临时段数据的区的集合。
数据库可以分为称做表空间的逻辑存储单元。表空间就是段的逻辑容器。每个表空间至少包含一个数据文件。
我们会在第12章”Logical Storage Structures”继续了解这部分内容。
数据库实例结构
Oracle使用内存结构以及进程来管理和访问数据库。所有的内存结构都存在于安装RDBMS的计算机主体内存中。
当应用连接到Oracle数据库,实际上,他们已经连接到数据库实例。除了SGA外,实例会分配其他内存区域给应用,并且会启动除了后台进程外的其他进程。
数据库进程
进程是一种操作系统上能运行一系列步骤的机制。一些操作系统会使用诸如工作(job)、任务(task)或线程(thread)的术语。为了讨论,这里线程和进程是等价的。Oracle数据库实例会有以下几种类型的进程:
客户端进程
创建和管理这些进程,是为了运行一个应用程序或Oracle工具的软件代码。大多数环境会让客户端进程运行于独立的计算机上。
后台进程
多个Oracle数据库程序会服务于每一个客户端进程,后台进程则会增强他们的功能。后台进程会异步执行IO,并且监控其他Oracle数据库进程,以提供更高的并发以及更好的性能和可靠性保证。
服务器进程
这些进程会和客户端进程进行通信,并且和Oracle数据库交互,以响应这些请求。Oracle进程包括了服务器进程和后台进程。在大多数环境下,Oracle进程和客户端进程运行于不同的计算机上。
我们会在第15章”Process Architecture”,了解更多信息。
实例内存结构
Oracle数据库创建和使用内存结构,用于诸如运行程序代码、共享用户之间的数据,以及存储每一个用户的私有数据区域。和实例相关的内存结构,有如下几种:
系统全局区(SGA)
SGA是一组共享内存结构,他会包含一个数据库实例的数据和控制信息。SGA的组件包括诸如缓存数据块(其实就是Buffer Cache)以及共享SQL区域。
程序全局区(PGA,也有叫作私有全局区,Private)
PGA是一块存储每个服务器进程或后台进程数据和控制信息的内存区域。进程之间的PGA相互独立。每个服务器进程和后台进程拥有自己独立的PGA。
我们会在第14章”Memory Architecture”,了解更多信息。
如果您觉得本文有帮助,欢迎关注转发:bisal的个人杂货铺,