oracle emoji保存自动转成了??_一文理清Oracle数据库管理系统体系结构

本文主要介绍Oracle数据库管理系统的基本轮廓和程序模块结构、实例概念和组织、进程结构和功能、内存结构和用途,数据字典结构和使用、进程配置和管理、运行模式、程序接口、事务管理。

一、基本轮廓和程序模块结构

88e7cf350b81320c3ba9eee3c6c28751.png

Oracle基本轮廓

3bbe08be75b5265d1e9ca0af6093e1df.png

Oracle数据库管理系统体系结构

48d2b2f7a9faa54a036e0c4f99f6cbf0.png

Oracle数据库系统体系结构

  • 数据库:存放数据的仓库,有组织的、可共享的、存储的数据集合,按数据模型组织、描述和存储、较小数据冗余度、较高数据独立性和易扩展性、可为用户共享。

  • 数据库实例:存取和控制数据库的软件机制,SGA(System Global Area)和ORACLE进程的组合,内存和进程用于管理数据库的数据,并为数据库用户服务。

  • 物理结构:由操作系统文件组成,包括数据文件(一个或多个)、重做日志文件(两个或多个)、控制文件(一个或多个)。

  • 逻辑结构:由表空间、段、范围、数据块、模式对象组成,通过逻辑结构控制磁盘空间的使用。

  • 模式对象:直接引用数据库数据的逻辑结构,包括表、视图、序列、存储过程、触发器、同义词、索引、集聚、数据库链、快照等。

5223bfd788a138cabb647a244830a565.png

Oracle物理和逻辑实体关系图

4acf6369408bf9f6afa8218362bb0462.png

二、实例的基本概念

实例: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),使用很少。

3d168ecc076d364102bc85434bb7a452.png

单进程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的共享数据缓冲区、按要求返回结果)。

  • 后台进程在实例启动或安装时建立,用于优化性能和协调多用户。

4fc751ec767fcb9b215cc86577c0e9ab.png

多进程Oracle实例(大型机或小型机)

5、后台进程的作系用与关

87302d98af41de62e75e0845d26e3f34.png

多进程Oracle实例的后台进程

b5402d5852a10265b1d41caca7764a14.png

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)

其它信息区

1、ORACLE内存中保存的信息
  • 程序代码(正在执行和可能执行的)。

  • 连接和会话信息(活动和不活动的)。

  • 程序执行期间需要的信息(状态信息)。

  • ORACLE进程间共享和通信的信息(锁信息)。

  • 高速缓存的外存中永久保存的数据(数据块、重做日志条目)。

2、虚拟内存
  • 可以使用虚拟内存,但整个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、用户/服务器进程结构

dcff51a7f40f3dea88e22a4a8f17737e.png

客户/服务器进程组合的Oracle

  • 应用程序和ORACLE服务器代码运行在同一进程中,又称用户进程(单任务ORACLE)。

  • 接口程序在应用程序和ORACLE代码之间建立隔离,保护ORACLE服务器代码。

  • 某些操作系统支持该配置(如VAX VMS),某些则不支持该配置(如UNIX)。

2、专用服务器进程结构
  • 应用程序和ORACLE服务器代码运行在两个进程中(两任务ORACLE),用户进程与服务器进程是一一对应的。

  • 当用户进程与服务器进程配置为运行在同一主机上时,程序接口使用主机操作系统的进程间通信机制。

  • 当用户进程与服务器进程配置为运行在不同主机上时,程序接口提供进程间的通信机制(如网络软件和SQL *Net2/Net8)。

6927ce55e49877f73413933cda8d568e.png

专用服务区进程的Oracle

3、多线程服务器进程结构

c5f66eaa145ec860cbb366ac299e8397.png

多线程服务器进程结构

  • 多个用户进程可共享一个可用的服务器进程池(不同于共享一个服务器进程),用户进程直接与调度进程连接,调度进程通过请求和响应队列与下一个可用的服务器进程连接。该配置降低系统开销,增加用户个数。

  • 需要的进程类型包括:网络监听进程(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在民生银行的应用实践》民生银行 项目经理 徐春阳

立即扫码享受 早鸟价 ,在数据库变迁中站稳脚跟!

39ead49cf48aef45b1b18d717aeaf4e9.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值