2. Oracle的体系结构概述

2.1 Oracle体系结构图

2.2 用户进程和服务器进程的关系

2.3 存储结构分类

2.3.1 逻辑存储结构

数据块
  • 数据块是Oracle逻辑存储结构中的最小的逻辑单位

  • 一个数据库对应一个或者多个物理块, 大小由参数 DB_BLOCK_SIZE 决定

  • 数据块的结构包括块头和存储区的两个部分

数据区
  • 数据区是由连续的数据块结合而成的
  • 数据区是Oracle存储分配的最小单位
  • 数据段:存储表中所有数据
  • 索引段:存储表上最佳查询的所有索引数据
  • 临时段:存储表排序操作期间建立的临时表的数据
  • 回滚段:存储修改之前的位置和值
表空间
  • 表空间是数据库的最大逻辑划分区域
  • 一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间
  • 表空间的大小是它所对应的数据文件大小的总和
  • 默认创建的表空间
    • 系统表空间
    • 辅助表空间
    • 撤销表空间
    • 用户表空间

2.3.2 物理存储结构

物理结构包含三种数据文件

控制文件
  • 是数据库中最小的文件同时也是数据库中最重要的文件
数据文件

数据文件的种类

  • 系统数据文件(SYSTEM01.DBFSYSAUX01.DBF
  • 回滚数据文件(UNDOTBS01.DBF
  • 用户数据文件(USERS01.DBF
  • 临时数据文件(TEMP01.DBF
重做日志文件

日志文件 .LOG

  • 重做日志文件:记录所有的数据变化、提供恢复机制
  • 归档日志文件:重做日志文件的历史备份,有归档模式和非归档模式之分
其他文件
  • 服务器参数文件 (orcl.ora
  • 密码文件 (PWDorcl.ora)
  • 警告文件 (alert_orcl.log)
  • 跟踪文件

2.4 Oracle 服务器结构

Oracle服务器主要由以下部分组成:

2.4.1 系统全局区SGA

  • 高速数据缓冲区

    作用:用来存放Oracle系统最近访问过的数据块
    经常或最近被访问的数据块会被放置到高速数据缓冲区的前端,不经常被访问的数据块会被放置到高速数据缓冲区的后端

  • 共享池

    作用:存储最近执行过的SQL语句和最近使用过的数据定义
    共享池包含:库高速缓冲区 和 字典高速缓冲区

2.4.2 程序全局区(PGA)

程序全局区PGA又称作用户进程全局区, 可以把代码、全局变量和数据结构都存储在其中, 每个Oracle服务器进程只拥有自己的那部分PGA资源
程序全局区由两部分组成:私有SQL区 和 会话区

2.4.3 前台进程

  • 用户进程: 使用SQL Plus连接成功后生成。包含两个重要概念:连接和会话
  • 服务器进程:处理用户会话过程中的SQL语句和SQL Plus命令

2.4.4 后台进程

  • 数据写入进程
  • 检查点进程
  • 日志写入进程
  • 归档进程

2.4.4 实例

2.4.5 数据库

2.5 数据字典

数据字典是Oracle存储数据库内部信息的地方,描述了数据库内部的运行和管理情况。
Oracle数据字典的名称由前缀和后缀组成,使用下划线“_”连接

  • dba_: 包含数据库实例的所有对象信息。_
  • v$_:当前实例的动态视图,包含系统管理和系统优化等使用的视图。
  • user_:记录用户的对象信息。
  • gv_:分布式环境下所有实例的动态视图,包含系统管理和系统优化使用的视图
  • all_:记录用户的对象信息及被授权访问的对象信息。

2.5.1 基本的数据字典

字典名称 说明
DBA_TABLES 所有表的信息,包括所有者(用户)
DBA_TAB_COLUMNS 所有表的列信息,包括所有者(用户)
DBA_VIEWS 所有视图的信息,包括所有者(用户)
DBA_TAB_COMMENTS 所有表的注释信息,包括所有者(用户)
DBA_COL_COMMENTS 所有列的注释信息,包括所有者(用户)
DBA_INDEXES 所有索引的信息,包括所有者(用户)
DBA_IND_COLUMNS 所有索引列的信息,包括所有者(用户)
DBA_CONSTRAINTS 所有约束的信息,包括所有者(用户)
DBA_CONS_COLUMNS 所有约束列的信息,包括所有者(用户)
DBA_TAB_PRIVS 所有表的权限信息,包括所有者(用户)
DBA_TAB_PRIVS_RECD 所有表的详细权限信息,包括所有者(用户)
DBA_TAB_COLUMNS_STATISTICS 所有表的列统计信息,包括所有者(用户)
DBA_TAB_MODIFICATIONS 所有表的最后修改时间信息,包括所有者(用户)
DBA_TAB_PARTITIONS 所有表的分区信息,包括所有者(用户)
DBA_TAB_SUBPARTITIONS 所有表的子分区信息,包括所有者(用户)
DBA_TRIGGERS 所有触发器的信息,包括所有者(用户)
DBA_PROCEDURES 所有存储过程和函数的信息,包括所有者(用户)
DBA_ARGUMENTS 所有存储过程和函数参数的信息,包括所有者(用户)
DBA_ERRORS 所有存储过程、函数和包中的错误信息,包括所有者(用户)
DBA_TAB_STATISTICS 所有表的统计信息,包括所有者(用户)
DBA_TAB_PENDING_STATS 所有表的等待统计信息,包括所有者(用户)
DBA_SCHEDULER_JOBS 所有调度任务的信息,包括所有者(用户)
DBA_SCHEDULER_JOB_RUN_DETAILS 所有调度任务运行详情信息,包括所有者(用户)

2.5.2 常用动态性能视图

视图名称 说明
V$SESSION 提供有关当前会话的信息,如会话 ID、用户名、状态等
V$SQL 包含所有当前正在执行的 SQL 语句的信息
V$SQLAREA 包含有关 SQL 语句执行计划和性能的信息
V$SESSION_EVENT 提供与会话相关的等待事件信息
V$SYSTEM_EVENT 提供与系统相关的等待事件信息
V$SQL_PLAN 提供 SQL 语句执行计划的信息
V$SQL_PLAN_STATISTICS 提供 SQL 语句执行计划的统计信息
V$INSTANCE 提供有关数据库实例的信息,如实例名称、状态等
V$WAITSTAT 提供有关等待事件统计信息的汇总
V$LOCK 提供有关数据库锁的信息
V$TRANSACTION 提供有关数据库事务的信息
V$ROLLSTAT 提供有关回滚段的信息
V$SYSSTAT 提供有关系统级统计信息
V$SESSION_LONGOPS 提供有关长时间运行的操作的信息
V$RESOURCE_LIMIT 提供有关资源限制和使用情况的信息
V$DATABASE 提供有关数据库的全局信息,如数据库名称、状态等
V$PARAMETER 提供有关初始化参数的信息
V$INSTANCE_PARAMETER 提供有关实例初始化参数的信息
V$SQLSTATS 提供 SQL 语句的统计信息,包括执行次数、等待时间等