• 手动创建数据库实例全攻略2:oracle instance 和oracle database


    一、ORACLE结构的简单说

      ORACLE区分为instance和database其实让我很迷茫的,只是看到如下这个图片才有些解惑的感觉

    由这张图可以清楚的看到ORACLE的结构:INSTANCE 和DATABASE。

    其实我到是觉得如何区分到是没有太多所谓,只要你自己心中知道他们的逻辑关系结构就可以了。有些人把SGA,PGA和BACKGROUP区分开来,我想这样只是为了更好的说明结构的组成吧。

    二、详细拆分ORACLE

    1、ORACLE INSTANCE
      ORACLE INSTANCE包括了内存结构(SGA)和一系列后台进程(Background Process),两者合起来称为一个Oracle实例。用数学方式表达就是Oracle Instance = SGA + Background Process.在前面一张手动建立自己mydb的时候就看得到,启动SGA 和BACKGROUD Process基本启动了Oracle Instance,但还没有去读取Oracle Database。

    2、ORACLE内存结构
      ORACLE内存结构很简单:SGA+PGA.
      其中SGA由服务器和后台进程共享,每次启动数据库的时候会分配SGA信息
      其次PGA包含单个服务器进程或单个后台进程的数据和控制信息,与多个进程共享的SGA 正相反,PGA是只被一个进程使用的区域,PGA 在创建进程时分配在终止进程时回收,即由服务器进程产生。

    2.1 SGA拆分
      如上图,SGA可以包括:数据缓冲区+ 重做日志缓冲区+ 共享池+ 大池+ Java 池+ 流池……。系统全局区是动态的,由参数SGA_MAX_SIZE决定
    SGA:
    查看:show parameter sga_
    修改:alter system set sga_max_size=2000M scope=both|{spfile|memory}

    数据缓冲区(Database buffer cache):
    大小由db_cache_size 决定
    查看:show parameter db_cache_size;
    修改:alter system set db_cache_size=800M;

    重做日志缓冲区(REDO LOG BUFFER):
    对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘,大小由LOG_BUFFER决定

    共享池(Shared pool):
    是SGA中最关键的内存片段,共享池主要由库缓存(共享SQL区和PL/SQL区)和数据字典缓存组成,它的作用是存放频繁使用的sql,在有限的容量下,数据库系统根据一定的算法决定何时释放共享池中的sql。库缓存大小由shared_pool_size 决定
    查看:show parameter shared_pool_size
    修改:alter system set shared_pool_size=120m;

    数据字典缓存:
    存储数据库中数据文件、表、索引、列、用户和其它数据对象的定义和权限信息大小由shared_pool_size 决定,不能单独指定

    大池(Large pool):
    是一个可选的区域,用于一些大型的进程如Oracle的备份恢复操作、IO服务器进程等

    Java 池:
    该程序缓冲区就是为Java 程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小

    流池(Stream pool):
    被Oracle流所使用

    2.2 PGA拆分

    是为每个用户进程连接ORACLE数据库保留的内存进程创建时分配,进程结束时释放,只能被一个进程使用
    PGA包括了以下几个结构:

    • 排序区
    • 游标状态区
    • 会话信息区
    • 堆栈区

    由参数:pga_aggregate_target 决定

    2.3 常见的Process

    用户进程:在用户连接数据库产生,请求oracle服务器连接,必须要先建立一个连接,不会直接和oracle服务器连接
    服务器进程:当连接实例并建立用户会话时产生,独立服务器或者提供共享服务器都能产生
    后台进程:维持物理和内存之间的联系,用来管理数据库的读写,恢复和监视等工作。
    Server Process主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。在Unix机器上,Oracle后台进程相对于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程。
    在Windows机器上,Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。

    必须要有的后台进程

    • DBWn -->数据库写进程
    • PMON -->程序监控进程
    • SMON -->系统监控进程
    • LGWr -->日志写进程
    • CKPT -->检查点进程


    可选进程:

    • ARCN 归档进程
    • RECO
    • Snnn
    • pnnn

    2.4 常见进程作用简述

    DBWn(数据库写进程)
    负责将修改过的数据块从数据库缓冲区高速缓存写入磁盘上的数据文件中写入条件:

    • 发生检查点
    • 脏缓存达到限制
    • 没有自由的缓存
    • 超时发生
    • 表空间离线
    • 表空间只读
    • 表被删除或者截断
    • 开始备份表空间

    可以修改数据写进程的数量:alter system set db_writer_processes=3 scope=spfile;

    PMON(程序监控进程)
    清除失效的用户进程,释放用户进程所用的资源。
    如PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。

    • 清除失败的进程
    • 回滚事务
    • 释放锁
    • 释放其他资源


    SMON(系统监控进程)
    检查数据库的一致性,当启动失败时完成灾难恢复等
    实列恢复时,前滚所有重做日志中的文件,打开数据库为了用户能访问,回滚未提交的事务,释放临时表空间

    • 清除临时空间,聚结空闲空间,从不可用的文件中恢复事务的活动,OPS中失败节点的实例恢复
    • 清除OBJ$表
    • 缩减回滚段
    • 使回滚段脱机


    LGWr(日志写进程)
    将重做日志缓冲区中的更改写入在线重做日志文件条件:

    • 提交(commit)
    • redo log buffer达到1/3满
    • 每隔3秒
    • 有大于1MB 重做日志缓冲区未被写入磁盘
    • DBWR需要写入的数据的SCN号大于LGWR 记录的SCN号
    • DBWR 触发LGWR写入超时在dbwr进程些之前写日志


    CKPT(检查点进程)
    DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一致,CKPT进程负责同步数据文件,日志文件和控制文件
    CKPT会更新数据文件/控制文件的头信息条件:

    • 在日志切换的时候
    • 数据库用immediate ,transaction ,normal选项shutdown数据库的时候

    根据初始话文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置的数值来确定用户触发

    ARCN(归档进程)
    在每次日志切换时把已满的日志组进行备份或归档
    条件:

    • 数据库以归档方式运行的时候

    RECO
    负责解决分布事物中的故障。Oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。
    RECO进程试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。

    Server Process(服务进程)
    分为专用服务进程(Dedicated Server Process)和共享服务进程(MultiTreaded Server Process)
    专用服务进程:一个服务进程对应多个用户进程,轮流为用户进程服务。

    用户进程(User Process)、服务进程(Server Process)、后台进程(Background Processes)的启动
    用户进程: 数据库用户请求Oralce server会话时被启动
    服务进程:当用户会话启动后,连接到Oracle实例时该进程被启动
    后台进程:当Oracle实例被启动时,启动相关的后台进程

    三、ORACLE DATABASE

      ORACLE DATABASE是一些列的看得见的物理文件的集合,如包括控制文件、数据文件、联机日志文件、参数文件、密码文件等。用数学方式表达即为:Oracle Database = Controlfile + datafile + logfiel + spfile +Parameter file +orapw file ……

    3.1.控制文件(controlfile)
    包括非常多的内容,且对数据库非常之重要,特别是在数据恢复的时候。

    • 控制文件包括数据库的名字
    • 检查点信息
    • 数据库创建的时间戳
    • 所有的数据文件信息
    • 联机日志文件信息
    • 归档日志文件信息
    • 备份信息等


    3.2.数据文件(datafile)
    包含了用户和应用程序的所有数据
    --包括所有数据的文件信息

    3.3.联机日志文件
    记录了用户对数据库的所有操作,一个数据库中至少要有两个日志组文件,每个日志组中至少有一个日志成员。日志组中的多个日志成员是互为镜相关系

    3.4.归档日志文件
    Oracle可以运行在两种模式之中,归档模式和非归档模式。在归档模式中,为了保存用户的所有修改,在联机日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。用户恢复意外情况出现的数据丢失、异常等。

    3.5.参数文件(pfile和spfile)
    initSID.ora或init.ora文件,通常位于:$ORACLE_BASE/admin/<SID>/pfile
    初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等,在数据库启动的时候加载(Nomount时加载)

    3.6.其他文件
    密码文件:用于Oracle 的具有sysdba权限用户的认证.
    告警日志文件:报警日志文件(alert.log或alrt.ora),记录数据库启动,关闭和一些重要的出错信息
    查看路径:select value from v$PARAMETER where name =‘background_dump_dest’;

    3.7.数据库逻辑组织结构
    表空间、段、区、块
    一个数据库由一个或多个表空间组成,一个表空间只能属于一个数据库
    一个表空间由一个或多个多个数据文件组成,一个数据文件只能属于一个表空间
    一个数据文件由一个或多个操作系统块组成,每一个操作系统块只能数以一个数据文件
    一个表空间可以包含一个或多个段,一个段只能属于一个表空间
    一个段由一个或多个区组成,每一个区只能属于一个段
    一个区由一个或多个Oracle 块组成,每一个Oracle块只能属于一个区
    一个区只能属于一个数据文件,数据文件的空间可以分配到一个或多个区
    一个Oracle 块由一个或多个操作系统块组成,一个操作系统块是一个Oracle块的一部分

    四、ORACLE INSTANCE 和ORACLE DATABASE关系

    4.1.一个实例能够装载及打开仅仅一个数据库
    4.2.一个数据库能够被多个实例装载并打开
    4.3.实例与数据库的对应关系是一对一或多对一的关系

  • 相关阅读:
    《JS实现复制内容到剪贴板功能,可兼容所有PC浏览器,不兼容手机端》
    《Web开发中块级元素与行内元素的区分》
    《Web开发中让盒子居中的几种方法》
    《Javascript、jQuery获取各种屏幕的宽度和高度方法》
    《Web开发过滤Javascript、HTML的方法》
    《移动端浏览器Touch事件判断手指滑动方向方法》
    《C#微信开发系列(4)-接收 / 返回文本消息》
    《C#微信开发系列(3)-获取接口调用凭据》
    django rest-framework
    git
  • 原文地址:https://www.cnblogs.com/alexy/p/createdb2.html
Copyright © 2020-2023  润新知