Skip to content

Files

Latest commit

a406a2d · Mar 8, 2018

History

History
283 lines (170 loc) · 10.9 KB

结构.md

File metadata and controls

283 lines (170 loc) · 10.9 KB

结构以及安装

实验介绍

实验内容

本节实验主要介绍 Oracle 12c 的物理存储、内存、进程和逻辑存储结构。

实验知识点

  • 12c 简介
  • Oracle 数据库概述
  • 物理存储结构
  • 内存结构
  • 进程结构
  • 逻辑存储结构

12c 简介

Oracle Database 12c 是 Oracle 11g 的升级版。它执行计划管理的自动化程度更高,新增了虚拟化特性,大大提高了可用性和故障转移能力。

Oracle 数据库概述

数据库是位于磁盘上的一组文件,用于存储数据。由数据库实例和数据库紧密连接。组成数据库的文件主要分为两类:

  • 数据库文件:包含数据和元数据。
  • 非数据库文件:包含初始参数和日志纪录信息等。

实例概述

实例是存储在服务器内存中的,它主要由两部分组成:

  • 大型内存块:分配在 SGA (系统全局区域)中。
  • 大量后台进程:后台进程在 SGA 和数据库文件之间交互。

我们连接数据库的时候就需要通过实例去连接。一个数据库可以有多个实例。

我们可以查看当前所在的数据库名和实例名。

注意:打开实验楼环境是在 shiyanlou 用户下,后面所有章节的实验均是在 oracle 用户下操作,所以首先我们需要切换到 oracle 用户下。

$ sudo su oracle

然后使用 system 用户登入数据库:

$ sqlplus system/Syl12345;
  • 查看当前数据库名
SQL> select name from v$database;

NAME
---------
XE
  • 查看当前数据库实例名
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
xe

物理存储结构

物理存储结构图

图片描述

数据文件

在操作系统级别,数据库数据被存储在称为数据文件的结构中。每个 Oracle 数据库都必须至少有一个数据文件。数据文件和表空间是多对一的关系。

重做日志文件

也称为联机的重做日志文件,记录对 Oracle 数据库数据文件和控制文件所做的所有更改。

控制文件

一个二进制文件,记录数据库的物理结构,包含重做日志文件的名称和位置,数据库创建的时间戳,当前日志序列号等信息。

归档的日志文件

数据库有两种操作模式:ARCHIVELOGNOARCHIVELOG 模式。如果选择了 ARCHIVELOG 模式,也就是归档模式,就会有归档的日志文件,是重做日志文件的备份,可以用来将数据库的内容恢复到某个时间点。

除此之外,还有很多其他的文件,比如初始参数文件,备份文件,密码文件等。了解更多可以参考物理存储结构-官方文档

内存结构

内存结构图

图片描述

主要了解共享内存中的 SGA (系统全局区域)部分。为了便于理解,把它单独提出来,用一个更简单的图表示:

图片描述

在执行命令启动实例的时候会显示 SGA 的大小,如下例所示:

/*启动需要系统管理权限,所以先退出 SQL 命令行再重新作为系统管理员身份登入*/
SQL> quit;
$ sqlplus system/Syl12345 as sysdba

SQL> startup;
ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size		    8793304 bytes
Variable Size		  520094504 bytes
Database Buffers	 1073741824 bytes
Redo Buffers		    7983104 bytes
Database mounted.
Database opened.

如果提示 Oracle 已经在运行,可以使用 shutdown immediate 关闭 Oracle 再启动,或者使用 startup force 强制启动。

数据库高速缓存区

数据库高速缓存区(Database buffer cache)用来保存来自磁盘的数据块。它可以减少物理 I/O,提高性能。

共享池

共享池(share pool)的大小由初始参数 SHARED_POOL_SIZE 确定,它的大小可调节。共享池包含两个主要的子缓存:

  • 库缓存(Library cache):存储数据库运行的 SQL 和 PL/SQL 语句有关信息。
  • 数据字典缓存(Data dictionary cache):数据字典高速缓存也被称为行高速缓存,因为它将数据保存为行而不是保存整个数据块的缓冲区。它是数据库表和视图的只读集合,其中包含有关数据库及其结构和用户的参考信息。

重做日志缓冲区

重做日志缓冲区(Redo Log buffer)保存对数据文件中的数据块所进行的最近的改动。

大型池

大型池(Large pool)是 SGA 中的可选区域,由初始参数 LARGE_POOL_SIZE 控制其大小。它可以为 I/O 服务器进程和会话内存提供大量内存分配。还可以用于 RMAN 并行备份和还原操作。

