zoukankan      html  css  js  c++  java
  • 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可以运行在归档模式和非归档模式

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

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

    • 取消与失败硬盘相关的表空间
    • 恢复某个结点的数据,丢失一段时间的工作
    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    Linux找回root密码
    关于Linux的随笔笔记
    需求征集系统进度03
    需求征集系统进度02
    需求征集系统进度01
    第六周总结
    阅读笔记03
    第一周总结
    第五周总结
    阅读笔记02
  • 原文地址:https://www.cnblogs.com/YC-L/p/14648898.html
Copyright © 2011-2022 走看看