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一般会默认创建两个包含相同信息的控制文件。其目的