Oracle学习笔记--系列一(8)oracle 体系结构概述

170 篇文章 14 订阅

(8)oracle 体系结构概述

在这里插入图片描述

视频链接:
https://www.bilibili.com/video/BV1Zt411w7eQ?p=10

相关文章:《Oracle 体系结构详解》

oracle包括:oracle数据库软件、oracle数据库
oracle数据库软件位置:$ORACLE_HOME
oracle数据库位置:数据库文件存放位置

数据库软件和数据库文件可以分开存储在不同位置,一般规则是:oracle数据库软件存放在本地硬盘上,Oracle数据库存放在存储上。

Oracle服务器:

  • 是一个数据库管理系统,它提供了一种开放、全面、集成的方法来管理信息
  • 由Oracle 实例(oracle instance)和Oracle数据库(oracle database)组成
    在这里插入图片描述
    组成数据库的主要文件:
  • 控制文件(.lctl)
  • 数据文件(.dbf)
  • 日志文件(.log)

在这里插入图片描述
oracle数据库启动后,Oracle首先在内存中划出一部分空间,供Oracle使用,这部分内存叫Oracle内存。同时启动一堆进程。这些内存和进程统称Oracle实例。
所以说,Oracle数据库启动后,会产生一个数据库实例。
Oracle数据库关闭后,实例会消失。

数据库和实例对应关系:

  • 一对一
  • 一对多(如 RAC)

用户访问数据库:
用户连接实例,通过实例访问数据库。

数据库启动前:

# su - oracle
$ ps -ef|grep ora
oracle   13189     1  0 Aug26 ?        00:00:27 /oracle/app/product/12.1.0/dbhome_1/bin/tnslsnr LISTENER -inherit
root     24093 24038  0 15:30 pts/0    00:00:00 grep --color=auto ora

没有ora后台进程

$ ipcs

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status

------ Semaphore Arrays --------
key        semid      owner      perms      nsems

Shared Memory Segments 也没有

$ export NLS_LANG=american_america.zhs16gbk
$ sqlplus / as sysdba
SQL >startup

数据库启动后再次查看:

# ps -ef|grep ora
oracle    6236     1  0 Sep08 ?        00:00:14 ora_pmon_ruiadg
oracle    6238     1  0 Sep08 ?        00:00:42 ora_psp0_ruiadg
oracle    6241     1  2 Sep08 ?        01:15:40 ora_vktm_ruiadg
oracle    6245     1  0 Sep08 ?        00:00:07 ora_gen0_ruiadg
oracle    6249     1  0 Sep08 ?        00:00:06 ora_mman_ruiadg
oracle    6251     1  0 Sep08 ?        00:00:10 ora_diag_ruiadg
oracle    6253     1  0 Sep08 ?        00:00:57 ora_dbrm_ruiadg
oracle    6255     1  0 Sep08 ?        00:01:15 ora_vkrm_ruiadg
oracle    6257     1  0 Sep08 ?        00:03:04 ora_dia0_ruiadg
oracle    6259     1  0 Sep08 ?        00:00:12 ora_dbw0_ruiadg
oracle    6261     1  0 Sep08 ?        00:01:15 ora_lgwr_ruiadg
oracle    6263     1  0 Sep08 ?        00:01:02 ora_ckpt_ruiadg
oracle    6265     1  0 Sep08 ?        00:00:03 ora_lg00_ruiadg
oracle    6267     1  0 Sep08 ?        00:00:04 ora_smon_ruiadg
oracle    6269     1  0 Sep08 ?        00:00:02 ora_lg01_ruiadg
oracle    6271     1  0 Sep08 ?        00:00:03 ora_reco_ruiadg
oracle    6273     1  0 Sep08 ?        00:00:06 ora_lreg_ruiadg
oracle    6275     1  0 Sep08 ?        00:00:05 ora_pxmn_ruiadg
oracle    6277     1  0 Sep08 ?        00:01:07 ora_mmon_ruiadg
oracle    6279     1  0 Sep08 ?        00:01:51 ora_mmnl_ruiadg
oracle    6297     1  0 Sep08 ?        00:00:03 ora_tmon_ruiadg
oracle    6299     1  0 Sep08 ?        00:00:02 ora_arc0_ruiadg
oracle    6302     1  0 Sep08 ?        00:00:03 ora_arc1_ruiadg
oracle    6304     1  0 Sep08 ?        00:00:11 ora_arc2_ruiadg
oracle    6306     1  0 Sep08 ?        00:00:03 ora_arc3_ruiadg
oracle    6408     1  0 Sep08 ?        00:00:04 ora_p000_ruiadg
oracle    6410     1  0 Sep08 ?        00:00:04 ora_p001_ruiadg
oracle    6412     1  0 Sep08 ?        00:00:04 ora_p002_ruiadg
oracle    6414     1  0 Sep08 ?        00:00:04 ora_p003_ruiadg
oracle    6416     1  0 Sep08 ?        00:00:04 ora_p004_ruiadg
oracle    6418     1  0 Sep08 ?        00:00:04 ora_p005_ruiadg
oracle    6420     1  0 Sep08 ?        00:00:04 ora_p006_ruiadg
oracle    6422     1  0 Sep08 ?        00:00:04 ora_p007_ruiadg
oracle    6435     1  0 Sep08 ?        00:00:02 ora_tt00_ruiadg
oracle    6437     1  0 Sep08 ?        00:00:18 ora_tt01_ruiadg
oracle    6439     1  0 Sep08 ?        00:00:16 ora_smco_ruiadg
oracle    6445     1  0 Sep08 ?        00:00:02 ora_aqpc_ruiadg
oracle    6449     1  0 Sep08 ?        00:00:35 ora_cjq0_ruiadg
oracle    6523     1  0 Sep08 ?        00:00:02 ora_qm02_ruiadg
oracle    6527     1  0 Sep08 ?        00:00:02 ora_q002_ruiadg
oracle    6529     1  0 Sep08 ?        00:00:03 ora_q003_ruiadg
oracle   10566     1  0 15:05 ?        00:00:00 ora_w000_ruiadg
oracle   11134     1  0 15:15 ?        00:00:00 ora_w001_ruiadg
root     11906 11849  0 15:28 pts/0    00:00:00 grep --color=auto ora
oracle   30269     1  0 Aug26 ?        00:00:29 /oracle/app/product/12.1.0/dbhome_1/bin/tnslsnr LISTENER -inherit
# ipcs

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 108986368  oracle     640        2928640    86
0x00000000 109019137  oracle     640        2449473536 43
0x00000000 109051906  oracle     640        13848576   43
0x3a7602cc 109084675  oracle     640        12288      43

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0xb7201bc8 2883584    oracle     640        152
0xb7201bc9 2916353    oracle     640        152
0xb7201bca 2949122    oracle     640        152

