oracle数据库结构分析

一、实例概述

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

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

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

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

登入数据库

[oracle@master ~]$ sqlplus / as sysdba

查看当前数据库名字

SQL> select name from v$database;

NAME
---------
XE

查看当前数据库实例名

SQL> select instance_name from v$instance;

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

二、物理存储结构

数据文件

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

重做日志文件

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

控制文件

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

归档的日志文件

数据库有两种操作模式:ARCHIVELOG 和 NOARCHIVELOG 模式。如果选择了 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)的关系如下图所示:

图片描述

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

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

以 system 用户连接到数据库(这里用的是 sqlplus 工具,你也可以用其他工具连接)

$ sqlplus system/Syl12345

创建一个表

SQL> create table syl(name varchar2(10));

查看所在的表空间,区间大小,区间所在文件编号,以及区间开始位置的文件块。

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

在 CentOS 上安装时一定要注意做好安装前的准备,比如创建用户和组,修改环境变量等等。另外,使用响应文件静默安装可以在无界面情况下自动安装,方便批量安装。 结构部分的总结可参考下图:

摘自实验楼,感谢实验楼的分享,做实验,学编程去实验楼!

发表评论

后才能评论