码迷,mamicode.com
首页 > 数据库 > 详细

Oracle的物理存储结构

时间:2015-02-03 15:03:28      阅读:187      评论:0      收藏:0      [点我收藏+]

标签: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

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

Oracle的物理存储结构

标签:oracle的物理存储结构

原文地址:http://blog.csdn.net/qq_20545159/article/details/43449481

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!