想了解更多信息可以参考

进程结构

进程结构图

图片描述

可以用如下命令获取每个进程的系统进程标识和系统线程标识:

SQL> COL SPID FORMAT a8
SQL> COL STID FORMAT a8
SQL> SELECT SPID,STID,PROGRAM FROM V$PROCESS ORDER BY SPID;

还可以用下面的命令查看进程的名称和描述:

SQL> select name,description from v$bgprocess;

SMON

SMON 是系统监控器(System Monitor)进程。它负责

  • 清理未使用的临时段。
  • 通过将联机重做日志文件中的条目应用与数据文件,为一个失败的实例进行实例恢复。
  • 合并字典管理表空间的连续可用范围。

PMON

PMON 是进程监控器(Process Monitor)进程。它负责检测其他后台进程的终止。如果一台服务器或调度进程异常终止,那么PMON 负责执行进程恢复。

DBWn

DBWn 是数据库写入程序(database writer)的进程。它负责将脏数据(缓冲区缓存中新增或改动的数据块)写入数据文件。

LGWR

LGWR 是日志写入程序(log writer)的进程。它负责管理联机重做日志缓冲区。当 LGWR 已经成功写入重做信息到重做日志文件后,才可以通过 DBWn 将脏数据写入数据文件。

ARCn

ARCn 是归档程序进程,跟我们前面说到的归档重做日志文件相关。它将重做日志文件备份到一个地方。它的进程数量由初始参数 LOG_ARCHIVE_MAX_PROCESSES 控制。

想了解更多内容可以参考后台进程-官方文档

逻辑存储结构

逻辑存储结构-官方文档

逻辑存储结构图如下:

图片描述

表空间将逻辑存储从物理存储中抽象出来,在逻辑上,表空间是段的逻辑存储容器,在物理上,表空间将数据存储在一个或多个数据文件或临时文件中。数据库必须具有 SYSTEM 和 SYSAUX 这两个表空间。

  • SYSTEM 表空间:管理任何其他表空间。它包含数据字典,有关数据库管理信息的表和视图,编译的存储对象(如触发器,过程等)。
  • SYSAUX 表空间:辅助 SYSTEM 的表空间,减少了 SYSTEM 表空间的负载。了解更多有关 SYSAUX 可以参考SYSAUX 表空间

了解更多有关表空间信息可参考表空间

是为用户对象(例如表或索引),撤消数据或临时数据分配的一组扩展区。

盘区是逻辑上连续的特定数量的数据块,在单个分配中获得,用于存储特定类型的信息。

是 Oracle 数据库中最小的存储单位。一个数据块对应于磁盘上特定数量的字节。

表空间(Tablespace),段(Segment),盘区(Extent),块(Data block)的关系如下图所示:

图片描述

连接线表示一对多的关系。

我们可以使用命令查看表的逻辑存储信息。

  1. 以 system 用户连接到数据库(这里用的是 sqlplus 工具,你也可以用其他工具连接)
$ sqlplus system/Syl12345
  1. 创建一个表
SQL> create table syl(name varchar2(10));
  1. 查看所在的表空间,区间大小,区间所在文件编号,以及区间开始位置的文件块。
SQL> select tablespace_name,bytes,file_id,block_id from dba_extents where owner='SYSTEM' and segment_name='SYL';

输出结果如下:

TABLESPACE_NAME             BYTES    FILE_ID   BLOCK_ID
--------------------  ---------- ---------- ----------
SYSTEM                     65536          1     100536

可以看出这张表所在的表空间名为 SYSTEM,区间大小为 64KB,区间所在文件编号为 1,区间开始位置的文件块编号为 100536 。

如果输出的格式比较乱,可以使用 col <col_name> format <宽度> 设置某列的宽度,比如 col TABLESPCE_NAME format a20 。 然后再查询。

  1. 查看在文件中的开始字节数。
SQL> select block_size * 100536 from dba_tablespaces where tablespace_name='SYSTEM';

BLOCK_SIZE*100536
-----------------
        823590912

可以看出从文件的大约 785.4 MB 的地方开始。另外,我们还可以查看文件所在的具体位置。

SQL> select name from v$datafile where file#=1;

NAME
--------------------------------------------------------------------------------
D:\APP\SHIYANLOU\VIRTUAL\ORADATA\ORCL\SYSTEM01.DBF

##总结

此处输入图片的描述