欢迎投稿

今日深度:

Oracle的物理存储结构

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

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

www.htsjk.Com true http://www.htsjk.com/oracle/23010.html NewsArticle Oracle的物理存储结构 Oracle数据库的体系结构是从某一角度来分析数据库的组成,工作过程以及数据库如何管理和组织数据的,主要包括物理存储结构,逻辑存储结构,内存结构以及进程...
评论暂时关闭