「Oracle数据库」逻辑存储结构

您所在的位置:网站首页 实验二oracle数据库物理存储结构管理 「Oracle数据库」逻辑存储结构

「Oracle数据库」逻辑存储结构

2023-12-16 19:47| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

在之前的文章中小编给大家介绍过,oracle数据库是有实例和数据库两部分构成的(参考:「Oracle数据库」一分钟带你快速了解oracle11g体系结构),同时也给大家指出数据库的主要功能就是存储数据,而数据库存储数据的方式通常称为存储结构,oracle数据库的存储结构分为逻辑存储机构和物理存储结构。那么今天我们就来看看这个逻辑存储结构和物理存储结构。

鉴于内容过多,我们今天重点了解oracle数据库的逻辑存储结构。oracle的逻辑结构包括表空间(tablespace),段(segment),扩展区(extent),数据块(data block)。

oracle数据库在逻辑上是由多个表间组成的,表空间中存储的对象叫段,比如数据段,索引段,和回退段。段由区组成,区是磁盘分配的最小单位。段的增大是通过增加区的个数来实现的。每个区的大小是数据块大小的整数倍,区的大小可以不相同;数据块是数据库中最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位。块的大小由参数DB_BLOCK_SIZE设置,其值应设置为操作系统块大小的整数倍。

