zoukankan      html  css  js  c++  java
  • oracle数据库架构

    3.1 Client/Server

    Oracle 采取的是 Client/Server 架构

    oracle 服务端分为两部分:

    1. Instance 实例
    2. Database 数据库

    实例, 又称为数据库引擎,由 SGA(System Global Area, 系统全局区) 一系列后台进程 组成。它需要启动才会生成,用来加载并管理一个数据库。

    数据库, 是保存在硬盘上的文件集合,它是数据的主要载体。

    $OracleBaseoradata[数据库名字]
    

    3.2 实例启动过程

    服务启动的大致过程:

    1. [读取] 读取系统的 ORACLE_SID 环境变量,确定要启动的实例名字,比如为 xxoo
    2. [加载] 从 $ORABASE/admin/xxoo$ORA_HOME/database/SPFILEXXOO.ora 等位置加载相关配置文件。配置文件的名字是根据 sid 来定义的。
    3. [启动] 从配置文件中,读取相关信息,比如数据库名字、数据库控制文件位置、SGA 等信息,并根据这些,初始化数据库加载需要的 内存空间(SGA)相关进程
    4. [装载] 根据配置文件中读取的数据库信息,找到各种数据文件位置,并装载数据库。
    5. [启动] 进行数据校验等,如果没有问题,启动数据库。

    可以通过查看启动过程协助理解:

    -- 首先,登录 sys 用户,只有管理员才有完全操纵数据库的权力
    -- shutdown 用来关闭。如果不带参数,默认为 normal
    ---- immediate 表示立即关闭,如果有未处理完操作,回滚并断开
    ---- normal 表示等待所有连接断开才关闭数据库
    ---- transaction 表示等事务介绍才断开
    shutdown immediate;
    
    -- 启动数据库,分解为三个动作:
    ---- 启动实例
    ---- 利用启动的实例去挂载数据库
    ---- 校验并打开数据库
    -- 只有完全打开,才能进行完全的数据操作
    -- 也可以指定参数,启动到某个阶段。这是在维护数据库中使用的命令。
    startup             -- 如果不加参数,
    startup nomount     -- 启动到 nomount 阶段
    startup mount       -- 启动到 mount 阶段
    
    -- 当然,也可以这样分步启动:
    startup nomount
    alter database mount
    alter database open
    

    3.3 数据库的物理组件

    数据库是保存在操作系统的一系列文件。

    默认安装情况下,这些文件都在 $ORACLE_BASE/oradata 文件夹下:

    oradata/
    └── orcl [数据库的名字]
        ├── CONTROL01.CTL
        ├── CONTROL02.CTL
        ├── EXAMPLE01.DBF
        ├── REDO01.LOG
        ├── REDO02.LOG
        ├── REDO03.LOG
        ├── SYSAUX01.DBF
        ├── SYSTEM01.DBF
        ├── TEMP01.DBF
        ├── UNDOTBS01.DBF
        └── USERS01.DBF
    

    从文件角度分析,一个数据库包含下面几类(组件):

    1. 控制文件(control file)。记录数据库的物理结构和其他信息,如数据库名称、各种文件位置等。多副本。
      select * from v$controlfile;
      
    2. 数据文件(data file)。用来存储数据的文件,会自动扩张。数据以块为单位进行保存。
      select name, status, enabled from v$datafile;
      
    3. 重做日志文件(redo log)。用来记录用户的所有操作,为了备份恢复。一个数据库至少有两个日志组,每个日志组至少有一个成员,成员之间是镜像关系。用户的操作会记录到 redo log 中,当一个组记录满了,会自动切换到下一个组。轮流循环。
      -- 需要理解 Oracle 日志的思路:
      -- 它采取了【多个分组,轮流循环写入;每组多成员,互为镜像;保存更多信息,使用归档模式】的方式,保证了记录安全性。
      -- 在生产环境中,需要日志调整到不同的磁盘中,这样,即使某个文件损坏,或某块磁盘损坏,都可以通过镜像的日志文件对数据进行恢复。
      
      -- 查看 redo log 日志组
      select * from v$log;
      select * from v$logfile;
      
      -- 增加/删除 日志组
      alter database add  logfile 'd:/sss.rlog' size 100m;
      alter database drop logfile 'd:/sss.rlog';
      
      -- 清空日志组
      alter database clear logfile group 1;
      alter database clear unarchived logfile group 1;
      
      -- 为日志组 增加/重命名/删除 成员
      alter database add  logfile member 'd:/ssss.log' to group 1;
      alter database rename file 'd:/ssss.log' to 'd:/ssss.rlog';
      alter database drop logfile member 'd:/ssss.rlog';
      
      -- 日志组一般是在写满的时候自动切换。
      -- 我们也可以手动切换
      alter system switch logfile;
      
    4. 归档日志文件。是重做日志的补充(redo log 记录的记录是有限的),可以把写满的 redo log 进行备份。
      -- Oracle 的归档模式默认是关闭的
      -- 归档模式会占用大量空间
      -- 但他们用更多的空间,保存更多的历史记录,保障更大的安全性
      
      -- 查看状态
      archive log list;
      
      -- 切换数据库到归档模式
      alter database archivelog;
      
      -- 启动
      archive log start;
      
      -- 查看状态
      archive log list;
      
    5. 其他文件

    3.4 数据库的逻辑组件

    从 Oracle 内部管理数据的角度,可以将 Oracle 分为4个组件:

    1. 表空间(tablespace)
    2. 段(Segment)
    3. 区(Extend)
    4. 块(Block)
  • 相关阅读:
    [LeetCode] Power of Three 判断3的次方数
    [LeetCode] 322. Coin Change 硬币找零
    [LeetCode] 321. Create Maximum Number 创建最大数
    ITK 3.20.1 VS2010 Configuration 配置
    VTK 5.10.1 VS2010 Configuration 配置
    FLTK 1.3.3 MinGW 4.9.1 Configuration 配置
    FLTK 1.1.10 VS2010 Configuration 配置
    Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别
    [LeetCode] Bulb Switcher 灯泡开关
    [LeetCode] Maximum Product of Word Lengths 单词长度的最大积
  • 原文地址:https://www.cnblogs.com/qq895139140/p/7380564.html
Copyright © 2011-2022 走看看