Oracle的物理存储结构

Oracle数据库的体系结构是从某一角度来分析数据库的组成,工作过程以及数据库如何管理和组织数据的,主要包括物理存储结构,逻辑存储结构,内存结构以及进程结构。

Oracle的物理存储结构:

Oracle物理存储结构主要包括三种类型的物理文件,分别是数据文件(*.dbf),控制文件(*.ctl)和重做日志文件(*.log)。

1. 数据文件

数据文件主要是存储数据的文件。例如,数据文存储的表的记录和索引。在这些数据文件中,如果用户频繁的访问某些数据,那么这些数据就会被存储在内存的缓冲区中。当对这些数据进行读取时,Oracle首先会从内存de缓冲区中找到相关的数据信息。如果内存的缓冲区中不存在相关的数据,则从数据库文件中读取数据,然后存放到内存的数据缓冲区中,以供查询时使用。这种数据的存取方式不仅可以减少磁盘的I/O操作,还可以提高系统的相应性能。

如果需要了解数据文件的信息可以通过查询数据字典视图DBA_DATA_FILES和V$DATAFILE。首先通过DESC命令来了解一下数据字典视图DBA_DATA_FILES和V$DATAFILE的结构,数据字典视图DBA_DATA_FILES的结构如下:

SQL> DESCDBA_DATA_FILES;

名称                                是否为空? 类型

----------------------------------- --------------------------------

FILE_NAME                                   VARCHAR2(513)

FILE_ID                                         NUMBER

TABLESPACE_NAME                  VARCHAR2(30)

BYTES                                         NUMBER

BLOCKS                                       NUMBER

STATUS                                       VARCHAR2(9)

RELATIVE_FNO                           NUMBER

AUTOEXTENSIBLE                      VARCHAR2(3)

MAXBYTES                                   NUMBER

MAXBLOCKS                                 NUMBER

INCREMENT_BY                           NUMBER

USER_BYTES                               NUMBER

USER_BLOCK                               NUMBER

ONLINE_STATUS                          VARCHAR2(7)

在上述的结果中,FILE_NAME表示数据文件的名称以及存放的路径;FILE_ID表示数据文件在数据库中的ID号;TABLESPACE_NAME表示数据文件对应的表空间名;BYTES表示的是数据文件的大小;BLOCKS表示数据文

件所占用的数据块;STATUS表示数据文件的状态;AUTOEXTENSIBLE表示数据文件是否可扩展。数据字典

视图V$DATAFILE记录了数据文件的动态信息,其结构如下:

SQL> DESCV$DATAFILE;

名称                          是否为空? 类型

----------------------------------- --------------------------------

FILE#                                                 NUMBER

CREATION_CHANGE#                     NUMBER

CREATION_ TI                                  DATE

TS#                                                    NUMBER

RFILE#                                               NUMBER

STATUS                                            VARCHAR2(7)

ENABLED                                          VARCHAR2(10)

CHECKPOINT_CHAN                        NUMBER

CHECKPOINT_TIME                         DATE

UNRECOVERABLE_CHANGE#        NUMBER

UNRECOVERABLE_TIME                 DATE

LAST_CHANGE#                               NUMBER

LAST_TIME                                        DATE

OFFLINE_CHANGE#                         NUMBER

ONLINE_CHANGE#                           NUMBER

ONLINE_TIME                                   DATE

BYTES                                               NUMBER

BLOCKS                                            NUMBER

CREATE_BYTES                              NUMBER

BLOCK_SIZE                                    NUMBER

NAME                                                VARCHAR2(513)

PLUGGED_IN                                   NUMBER

BLOCK1_OFFSET                            NUMBER

AUX_NAME                                        VARCHAR2(513)

FIRST_NONLOGGED_SCN                  NUMBER

FIRST_NONLOGGED_TIME                 DATE

FOREIGN_DBID                                      NUMBER

FOREIGN_CREATION_CHANGE#             NUMBER

FOREIGN_CREATION_TIME                  DATE

PLUGGED_READONLY                         VARCHAR2(3)

PLUGIN_CHANGE#                               N MBER

PLUGIN_RESETLOGS_CHANGE#             NUMBER

PLUGIN_RESETLOGS_TIME                 DATE

CON_ID                                                  NUMBER

在上述的结果中FILE#表示存放数据文件的编号;STATUS表示数据文件的状态;CHECKPOINT_CHANGE#表示数据文件的同步号,随着系统的运行自动修改,以维持数据文件的同步;BYTES表示数据文件的大小;BLOCKS表示数据文件所占用的数据块数;NAME表示数据文件的名称以及存放的路径。

