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可以运行在归档模式和非归档模式
如果不用归档,系统不实用,丢失数据不可避免,二者区别就在于重用重做日志文件做了哪些工作
若没有使用归档模式,硬盘发生故障,则必须
- 取消与失败硬盘相关的表空间
- 恢复某个结点的数据,丢失一段时间的工作
睁开眼,书在面前 闭上眼,书在心里