Oracle专家高级编程 第二章 服务器和文件

文件,参数文件、数据文件、临时数据文件和重做日志文件

系统全局区域,SGA、PGA和UGA

物理进程与线程,服务器进程、后台进程和从属进程

服务器#

  • 数据库--物理操作系统文件的集合
  • 实例--一组Oracle和SGA

一组数据库可以被多个实例安装(mount)和打开(open)

在任何时候,实例可以及时装载并打开一个单独的数据库

Oracle抽象图

Oracle拥有大块的内存--SGA#

  • SGA中,Oracle存储着许多所有进程都要访问的内部数据结构
  • 高速缓存从磁盘上获得的数据
  • 重做数据写入磁盘前,进行高速缓存
  • 保存已分析的SQL方案

UNIX中,物理地随着于大的共享内存段上--位于OS中可以被许多进程同时访问

Windows中,她们使用C的调用函数malloc()分配内存

Oracle后台进程#

在UNIX中,只有一个Oracle程序,有多个后台进程

Oracle在登陆时创建一个进程,专用服务器配置

客户进程将在TCP/IP套接字这样的一些网络管道中,与专用服务器连接,接收SQL并运行

Oracle的MTS模式#

对大批用户使用一个"共享服务器"池,共享服务器是一个连接池机制

MTS模式与专用服务器之间的区别#

  • 连接到数据库的客户端进程可以直接与专用服务器对话
  • 共享服务器有一套自己的对话机制:分配器(dispatcher)

dispatcher将客户端请求放入SGA中的请求队列

  • 放入队列,排队等待取出
  • 取出队列处理
  • 服务完成,放入响应队列,由分配器选择,传送回客户端

TNS、SID和TNS Listener#

  • TNS代表透明网路底层,Transparent Network Substrate
  • 内建于Oracle客户端的平台软件,它处理远程连接--允许进行对等通信
  • TNS连接串通知Oracle软件如何连接到远程数据库
  • TNS连接串告诉Oracle软件如何连接到远程数据库,读取TNSNANES.ORA,纯文本配置文件
  • SID,Site Identifier,站点标识符

在网络上,服务器会运行一个称为TNS Listener的进程#

这个监听器进程实际连接到数据库,收到入站连接请求时,先检查这个请求,使用它自己的配置文件

拒绝请求或者接受请求,完成连接

如果使用专用服务器连接,监听器进程创建一个专用服务器,UNIX上,通过fork和exec系统调用完成

监听器进程请求数据库进程创建一个新的线程,客户机被重定向(redirected)到线程

如果做出MTS请求,监听器行为将会不同,监听器进程知道我们在数据库运行的分配器

当收到连接请求时,监听器将从可用的分配器池中选择一个分配器进程

文件#

参数文件#

  • TNSNAMES.ORA
  • SQLNET.ORA
  • PROTOCOL.ORA
  • NAMES.ORA
  • CMAN.ORA
  • LDAP.ORA

数据库的参数文件,init.ora文件,定义了各种环境变量和启动时候的配置参数

数据文件#

真正的数据库至少有两个文件--系统SYSTEM和用户USER

段segment(存储对象的物理映射)#

  • 段是数据对象,消耗空间--对象,如表、索引、回滚段
  • 创建表的时候,创建一个表段
  • 创建分区的时候,创建一个分区段
  • 创建索引的时候,创建一个索引段
  • 每一个消耗存储空间的对象都被存储到一个单独的段中
  • 回滚段、临时段、聚簇段、索引段

盘区extent#

  • 由块组成,是一个连续的分配空间
  • 盘区内空间连续,盘区外空间可以不连续
  • 块是Oracle中空间分配最小单元,是存储数据行、索引项、临时排序结果的地方
  • 块是Oracle读写磁盘的对象,通常2KB,4KB,8KB

块block#

块头

  • 包含关于块类型(表块、索引块等等)信息,块上活动和过时事务信息,磁盘上块的地址信息
  • 表目录,包含各行表的信息
  • 行目录,包含块中发现的描述行的信息

块开销:块头,表目录,行目录

表空间tablespace#

表空间是一个容器,保存段,每个段恰好属于一个表空间

表空间本身是一个有一个或多个与之相关联的数据文件

表空间给定任何一个段的盘区完全包含在一个数据文件中,一个段可以拥有来自许多不同数据文件中的盘区

表空间是一个逻辑存储容器

Oracle中存储的层次结构

  • 数据库由一个或多个表空间组成
  • 表空间由一个或多个数据文件组成,一个表空间包含段
  • 段(表、索引)由一个或多个盘区组成,段存在于表空间,但在表空间可以有许多数据文件数据

表空间字典管理#

在数据字段表中管理表空间的空间

请求胸获得一个盘区,Oracle会到它的数据字典表中,发现空间随后更新一个表中的行,并在另一个表插入

Oracle8之后引入本地表空间,使用位图bitmap管理

临时文件#

当内存不足以在RAM中保存一个大规模排序操作的中间结果或结果集时,Oracle使用临时文件存储它们

临时表或临时索引是可能存储到临时文件的

临时文件不生成UNDO重做日志,之生成UNDO撤销日志

控制文件#

控制文件比较小,最大到64MB,包含oracle需要的其他文件目录

init.ora通知实例oracle所在的位置和其他信息

控制文件应该由硬件或镜像不可用时多路复用,即有多个副本

丢失控制文件是知名的

重做日志文件(redo log)#

用于恢复数据,比如突然掉电,故障宕机,使用redo恢复到电源停止前一刻

如果磁盘永久故障,oracle使用归档的redo

oracle每之行一个操作都会生成一个redo

联机重做日志#

至少有两个联机重做文件,这种文件大小固定,以循环的方式使用

日志切换,如上图,写满log1,然后去写log2,写满log2,然后去写log3

日志切换可能会临时挂起

检查点checkpointing#

数据库区高速缓存是数据库临时存储数据的地方,是Oracle中SGA的结构

当commit时,修改永久化,oracle将重做日志缓冲期写到联机重做日志中

  • 只要修改的块在Cache中而不在磁盘上,就需要联机重做日志的内容

DBWa,负责在缓冲区高速缓存溢出的时候创造空间,执行检查点

检查点是从缓冲区高速缓存到磁盘上脏块的刷新,当日志切换的时候oracle初始化一个检查点

不同的应用程序将生成不同的数量的联机重做日志

DSS(决策支持系统,Decision Support System)将自然生成重要的联机重做日志

DSS比OLTP(transaction processing)系统生成得少

  • 备用数据库,重做日志填满后发送到另一台机器,小的重做日志文件更合适
  • 许多用户修改相同的块,需要大的重做日志,每个人都修改相同的块,日志切换触发检查点
  • 恢复的平均时间,保证恢复需要尽可能少的时间,需要较小的重做日志文件

归档重做日志#

Oracle可以运行在归档模式和非归档模式

如果不用归档,系统不实用,丢失数据不可避免,二者区别就在于重用重做日志文件做了哪些工作

若没有使用归档模式,硬盘发生故障,则必须

  • 取消与失败硬盘相关的表空间
  • 恢复某个结点的数据,丢失一段时间的工作
posted @   BigBender  阅读(46)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-04-13 八大排序之选择类排序
点击右上角即可分享
微信分享提示
主题色彩