2. 控制文件

控制文件是一个很小的二进制文件,主要包含与关于数据库物理结构的重要信息,存放数据库中的数据文件和日志文件的信息。

控制文件对于数据库的成功启动和正常运行至关重要。在加载数据库时必须先找到数据库的控制文件。如果控制文件正常,实例才能加载并打开数据库。但是如果控制文件中记录了错误的信息,或者实例无法找到一个可用的控制文件,数据库将无法加载,当然也无法打开。

一个Oracle数据库通常包含有多个控制文件,在数据库运行的过程中,Oracle数据库需要不断的更新控制文件,因此控制文件必须在整个数据库打开期间始终保持可用状态。如果某种原因导致控制文件不可用,那么数据库将会崩溃。

控制文件的信息可以通过数据字典视图V$CONTROLFILE来了解,其结构如下:

SQL> DESC V$CONTROLFILE;

名称                               是否为空? 类型

----------------------------------- -------------

STATUS                                         VARCHAR2(7)

NAME                                             VARCHAR2(513)

IS_RECOVERY_DEST_FILE         VARCHAR2(3)

BLOCK_SIZE                                  NUMBER

FILE_SIZE_BLKS                            NUMBER

CON_ID                                           NUMBER

在上述的结果中,STATUS表示控制文件的状态;NAME表示控制文件的名称以及路径的信息。例如查询控制文件的名称以及路径信息,如下:

SQL> SELECT NAME FROM V$CONTROLFILE;

NAME

-------------------------------------------------

D:\ORACLE\ORADATA\ORACLE12C\CONTROL01.CTL

D:\ORACLE\ORADATA\ORACLE12C\CONTROL02.CTL

从上述的结果可以看出,Oracle一般会默认创建两个包含相同信息的控制文件。其目的是为了当其中一个控制文件受损时可以调用另一个控制文件继续工作。

3. 重做日志文件

重做日志文件即日至文件,主要记录用户对数据库的操作信息。日志文件是数据库系统中最重要的文件之一,通过日志文件可以保证数据库的安全,也可以实现数据库的备份与恢复。一旦日志文件受损,那么数据库可能无法正常运行。

为了确保日志的安全,在实际的应用中,允许对日志文件进行镜像,日志文件与其镜像文件记录同样的日志信息,他们构成一个日志文件组,同一个组中的日志文件最好存放在不同的磁盘中,以便可以保证一个日志文件受损时,还有其他的日志文件提供日志信息。

通过数据字典V$LOG,可以了解系统当前正在使用哪个日志文件组,如下:

SQL>SELECT GROUP#,MEMBERS,STATUS FROM V$LOG;

GROUP#   MEMBERS STATUS

-------------------- ----------------

1         1 INACTIVE

2          1 CURRENT

3          1 INACTIVE

4          2 INACTIVE

在上述的结构中,如果STATUS字段的值为CURRENT,则表示当前系统正在使用该字段对应的日志文件组。

当一个日志文件组的空间被占用完之后,Oracle系统会自动转换到另一个日志文件组,不过,管理员可以使用ALTER STSTEM命令惊醒手动切换日志文件。如下:

SQL> ALTER SYSTEM SWITCH LOGFILE;

系统已更改。

再次查询数据字典V$LOG,如下:

SQL> SELECT GROUP#,MEMBERS,STATUS FROMV$LOG;

GROUP#    MEMBERS STATUS

---------- ---------- ----------------

1          1 INACTIVE

2          1 ACTIVE

3          1 CURRENT

4          2 INACTIVE

从上述的结果看,系统当前运行的日志文件组已经改变。

时间: 2024-08-05 10:54:56

Oracle的物理存储结构的相关文章

Innodb物理存储结构系列2 行记录格式