在这里插入图片描述
这些存储空间中,最容易出现问题的是 共享池和数据库缓冲区高速缓存。

Oracle内存结构
与Oracle实例关联的基本内存结构包括:

  • 系统全局区(SGA):由所有服务器进程和后台进程共享
  • 程序全局区(PGA):专用于每一个服务器进程或后台进程。每一个进程使用一个PGA。
    SGA是包含实例的数据和控制信息的内存区。

SGA包含以下数据结构:

  • 数据库缓冲区高速缓存:缓存从数据库检索的数据块
  • 重做日志缓冲区:高速缓存重做信息(用于实例恢复),直到可以将其写入磁盘中存储的物理重做日志文件
  • 共享池:缓存可在用户间共享的各个结构
  • 大型池:是一个可选区域,可为某些大型进程(如Oracle备份和恢复操作、I/O服务器进程)提供大量内存分配
  • Java池:用于Java 虚拟机(JVM)中特定会话的所有Java代码和数据* Streams 池:由Oracle Streams 使用

通过使用Enterprise Manager或SQL*Plus启动实例,可以显示为SGA分配的内存量。

程序全局区(PGA)是包含各个服务器进程的数据及控制信息的内存区。Oracle服务器进程为客户机的请求提供服务。每个服务器进程都有自己专用的PGA,这个PGA是在服务器进程启动时创建的。由该服务器进程对PGA进行独占访问,只能通过对PGA执行操作的Oracle代码对PGA进行读写访问。
使用动态SGA基础结构时,可以在不关闭实例的情况下,更改数据库缓冲区高速缓存、共享池、大型池和Java池以及Streams 池的大小。
Oracle数据库使用初始化参数创建并配置内存结构。例如,SGA_TARGET 参数可指定SGA的总大小。如果SGA_TARGET 设置为0,则会禁用“自动共享内存管理”。

数据库启动后,有两大块内存:SGA、PGA
SGA是所有进程共享的,PGA是给特定进程使用的(进程空间)。
进程私有的信息会写入PGA。
在这里插入图片描述
oracle启动的进程包括两类:后台进程、前台进程(服务器进程:server process)。

以淘宝购物为例
客户端通过IE浏览器连接到淘宝的web服务器(应用服务器),淘宝商品的数据存储在数据库上,web服务器启动后会主动建立到Oracle实例的一堆连接(连接池),连接数量在web服务器可以设置,然后oracle实例会针对web服务器的每一个连接建立一个进程与其对应。建设web服务器建立了100个到oracle实例的连接,那么就会有100个sever process 。

当用户搜索商品时,web服务器会从这100个连接中随机选择一个空闲连接,web服务器会产生一条访问商品的SQL语句,并通过该连接传给oracle,oracle收到SQL 后会对其进行解析、执行、取数据,再通过这个连接将数据返回给web服务器,web服务器再以web界面的方式将数据返给用户。

在这里插入图片描述
六大进程池、五大后台进程、三大文件

控制文件
控制文件主要存放内容:

  • 整个数据库的物理结构信息
  • 数据库当前运行的状态信息

数据文件
存放的是实实在在的数据

重做日志文件
存放日志,记录对数据文件所做的每一个数据块的变化过程。


上一篇:Oracle学习笔记–系列一(7)
下一篇:Oracle学习笔记–系列一(9)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值