本文主要介绍Oracle数据库管理系统的基本轮廓和程序模块结构、实例概念和组织、进程结构和功能、内存结构和用途,数据字典结构和使用、进程配置和管理、运行模式、程序接口、事务管理。
一、基本轮廓和程序模块结构
Oracle基本轮廓
Oracle数据库管理系统体系结构
Oracle数据库系统体系结构
数据库:存放数据的仓库,有组织的、可共享的、存储的数据集合,按数据模型组织、描述和存储、较小数据冗余度、较高数据独立性和易扩展性、可为用户共享。
数据库实例:存取和控制数据库的软件机制,SGA(System Global Area)和ORACLE进程的组合,内存和进程用于管理数据库的数据,并为数据库用户服务。
物理结构:由操作系统文件组成,包括数据文件(一个或多个)、重做日志文件(两个或多个)、控制文件(一个或多个)。
逻辑结构:由表空间、段、范围、数据块、模式对象组成,通过逻辑结构控制磁盘空间的使用。
模式对象:直接引用数据库数据的逻辑结构,包括表、视图、序列、存储过程、触发器、同义词、索引、集聚、数据库链、快照等。
Oracle物理和逻辑实体关系图
二、实例的基本概念
实例:SGA+ORACLE进程(用户、服务器、后台)=ORACLE实例
1)实例工作过程:
启动实例(分配SGA、启动ORACLE进程)。
实例装配数据库(装配时实例查询控制文件:mount)。
数据库准备打开(打开前,数据库为关闭状态,只有DBA可存取)。
数据库打开(打开后,授权的用户可以存取数据库)。
关闭数据库(先卸载数据库,后关闭实例:unmount)。
2)权限:DBA可以启动实例和打开数据库。
3)多实例:多个实例可同时在一台计算机上运行,每个实例存取自己的物理数据库;大规模并行处理系统(MPP)中,ORACLE并行服务器(OPS)允许多个实例装配单个数据库。
三、进程结构
进程:具有一定独立功能的程序对某个数据集合的一次运行活动。又称作业或任务,每个进程有其专用内存区。
关系:进程是程序的执行实例,线程是进程内部的一个执行单元—函数或类对象,每个进程至少有一个线程—主执行线程,线程间通信比进程间通信容易得多,UNIX无线程概念。
ORACLE进程:负责执行客户端和服务器端代码。
ORACLE实例:单进程实例和多进程实例。
1、单进程ORACLE实例
单个进程负责执行客户端和服务器端代码,ORACLE实例和客户端应用程序不能分开执行,又称单用户ORACLE(如MS-DOS下的ORACLE),使用很少。
单进程Oracle实例
2、多进程ORACLE实例
多个进程负责执行代码的不同部分,为每个连接的用户使用单独的进程,又称多用户ORACLE。用户进程执行客户端代码(应用程序或ORACLE工具代码),ORACLE进程执行ORACLE服务器代码。
3、用户进程
用户运行应用程序或ORACLE工具时,建立用户进程。
连接(Connection)是用户进程和ORACLE实例间的一个通信通路(通信机制+网络软件),同一用户可多次连接到同一个数据库实例。
会话(Session)是用户进程和ORACLE实例间的特定连接,同一用户可建立和存在多个会话。
在专用服务器模式中,可为每个用户会话建立服务器进程。
在多线程服务器模式中,多个用户会话可共享单个服务器进程。
4、ORACLE进程
ORACLE进程分为服务器进程(Server Process,又称影子进程Shadow Process)和后台进程(Background Process)。
服务器进程用于处理连接到该实例的用户进程的请求。当应用程序和ORACLE运行在同一主机时,用户进程和相应的服务器进程可组合到单个进程,以减少系统开销;当应用程序和ORACLE运行在不同的主机时,用户进程将通过一个单独的服务器进程与ORACLE联系。
服务器进程完成的工作(分析和执行SQL语句、所需数据不在SGA中时从磁盘数据文件中拷贝数据到SGA的共享数据缓冲区、按要求返回结果)。
后台进程在实例启动或安装时建立,用于优化性能和协调多用户。
多进程Oracle实例(大型机或小型机)
5、后台进程的作系用与关
多进程Oracle实例的后台进程
6、跟踪文件和报警文件
每个进程(前台或后台)在检测到内部错误时,将错误信息记录到其相关的跟踪文件中(Trace File:包含进程名,SNPn除外),但初始化参数SQL_TRACE必须为TRUE。
每个数据库有一个报警文件(Alert File),按时间顺序记录消息和错误。
四、内存结构
ORACLE内存结构:
软件代码区(SCA)。
系统全局区(SGA)。
程序全局区(PGA)。
排序区(SA)。
SCA | PGA | 堆栈区 | 会话信息区 | 私有SQL区(专用模式) |
SGA | 数据库高速缓存(DBC) | |||
重做日志缓冲区(RLB) | ||||
SA | 共享池(SP) | 库高速缓存 | 共享SQL区 | |
私有SQL区(共享模式) | ||||
PL/SQL区(过程和包) | ||||
控制结构(锁、库、句柄) | ||||
数据字典高速缓存(DC) | ||||
控制结构(字符集转换、网络安全属性) | ||||
数据字典高速缓存(DC) | ||||
其它信息区 |
程序代码(正在执行和可能执行的)。
连接和会话信息(活动和不活动的)。
程序执行期间需要的信息(状态信息)。
ORACLE进程间共享和通信的信息(锁信息)。
高速缓存的外存中永久保存的数据(数据块、重做日志条目)。
可以使用虚拟内存,但整个SGA最好放在实际内存中。
通过内存分页(Paging)或交换(Swapping)实现虚拟内存和物理内存的映射,交换以进程为单位,分页以页为单位(典型内存页为4kB)。
分页和交换使用和消耗大量的系统资源,存取磁盘比存取内存大约慢50倍。
3、软件代码区(SCA)
软件区用于保存正在执行和可能执行的代码。
大小一般不变,与安装、升级和操作系统有关。
软件区是只读的,可以安装为共享或非共享的。
ORACLE代码是共享的,可被多个ORACLE用户和实例共享。
用户程序可以是共享或非共享的。
4、系统全局区(SGA)
SGA是实例启动时自动分配的确定大小的共享内存结构,包含实例的数据和控制信息,数据为多用户共享。
SGA是可读写的,连接到实例的所有用户进程可读取SGA中的数据,但只有几个进程可以写SGA。
SGA分为数据库缓冲区高速缓存、重做日志缓冲区、共享池、数据字典高速缓存和其它信息区。
DBC(Database Buffer Cache)用于保存读自数据文件的拷贝,按脏列表(Dirty List)和LRU(Least Recently Used)列表组织;进程直接在内存中读到数据称为命中(Hint),否则成为遗漏;缓冲区池包括KEEP、RECYCLE、DEFAULT三类,初始化参数有BUFFER_POOL_KEEP和BUFFER_POOL_RECYCLE;DBC大小的初始化参数有DB_BLOCK_BUFFER和DB_BLOCK_SIZE。
RLB(Redo Log Buffer)是环行缓冲区,用于保存数据库的全部修改信息,初始化参数有LOG_BUFFER,大的缓冲区可减少日志文件的I/O,缺省为OS最大数据块的4倍。
SP(Shared Pool)包含库高速缓存、数据字典高速缓存和控制结构;库高速缓存包括共享SQL区、私有SQL区、PL/SQL区和控制结构;DC(Dictionary Cache)保存关于数据的逻辑和物理结构的一组表和视图,如用户信息、完整性约束、表的列名和数据类型;控制结构是SGA的固定部分,包含数据库和实例状态的一般信息(后台进程需要的);初始化参数有SHARED_POOL_SIZE
控制SGA使用内存的初始化参数有LOCK_SGA和LOCK_SGA_AREAS(将SGA锁入物理内存)、SHARED_MEMORY_ADDRESS和HI_SGARED_MEMROY_ADDRESS(指定运行时SGA的起始地址)、USE_INDIRECT_DATA_BUFFER(支持大于4GB的物理内存)。
5、程序全局区(PGA)
PGA是进程对应的、可写的、独占的一个内存区,包含某个服务器或后台进程的数据和控制信息;包括堆栈信息、会话信息、私有SQL区(保存捆绑变量和运行缓冲区);PGA大小固定并由操作系统指定,初始化参数OPEN_LINKS、DB_FILES和LOG_FILES影响PGA大小。
6、排序区(SA)
l SA存在于要求排序的ORACLE用户进程的内存中(专用服务器模式时SA在PGA中,MTS模式时SA在SGA中)。
初始化参数有SORT_AREA_SIZE(缺省值又OS指定)和SORT_AREA_RETAINED_SIZE(最小值为一个数据库块,最大值为SORT_AREA_SIZE)。
五、进程配置方案
用户/服务器进程结构。
专用服务器进程结构。
多线程服务器进程结构。
1、用户/服务器进程结构
客户/服务器进程组合的Oracle
应用程序和ORACLE服务器代码运行在同一进程中,又称用户进程(单任务ORACLE)。
接口程序在应用程序和ORACLE代码之间建立隔离,保护ORACLE服务器代码。
某些操作系统支持该配置(如VAX VMS),某些则不支持该配置(如UNIX)。
2、专用服务器进程结构
应用程序和ORACLE服务器代码运行在两个进程中(两任务ORACLE),用户进程与服务器进程是一一对应的。
当用户进程与服务器进程配置为运行在同一主机上时,程序接口使用主机操作系统的进程间通信机制。
当用户进程与服务器进程配置为运行在不同主机上时,程序接口提供进程间的通信机制(如网络软件和SQL *Net2/Net8)。
专用服务区进程的Oracle
3、多线程服务器进程结构
多线程服务器进程结构
多个用户进程可共享一个可用的服务器进程池(不同于共享一个服务器进程),用户进程直接与调度进程连接,调度进程通过请求和响应队列与下一个可用的服务器进程连接。该配置降低系统开销,增加用户个数。
需要的进程类型包括:网络监听进程(Net8的一部分,不是ORACLE的一部分)、调度进程(一个或多个)、共享服务器进程(一个或多个)。
该配置下用户进程必须通过Net8或SQL *Net2与服务器连接,即使用户进程与服务器进程运行在同一主机上。
实例启动时,网络监听进程打开和建立通信通路,每个调度进程给监听进程一个地址;用户进程请求连接时,监听进程检查请求,当确定用户进程可以使用共享服务器进程时,返回调度进程地址,用户进程便可直接连接到调度进程。
六、程序接口
1、程序接口的功能:提供安全屏障,防止用户进程对SGA的破坏性存取。
提供通信机制,格式化请求信息,传送数据,捕捉和返回错误。
转换和解释数据,特别是异类计算机之间、与外部程序之间的数据类型转换。
2、程序接口的结构
ORACLE调用接口(OCI)或运行库(SQLLIB)。
客户或用户端(UPI)。
各种Net8驱动程序(协议指定的通信软件)。
操作系统通信软件。
服务器或ORACLE端(OPI)。
3、程序接口的驱动程序
驱动程序是协议相关的,执行连接、断开、捕捉和测试错误。
可以安装多个驱动程序,并选其一为缺省驱动程序,单个进程可以使用不同的驱动程序连接到不同的数据库,连接时可指定驱动程序。
4、操作系统通信软件
用户端到ORACLE端的最底层连接软件是操作系统提供的通信软件(如TCP/IP、DECnet、LU6.2、ASYNC等)。
七、数据字典
1、数据字典(Data Dictionary)的信息
ORACLE用户名称。
用户的权限(特权和角色)。
模式对象。
模式对象的空间(分配的和使用的)。
列的缺省值。
完整性约束。
审计信息。
其它一般数据库信息。
2、数据字典的结构(基表、视图和动态性能表)
基表保存数据库信息,ORACLE可读写,数据一般是加密格式,存储在SYSTEM表空间中。
视图汇总和显示基表中的信息,数据是解码的,多数用户可被授权访问,存储在SYSTEM表空间中。
动态性能表记录当前数据库活动的虚表,不需要磁盘空间,也不存储在任何表空间中。
3、数据字典的使用
获取数据库信息(性能调整前后查看)。
保存数据库信息(DDL运行时字典相应修改)。
引用数据库信息(编程过程和程序中)。
八、事务管理
1、事务(Transaction)
由一个或多个SQL语句组成的、完成特定任务的逻辑单位,即原子单位。事务开始时,ORACLE给事务分配一个可用的回滚段,记录回滚条目。
2、事务结束的情况
用COMMIT显式提交。
用ROLLBACK显式回滚(到savepoint)。
执行DDL语句前后隐式提交。
断开连接(事务提交)。
进程异常中断(事务回滚)。
3、事务提交(修改永久化)
1)事务提交前
SGA的回滚段缓冲区中生成回滚记录(含旧数据)。
SGA的重做日志缓冲区中生成重做日志条目(提交前可存入磁盘)。
SGA的数据库缓冲区中生成数据的修改(提交前可存入磁盘)。
2)事务提交后
分配回滚段记录及事务的系统修改序号(SCN:唯一),并记录到表中。
LGWR将SGA重做日志条目和SCN写入联机重做日志文件中。
ORACLE释放表和行上的锁。
ORACLE将事务标记为“完成”。
4、事务回滚(全部或部分取消修改)
1)无保留点时的回滚
取消全部修改。
ORACLE释放事务的所有数据锁。
事务结束。
2)有保留点时的回滚
回滚保留点之后执行的语句。
保护指定的保留点,但丢弃指定保留点之后的保留点。
ORACLE释放所有表和指定保留点获得的行锁,但保留指定保留点前获得的数据锁。
事务保持活动,可以继续。
5、保留点(SavePoint)
保留点是事务中的中间标记,用于将一个长事务分割为更小的部分。
作者丨数据与人 来源丨数据与人(ID:shujuyr) dbaplus社群欢迎广大技术人员投稿,投稿邮箱: editor@dbaplus.cn云时代下数据库将如何革新与创变? 金融行业核心数据库迁移与建设如何安全平稳展开? 开源技术如何在实际业务场景中发挥实力? 11月6日,DAMS中国数据智能管理峰会将在上海举办,专设【数据库分场】,部分议题如下:
《All in Cloud时代,下一代云原生数据库技术与趋势》阿里巴巴 集团副总裁 李飞飞(飞刀)
《金融行业分布式数据库需求及选型》工商银行 数据中心系统三部副总经理 赵永田
《从自研演进看分布式数据库》中国银联 云计算中心团队主管 周家晶
《开源数据库MySQL在民生银行的应用实践》民生银行 项目经理 徐春阳