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可以运行在归档模式和非归档模式

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

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

  • 取消与失败硬盘相关的表空间
  • 恢复某个结点的数据,丢失一段时间的工作
论读书
睁开眼,书在面前
闭上眼,书在心里
原文地址:https://www.cnblogs.com/YC-L/p/14648898.html