一、数据块(Data Bocks

数据块是数据中最小的数据组织单位与管理单位, 数据库中最小的逻辑存储单元,是数据文件磁盘存储空间单位,也是数据库I/O 的最小单位(读一个数据块,产生一次IO),数据块大小由DB_BLOCK_SIZE参数决定。oracle 每次请求数据的时候,都是以块为单位。也就是说,oracle每次请求的数据是块的整数倍。

一般来说,安装oracle数据库后默认的DB_BLOCK_SIZE为8192B(8K),是在创建数据库的时候指定的,在创建完数据库之后便不可修改。要修改DB_BLOCK_SIZE,需要重建数据库。一般可以将数据EXP出来,然后重建数据库,指定新的DB_BLOCK_SIZE,然后再将数据IMP进数据库。

DB_BLOCK_SIZE一般设置为操作系统块的倍数,即2K,4K,8K,16K或32K,但它的大小一般受数据库用途的影响。对于联机事务,其特点是事务量大,但每个事务处理的数据量小,所以DB_BLOCK_SIZE设置小点就足够了,一般为4K或者8K,设置太大话一次读出的数据有部分是没用的,会拖慢数据库的读写时间,同时增加无必要的IO操作。而对于数据仓库和ERP方面的应用,每个事务处理的数据量很大,所以DB_BLOCK_SIZE一般设置得比较大,一般为8K,16K或者32K,此时如果DB_BLOCK_SIZE小的话,那么I/O自然就多,消耗太大。

大一点的DB_BLOCK_SIZE对索引的性能有一定的提高。因为DB_BLOCK_SIZE比较大的话,一个DB_BLOCK一次能够索引的行数就比较多。对于行比较大的话,比如一个DB_BLOCK放不下一行,数据库在读取数据的时候就需要进行行连接,从而影响读取性能。此时DB_BLOCK_SIZE大一点的话就可以避免这种情况的发生。

在设置DB_BLOCK_SIZE参数值得时候,一般会遇到两种错误。

遭遇报错:ora-29339 tablespace block size 32768 does not match configuared block size 该报错一般是因为在创建表空间的时候直接指定blocksize参数大小导致的。也就是说你当你想设置 db_block_size为32K 的时候,需要配置非标准数据块的数据缓冲区DB_32K_CACHE_SIZE的大小,如:alter system set db_32k_cache_size=32m。这样子才能设置表空间db_block_size。遭遇报错:ORA-00380: cannot specify db_8k_cache_size since 8K is the standard block size“DB_nK_CACHE_SIZE”参数的取值有很多种,有2k、4k、8k、16k、32k。在设置此参数时,我们需要注意的是,与数据库默认的块尺寸相同的那个参数是不能被设定的。例如,如果数据库的默认块尺寸是8k,那么当我们尝试设置“DB_8K_CACHE_SIZE”参数时便会遭遇报错,这是由于这个信息已经体现在“db_cache_size”参数上。二、数据区(Extent)

数据区是磁盘空间分配的最小单位。磁盘按区划分,每次至少分配一个区。区存储于段中,它由连续的数据块组成。区的分配过程中,每次至分配5个区。如果所剩的空闲空间不够5个区,就会出现错误:ORA-01653。可以通过字典dba_tablespaces查询表空间中区的信息。可以通过字典user_tables查询段中区的信息。可以通过字典user_extents查询区的分配状况。我们可以通过以下SQL语句分别查询表空间、段、区中区的分配信息。

SELECT t.segment_name 区名称, t.segment_type 区类型, t.tablespace_name 表空间, t.extent_id 区id, t.bytes 区大小, t.blocks 块数目 FROM user_extents t;

关于数据区有这样的两个结论:一个或多个块组成区,一个或多个区组成段;一个区只能属于一个数据文件。

三、段(Segment)

段是由一个或多个连续或不连续的区组成的逻辑存储单元,用于存储特定的、具有独立存储结构的数据库对象。根据存储对象类型不同,分为: 数据段(表段)、索引段、临时段和回退段4类。表由段组成,一个表由一个或者多个段组成。普通表由一个段组成,分区表由多个段组成。创建表的时候,其实质就是创建一个或者多个段。

四、表空间(TableSpace)

表空间是Oracle数据库最大的逻辑结构,一个Oracle数据库在逻辑上由多个表空间组成,一个表空间只隶属于一个数据库。Oracle中有一个称为SYSTEM的表空间,这个表空间是在创建或安装数据库时自动创建的。主要用于存储系统的数据字典,过程,函数,触发器等;也可以存储用户的表,索引等。这些对象实际上是存放在数据文件中,数据文件是数据的物理载体。一个表空间可以有多数据文件,但是一个数据文件只能属于一个表空间。一个表空间就是一片磁盘区域,他由一个或者多个磁盘文件组成,一个表空间可以容纳许多表、索引或者簇等。每个表空间有一个预制的磁盘区域称为初始区间(initial extent)用完这个区间后再用下一个,直到用完表空间,这时候需要对表空间进行扩展,增加数据文件或者扩大已经存在的数据文件。

在创建数据库时,Oracle会自动创建多个默认的表空间,这些表空间除了管理用于管理用户数据的表空间之外,还包括用于管理Oracle系统内部数据的表空间。Oracle11g默认创建的主要表空间:

SYSTEM表空间:存放Oracle系统内部表和数据字典的数据。Oracle本身不赞成将用户创建的表、索引等存放到系统表空间。表空间中的数据文件不是固定不变的,可以根据需要向表空间中追加新的数据文件。SYSAUX表空间:此表空间是Oracle 11g新增的表空间,是随着数据库的创建而创建,它充当SYSTEM的辅助表空间,降低SYSTEM表空间的负荷,主要存储数据字典以外的其他数据对象。此表空间一般不存储用户数据,由Oracle系统内部自动维护。UODO表空间:撤销表空间,用于存储撤销信息的表空间。USERS表空间:用户表空间,Oracle建议用户使用的表空间,可以在这个表空间上创建各种数据对象(创建表、索引、用户等数据对象)。Oracle系统的样例用户SCOTT对象就存放在USERS表空间中。(除了Oracle系统默认创建的表空间外,用户可以根据应用系统的实际情况及其所要存放的对象类型创建多个自定义的表空间,以区分用户数据与系统数据。不同的数据应存放在不同的表空间,而不同的表空间的文件应该存放在不同的盘上,从而减少IO冲突,提高应用系统的操作性能)

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3