逻辑存储结构
逻辑存储结构概述
按照由小到大的顺序,逻辑存储单元可以做如下划分:
(1)块(Block)。
块是Oracle逻辑存储结构中个头最小的存储单元,所有数据的存取都是以块为单位进行的。初始化参数文件中有一个参数叫BLOCK_SIZE,设置数据块的大小。
查看块大小:
show parameter block_size
或者
select name,value from v$parameter where name like '%block_size%';
(2)区(Extent)。
区是Oracle数据库的最小分配单位,由一组连续的块组成,这些块物理上可能并不连续,但是必须都存在于同一个物理文件,单个区在分配时不能跨文件分配。
select * from dba_extents where segment_name='SYSTEM'
(3)段(Segment)。
从逻辑的角度看,段由一个或多个区组成,它是一个真正的逻辑结构。
表、索引的大小即使段的大小,每张表、每个索引都有各自对应的段,且表名和段名相同。
select * from dba_segments
段空间管理有两种:
①MSSM:由你设置freelists、freelistgroups、pctused、pctfree、initrans等参数来控制如何分配、使用段中的空间
②ASSM:你只需控制一个参数pctfree,其他参数即使建了也将被忽略
⑴freelist
使用MSSM表空间管理时,Oracle会在freelist中为有自由空间的对象维护HWM以下的块
freelist和freelistgroup在ASSM表空间中根本不存在,仅在MSSM表空间使用这个技术
⑵pctfree和pctused
pctfree告诉Oracle:块上应该保留多大的空间来完成将来的更新
对于MSSM,她控制着块何时放入freelist中,以及何时从freelist中取出。
如果大于pctfree,则这个块会一直在freelist上
对于ASSM,因为ASSM根本不使用freelist。在ASSM中,pctused也将被忽略。
但她仍然会限制能否将一个新行插入到一个块中
适当的设置pctfree有助于减小行迁移
(4) 表空间 (tablespace)
表空间是个逻辑概念。表空间是ORACLE的最大逻辑结构。表空间是组织数据和分配空间的逻辑结构。
特性:
一个表空间由一个或者多个数据文件组成,但一个数据文件只属于一个表空间
一个数据库可以有多个表空间,可以在数据库中创建,删除表空间。
一个表空间只属于一个数据库,
一个表空间的大小等于所有数据文件的大小之和。
表空间可以联机,脱机(系统表空间和带有回滚段的表空间不能OFFLINE)
数据库对象、表、索引的数据被存储在表空间的数据文件中。
一个用户默认使用一个表空间
表空间分类:
系统表空间(SYSTEM和SYSAUX):此表空间必须存在,一般用户存放数据字典表
临时表空间(TEMP): 用户排序,分组,索引等
create temporary tablespace user_temp
tempfile '/opt/oracle/data/user_temp.dbf'
size 50m ;
撤消表空间(UNDO): 用户ROLLBACK,从逻辑中恢复(可以创建多个表空间,但只能激活一个表空间)
create undo tablespace test1_undo
datafile '/opt/oracle/data/test1_undo.dbf'
size 2m;
用户表空间 :保存用户数据
create tablespace user_data
datafile '/opt/oracle/data/user_data.dbf'
size 50m ;
删除表空间:
drop tablespace test_data including contents and datafiles;
表空间的管理方式
1. 字典管理方式:使用数据字典来管理存储空间的分配,当表空间分配新的区、或者回收已分配的区时,ORACLE会对数据字典对应的表进行查询、更新。且使用单线程,速度慢,并且回产生回退和重做信息(已经淘汰)。
2. 本地管理方式:ORACLE 9i默认方式,表空间中区分配和区回收的管理信息都被存储在表空间的数据文件中,而与数据字典无关。表空间为每个数据文件维护一个位图结构,用于记录表空间的区分配情况。当表空间分配新的区、或者回收已分配的区时,ORACLE会对文件中的位图进行更新,所以不会产生回滚和重做信息。(11默认)
通过dba_tablespaces可以查看各个表空间的区、段管理方式;
select TABLESPACE_NAME,STATUS,EXTENT_MANAGEMENT,ALLOCATION_TYPE,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces
表空间的状态:
1. 读写状态
只读(READ-ONLY):任何人无法写入数据,无法修改数据。
读写(READ-WRITE):任何有权限的用户都可以读写。
修改为只读:
ALTER TABLESPACE WORKDATA01 READ ONLY(此TABLESPACE过程在下次启动时候依然为只读)
OFFLINE之后无法在该表空间做任何操作。
V$TABLESPACE
表空间的标号和信息
DBA_TABLESPACE
表空间的标号和信息
USER_TABLESPACE
表空间的标号和信息
DBA_TABLESPACE_GROUPS
DBA_SEGMENT
表空间段的信息
USER_SEGMENT
表空间段的信息
DBA_EXTENTS
表空间的数据盘区的信息
USER_EXTENTS
表空间的数据盘区的信息
DBA_FREE_SPACE
表空间的空闲信息
USER_FREE_SPACE
表空间的空闲信息
V$DATAFILE
数据文件以及所属表空间的信息
V$TEMPFILE
临时文件以及临时表空间的信息
DBA_DATA_FILES
数据文件以及所属表空间的信息
DBA_TEMP_FILES
临时文件以及临时表空间的信息
V$TEMP_SPACE_HEADER
临时文件的空闲信息
V$SORT_SEGMENT
每个排序段的信息
V$SORT_USER
用户使用的临时排序信息