oracle sql 高级编程学习笔记(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whandgdh/article/details/81904659

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

一、表空间

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

 select  t.* from   v$tablespace t;
select  t.* from   DBA_TABLESPACES t;
select  t.* from  user_tablespaces t; 

二、段

Oracle中的段可以分成4种类型:数据段、索引段、回滚段、临时段。
数据段用来存储用户的数据,每个表都有一个对应的回滚段,其名称和数据表的名字相同。索引段用来存储系统、用户的索引信息。回滚段用来存储用户数据修改前的值,回退段与事务是一对多的关系,一个事务只能使用一个回退段,而一个回退段可存放一个或多个事务的回退数据。临时段用于order by语句的排序以及一些汇总。
数据段是与数据库对象相对应,一般一个数据库对象对应一个数据段(注意 数据库对象 指表,视图,索引,触发器,存储过程,用户等);

通过视图 dba_segment或者 user_segments;可以知道 段名称与数据库对象名称一致 ;
 select t.owner 用户,t.segment_name 段名称 ,t.tablespace_name 表空间名称 ,T.segment_type 段类型  from  dba_segments t
  where t.owner='SCOTT';--查看scott 用户下的段
--查询结果中除了有表外还有索引

查询结果如下
这里写图片描述

我们再去表视图查看scott用户的表

  select  t.table_name,t.tablespace_name from  all_tables  t where t.owner='SCOTT';

这里写图片描述

发现查询结果中比段中多了bonus这个表,我们去查询这个发现是空表,所以猜想是创建表时不会马上分配段,在插入数据后才会有,
在bonus 表中插入数据
这里写图片描述
再去查看段视图 结果能查到bonus
这里写图片描述

三 、区

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

四、数据块

数据块是数据中中最小的数据组织单位与管理单位,是数据文件磁盘存储空间单位,也是数据库I/O 的最小单位,数据块大小由DB_BLOCK_SIZE参数决定

典型的块大小有4KB,8kb,16kb, 默认是8kb;
–查询块大小

show parameter db_block_size;

这里写图片描述

查看 数据段,扩展区,数据块关系

  select   t.segment_name 数据库对象,t.extents 扩展区数目 ,t.blocks  块数目 from user_segments  t;

这里写图片描述

不同的oracle版本DB_BLOCK_SIZE的默认值是不同的。

备注:本文中的实例演示基于oracle自带的实例orcl。

猜你喜欢

转载自blog.csdn.net/whandgdh/article/details/81904659
今日推荐