zoukankan      html  css  js  c++  java
  • oracle的体系结构之存储结构(三)

    3. 存储结构

    首先,oracle数据库的存储结构可以分为逻辑存储结构和物理存储结构,对于这两种存储结构,oracle是分别进行管理的。
      逻辑存储结构:oracle内部的组织和管理数据的方式。
      物理存储结构:oracle外部(操作系统)组织和管理数据的方式。

    3.1 oracle的逻辑存储结构

    image

    oracle在逻辑上将保存的数据划分为一个个小单元来进行存储和维护,更高一级的逻辑存储结构都是由这些基本的小单元组成的。
    逻辑结构类型按照尺寸从小到大分可分为:块(block)-->区(extent)-->段(segment)-->表空间(tablespace)

    块(block):是Oracle用来管理存储的最小单元,是最小的逻辑存储结构,也是最基本的数据存取单位,Oracle从数据文件中存取数据时以数据块为单位进行输入输出操作。
    一个数据块包括数据库中多个字节的物理空间,其默认大小由该数据库的参数文件中的db_block_size值指定。
    Oracle数据库在进行输入输出时,都是以块为单位进行读写操作的。建议数据块的尺寸为操作系统块(os block)尺寸的整数倍(1、2、4等)。另外,块的大小是在创建数据库的时候决定的,之后不能修改。
    “show parameter db_block_size”“select value from v$parameter where name='db_block_size'”可以查询数据块的大小。
    oracle同时也支持不同的表空间拥有不同的数据块尺寸。数据块中可以存储表(table)、索引(index)或簇表(clustered data),但其内部结构都是类似的,下面,对块的结构进行一些介绍。

    image
        块的头部信息区:
            块头:包含块的一般属性信息 如块的物理地址、块所属的段的类型
            表目录:如果块中存储的数据是表数据, 则在表目录中保存块中所包含的表的相关信息
            行目录:行记录的相关信息 如ROWID
        块的存储区:主要包含空闲空间和已经使用的空间。Oracle主要是通过下面的两个参数对这部分空间进行管理的
            PCTFREE参数:指定块中必须保留的最小空闲空间比例。当块中的空闲存储空间减少到PCTFREE所设置的比例后,Oracle将块标记为不可用状态,新的数据行将不能被加入到这个块。
            PCTUSED参数:制定一个百分比,当块中已经使用的存储空间降低到这个百分比只下时,这个块才被重新标记为可用状态。
            请注意:以上两个参数既可以在表空间级别进行设置,也可以在段级别进行设置。段级别的设置优先级更高。

    区(extent):比块高一级的逻辑存储结构 由连续的块组成,它是oracle在进行存储空间的分配和回收的最小单位。
    当用户创建新表时,Oracle会为此表的数据段分配一个包含若干数据块的初始盘区。
    创建表时可以指定为其数据段分配多少初始空间、最多包含多少盘区、盘区的增长量等 。
    在创建具有独立段结构的数据库对象时,例如表、索引等,Oracle会为数据库对象创建一个数据段,并为数据段分配一个‘初始区’。
    后续区的分配方式,则根据表的空间管理办法不同,而采用不同的分配方式,例如autoextent,uniform size 或者在创建表或表空间时设置default storage 子句。另外,用户还能够通过执行下面的命令来回收表、索引等对象中未使用的区:
    alter table table_name deallocate unused;

    段(segment):一个段又被划分为多个区,这些区可以是连续的,也可以是不连续的。
    段虽然不是存储空间的分配单位,但系统会为每一个被存储的方案对象分配一个段。
    段(segment)是以盘区为单位获得磁盘空间的。
    当用户在数据库中创建各种具有实际存储结构的对象时(保存有数据的对象),比如表、索引等,Oracle将为这些对象创建“段”, 一般一个对象只拥有一个段。
    在创建段时,可以为它指定PCTFREE、PCTUSED等参数来控制其中的块的存储空间管理方式,也可以为它指定INITIAL、NEXT、PCTINCREASE等存储参数,以指定其中区的分配方式。如果没有为段指定这些参数,段将自动继承表空间的相应参数。不同类型的数据库对象拥有不同类型的段:
            数据段:保存表中的记录
            索引段:索引中的索引条目
            临时段:在执行查询等操作时,Oracle可能会需要使用到一些临时存储空间,用于临时保存解析过的查询语句以及在排序过程中产生的临时数据。
            回滚段:保存回滚数据。

    表空间(tablespace):最高级的逻辑存储结构,一个表空间可以被划分为若干个段。
    数据库是由多个表空间组成的(表空间是最大的逻辑存储单元,一个数据库从逻辑结构上划分就包括多个表空间)数据库中的一个表空间至少包含一个或多个数据文件,而一个数据文件只能属于一个表空间,一个表空间的大小就等于它包含的所有数据文件大小之和。
    在创建数据库时会自动创建一些默认的表空间,例如 SYSTEM表空间,SYSAUX表空间等。通过使用表空间,Oracle将所有相关的逻辑结构和对象组合在一起。
    我们可以在表空间级别指定存储参数,也可以在短级别指定。下面我们列出常见的表空间,和他们所存储的信息:
          数据表空间:用于存储用户数据的普通表空间。
          系统表空间:默认的表空间,用于保存数据字典(一组保存数据库自身信息的内部系统表和视图,及用于Oracle内部使用的其他一些对象),保存所有的PL/SQL程序的源代码和解析代码,包括存储过程和函数、包、数据库触发器等,保存数据库对象(表、视图、序列)的定义。
          回滚表空间:用于存放回滚段,每个实例最多只能使用一个撤销表空间
          临时表空间:存储SQL执行过程中产生的临时数据

    随着数据库中新数据的不断增加,如果数据库的存储容量不能容纳新数据时,可以通过以下三种方式增加数据库的容量:

    为表空间创建新的数据文件。
    为数据库创建新的表空间。
    增大现有数据文件的容量。
    以上操作可以使用CREATE TABLESPACE命令或ALTER TABLESPACE命令完成,也可以使用OEM工具完成。

    最后,我们可以用下面的比喻来描述逻辑结构关系:
    块 :一张张白纸 ---> 区:白纸组成的本子---> 段:多个本子放到一个文件袋中---> 表空间:文件柜(存放多个文件袋)

    3.2 oracle的物理存储结构

    Oracle数据库逻辑上由一个或多个表空间组成,每个表空间在物理上由一个或多个数据文件组成,而每个数据文件是有数据块构成的。所以,逻辑上数据存放在表空间中,而物理上存储在表空间所对应的数据文件中。从物理组成的角度分析一个数据库在存储介质上的实际构成,它是由操作系统组织和管理的,是Oracle数据库的外部存储结构,就是一堆文件。我们可以用这张图来描述数据文件和表空间的关系。

    oracle数据库文件主要包括4种文件:

    (1)数据文件
    (2)重做日志文件
    (3)控制文件
    (3)初始化参数文件

    (1)数据文件

    数据文件是Oracle数据库用来存储各种数据的地方,如表中的记录、索引数据、系统数据和临时数据等。
    一个数据库有一个或多个数据文件,但一个数据文件只能属于一个数据库。
    数据文件中存储了各种系统和用户的数据,但它和数据库中的表没有一对一的关系。

    数据文件的扩展名是.dbf,主要包括永久数据文件和临时数据文件。
    静态数据字典视图DBA_DATA_FILESDBA_TEMP_FILES
    动态数据字典视图v$datafile和v$tempfile
    OEM工具 中的“服务器”选项卡—>在“存储”选项组中点击“数据文件”

    数据文件又可以分为以下几种:

    (1)系统数据文件
    (2)回滚数据文件
    (3)临时数据文件
    (4)用户数据文件
    (5)系统辅助数据文件
    (6)示例数据文件

    (2)日志

    存放对数据的改变,至少两组,Oracle以循环方式来使用它们,记录了用户对数据库的修改信息(如增加、删除、修改),名字通常为REDO*.LOG格式。
    日志文件也叫重做日志文件或重演日志文件(Redo Log Files)。
    日志组是日志文件的逻辑组织单元,每个日志组中有一个或多个日志文件。
    同一个日志组中的多个日志文件具有相同的信息,它们是镜相关系

    在Oracle中,数据库有两种工作模式:
    归档日志模式(archivelog):
    •适用于系统投入使用后
    •当日志组写满后,将日志信息保存到归档日志文件中,然后再循环使用。
    非归档日志模式(noarchivelog):
    •适用于开发环境和测试环境中
    •日志组写满后不会归档到归档日志文件中,直接被新的日志信息覆盖。
    以SYSDBA身份登录到SQL*Plus工具,执行ARCHIVE LOG LIST命令可以查看数据库当前的运行模式。
    执行ALTER DATABASE ARCHIVELOG | NOARCHIVELOG命令修改数据库的日志模式。具体步骤如下:
    (1)关闭运行的数据库实例
    (2)备份数据库(可选 )
    (3)启动数据库实例到mount状态,但不要打开数据库
    (4)修改数据库的日志模式
    (5)打开数据库
    (6)查看数据库当前的日志模式

    (3)控制文件

    控制文件(Control File)是Oracle数据库的物理文件之一,是一个很小的二进制文件,它记录了:
    存放数据库的基本信息(数据库的名称 数据文件和联机日志文件的名称及位置 当前的日志序列号(Log Sequence Number) 表空间等信息),告诉数据库到哪里找到数据文件和重做日志文件等。对数据库的成功启动和正常运行是很重要的。

    数据库启动时,各个物理文件使用的顺序:
    首先从初始化参数文件中获得控制文件的名称及位置,然后打开控制文件。
    再从控制文件中读取数据文件和联机日志文件的信息及其他相关信息。
    最后打开数据库 。

    查看控制文件的信息:
    查询数据字典视图v$controlfile
    OEM工具—>点击“服务器”选项卡—>在“存储”选项组中点击“控制文件”

    (4)参数文件

    参数文件中记录着:
    数据库名称
    控制文件的路径
    SGA的内存结构
    可选的Oracle特性和后台进程的配置参数等信息。
    启动数据库实例时需要读取参数文件中的信息,因此它是第一个被访问的物理文件。

    参数文件分为:
    文本参数文件(pfile)
    服务器参数文件(spfile)
    他们有以下几点区别
    名称及路径不同
    编辑方式不同
    修改后的生效时限不同
    启动次序spfile优先于pfile。

    对于Oracle数据库来说,数据文件就像一个仓库,重作日志文件就像该仓库的货物进出账,控制文件就像该仓库的管理中心,记录着整个数据库的结构。所以,当数据库的物理结构改变时,Oracle会自动更新控制文件。

    这篇就到这儿吧!下篇《oracle的体系结构之网络配置(四)》

  • 相关阅读:
    专为seo新手准备的百度分享工具教程
    什么是关键词权重
    什么是关键词堆砌
    什么是目标关键词
    华为SEO搜索引擎主管招聘内容
    长尾关键词是什么意思
    Java面试宝典(7)混合2
    SpringMVC学习(5):数据绑定2 @PathVariable、@CookieValue、@RequestHeader、@ModelAttribute..
    MyBatis中XML 映射配置文件的简单介绍
    最牛B的编码套路
  • 原文地址:https://www.cnblogs.com/Aion/p/3559741.html
Copyright © 2011-2022 走看看