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)
  • 相关阅读:
    html基础进阶笔记
    程序员的自我提升
    过滤思路
    for循环
    jeesite在生成主子表代码的时候在eclipse里面没有子表代码
    java学习笔记2
    人性的弱点
    java学习笔记
    Percona Toolkit 安装使用
    mysql 中查询当天、本周,本月,上一个月的数据
  • 原文地址:https://www.cnblogs.com/qq895139140/p/7380564.html
Copyright © 2011-2022 走看看