前一篇讨论了Innodb system,表空间,文件的关系及数据结构,这一篇记录下Innodb行记录的格式. 前提: 1. server层和innodb层都有自己对于record的记录格式,需要进行转换. 2. 物理文件上的记录存储,需要内存中的数据结构进行对应(任何数据都需要在内存中进行处理),进行存取的转换. 1. 测试case: create table `pp` ( `id` int(11) default null, `name1` varchar(100) default null,

Innodb物理存储结构系列1

本篇先介绍 下Innodb表空间,文件相关的内存数据结构. 1. 数据结构 Innodb的tablespace和文件的关系,是一对多的关系,先来看三个结构体 1. fil_system_struct: 表示Innodb的表空间内存cache,innodb一共包括两类tablespace,即 #define FIL_TABLESPACE 501 /*!< tablespace */ #define FIL_LOG 502 /*!< redo log */ 而fil_tablespace有包括了两

ORACLE物理存储结构

1.查看数据库实例基本信息: SQL> SELECT DBID,NAME,CREATED,LOG_MODE,OPEN_MODE,FORCE_LOGGING,CURRENT_SCN,FLASHBACK_ON FROM V$DATABASE; DBID NAME CREATED LOG_MODE OPEN_MODE FORCE_LOGGING CURRENT_SCN FLASHBACK_ON ---------- --------- ----------- ------------ --------

Postgresql物理存储结构

Postgresql目前不支持使用裸设备和块设备. Postgresql的属于 Relation:表示表或索引. Tuple:表示表中的行. Page:表示在磁盘中的数据块. Buffer:表示在内存中的数据块. Page结构 Page默认大小为8KB,最大32KB,一个数据块中可存放多行的数据.块中的结构如下图: 块头记录了如下信息: 块的checksum值 空闲空间的起始位置和结束位置 特殊数据的起始位置 其他一些信息 行指针是一个32bit的数字,具体结构如下: 行内容的偏移量,占15bi

oracle的存储结构

oracle024 oracle的存储结构 存储结构--表的存储结构 表空间:由一个或多个文件组成,表空间的空间容量就是多个文件大小的总和 表和数据文件建立一个中间层,表空间中有许多表. select * from DBA_TABLESPACES; 系统级别: SYSTEM:orale的自身的信息就是数据字典,数据字典表就放在system表空间中 sysaux:是system的附属表空间,也是存放系统信息 //上面两个表空间必须联机的 UNDOTBS1:改变前的数据块的存放位置 TEMP:临时表

Oracle存储结构

Oracle数据库的存储结构分为逻辑存储结构和物理存储结构. 一.逻辑存储结构 逻辑存储结构主要描述Oracle数据库的内部存储结构,即从技术概念上描述在Oracle数据库种如何组织.管理数据.因此,逻辑存储结构是和操作系统平台无关的,是由Oracle数据库创建和管理的. 从逻辑上来看. 数据库是由一个或者多个表空间等组成. 一个表空间(tablespace)由一组段组成, 一个段(segment)由一组区组成, 一个区(extent)由一批数据库块组成, 一个数据库块(block)对应一个或多

浅析理解Oracle数据库体系结构和存储结构

一.Oracle体系结构 个人比喻帮助理解:类似于图书馆,去图书馆的客户(用户进程和服务进程等)需要调取资料,求助于图书管理员(实例)进入图书分区(数据库)进行资料查找.[如果比喻不当,欢迎指正,尽请谅解] - 第一部分是实例部分(为用户提供服务,管理数据库): 主要理解分成两个主要部分: (1)内存结构:(2)后台进程:与数据库进行交互 - 第二部分是数据库部分物理结构:(为实例提供服务,处理数据文件) 主要文件:数据文件,控制文件,重做日志文件 其他文件:归档日志文件,参数文件,口令文件等

详解Oracle存储结构 掌握基本操作管理

2018.10.14那天我写了Oracle12C 的安装并初步了解了一下Oracle体系结构中数据库和实例.从中我们知道: 数据库是磁盘上数据的集合,位于收集和维护相关信息的数据库服务器上的一个或多个文件中.数据库由各种物理和逻辑结构组成,而表则是数据库中最重要的逻辑结构.表由包含数据的相关行和列组成. 组成数据库的文件主要分为两类:数据库文件和非数据库文件.两者之间的区别在于存储何种数据.数据库文件包含数据和元数据,非数据库文件则包含初始参数和日志记录信息等.数据库文件对于每时每刻正在进行的数

oracle逻辑存储结构

逻辑存储结构是对数据存储结构在逻辑概念上的划分.oracle的逻辑存储结构主要由表空间.段.区间和数据块等概念组成.oracle数据块是由多个表空间组成,表空间又是由多个段组成,段有多个数据区组成,数据区又有多个块组成.数据块是Oracle逻辑存储中的最小的逻辑单位,也是执行数据输入.输出最小存储单位.数据块由块头.表目录.行目录.空余空间和行数据组成.块头.表目录.行目录组合起来称为头部信息区,头部信息区不存放数据,存放整个块的引导信息,起到引导系统读取数据的作用.空余空间和行数据公共构成块的