oracle 表空间管理

时间:2021-10-19 07:48:59

表空间是ORACLE数据库最高层次的逻辑存储结构,保存段、区、块,由一个或多个数据文件组成。
块的存储管理
块是ORACLE存储结构的最小单位。块大小分为标准数据块和非标准数据块
标准数据块由DB_BLOCK_SIZE设定,创建数据库时设定的,创建完数据库后不能修改。
非标准块可以有4种,由初始化参数DB_nk_CACHE_SIZE设置,可在数据库创建后使用。
数据块的管理方法分为:
1
、自动管理方式  如创建表空间时设置为本地管理方式,并且将段的存储空间方式设置为AUTO,该表空间的所有块均采用自动管理方式。系统默认值。
2
、手工管理方式  是传统的管理方式,主要通过PCTFREEPCTUSED两个存储参数控制可用存储区的大小,避免行迁移现象的发生。这两个参数可在创建表空间时设置,也可在数据库的模式对象(表,索引)中设置。模式对象中设置的优先级比表空间的要高。如表和索引中没有设置,则按表空间的设置,如表空间也没设置,则按自动管理方式管理块。
区的存储管理
区是ORACLE进行存储空间分配的最小单位。是由一系列物理上连续的数据块组成的逻辑存储结构。段中第一个区叫初始区,随后分配的区叫后续区。当段中所有的空间使用完后,ORACLE自动为该段分配一个新的区。
根据表空间的管理方法不同,区的分配方法也不同。
1)本地管理方式下的区的分配方法。
自动分配和统一分配
自动分配由ORACLE自动确定段中初始区大小,默认值为64K,并根据存储要求自动分配优化大小的后续区。
统一分配由ORACLE自动分配具有统一大小的初始区和后续区。

CREATE TABLESPACE lmtbsb

DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M

EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

 

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

2)字典管理方式下的区的分配方法。
根据存储子句STORAGE中的存储参数分配新的区。
storage (
initial  integer [K|M]
next  integer [K|M]
minextents integer
maxextents  {integer | unlimited}
pctincrease integer
)
如果使用了DEFAULT STORAGE子句,至少需要在其中设置一个存储参数。
INITIAL
。缺少5个数据块的大小。如该值不是数据块大小的整数倍,系统自动确定舍入到数据块大小的整数倍。
PCTINCREASE
。缺少为50。回滚段不能指定此参数,其值总是0
存储子句可以在3处设置:
一是ORACLE缺省值
二是创建表空间时为表空间设置的存储参数
三是创建模式对象(如表、索引)时为该模式对象设置的存储参数。
这三个地方都可能对区的分配产生影响,有优先级
创建模式对象中的存储子句最高,表空间次之,ORACLE缺省值最低。
也就是说创建模式对象时没有指定存储参数,按表空间的存储子句进行,如表空间没有指定,按ORACLE缺省值来。
区分配管理在创建表空间时确定,建完后,不允许更改
extent management
{dictionary |
local autoallocate | uniform [size integer K|M] }
autoallocate  
本地管理方式下的区自动分配
uniform     
本地管理方式下的区统一分配
段的存储管理
一个段只属于一个模式对象,如表、索引
创建一个模式对象时,ORACLE为这个对象创建一个段,在这个段中保存这个对象的所有数据,当这个段数据增加时,为这个段分配新的区存储数据。段中至少有一个初始区。
段有以下类型:
数据段   用来存储表和簇的数据
索引段
临时段   暂存SQL语句的临时数据,以及临时表和临时表的索引等。
回退段
段管理主要有两种方式:
自动管理方式。 采用位图管理段的存储空间
手工管理方式。 采用FREELIST管理段的存储空间
段的管理方式只有在创建表空间时设置,完成后不好更改
ORACLE9I中,缺省状态为自动管理方式
segment space management { man l | auto}
表空间
表空间的管理方式主要有两种:
字典管理  在数据字典中管理表空间的空间分配
本地管理  在每个数据文件中使用位图来管理空间的分配,表空间中所有区的分配信息都保存在该表空间对应的数据文件的头部。
oracle 8i
以前只有字典管理,之后引入本地管理
本地管理的表空间的优点:
速度快,存储空间的分配和回收只是简单地改变数据文件中的位图,而不像字典管理方式还需要修改数据库。
改善了存储管理的性能。某些在字典管理方式下的存储分配有时会产生递归操作,从而影响了系统的性能,使用本地管理方式不会产生递归操作。
无碎片。
更易于DBA维护。
段的管理方式是在建立表空间时确定的,一经确定不能改变。
区的管理方式与表空间的管理方式密切相关:
字典方式下:ORACLE根据存储子句分配区,这些参数可以在创建表空间后修改。参数设置不恰当,表空间中会有空闲区碎片,需要DBA手工执行碎片合并,降低性能,增加DBA工作。
本地方式下:由ORACLE自动分配区,这种方式一旦确定不能修改。ORACLE9I 建议采用方式。
表空间的类型
System Tablespace
系统表空间:主要包括数据字典、所有PL/SQL程序单元以及所有模式对象的定义。
Temp Tablespace  
临时表空间:用于暂存一些复杂SQL查询语句运行时产生的临时数据。在执行SQL语句中,如临时数据量大,SQL工作区放不下,将利用临时表空间暂存部分临时数据。
Undo Tablespace  
:由ORACLE自动分配管理,每一个实例只能使用一个UNDO表空间
User Tablespace  
用户表空间:用来保存用户数据
表空间的管理原则:
1
、创建多个表空间
?       
将数据字典与用户数据分别存放在不同的表空间中,避免同时访问一个表空间产生访问冲突
?       
将不同应用的数据存放在不同的表空间,保证各类应用数据的独立性。避免由于一个表空间脱机,导致多个应用程序受到影响。
?       
将不同表空间放在不同的硬盘上,均衡磁盘I/0操作。
?       
UNDO数据与用户数据分别存储,防止由于硬盘损坏导致数据永久丢失。
?       
当一些表空间联机时,可以将另外的表空间设为脱机,提高数据库性能。
?       
为某种特殊用途专门设置一个表空间,比如频繁的更新操作,或者临时段的存储。专门设置的表空间可以优化表空间的使用效率。
由于某些操作系统对一个进程可以同时打开的系统文件数据具有限制,从而影响同时联机的表空间数量,尽量让表空间使用较少的数据文件。因此在创建表空间时,应当为表空间分配足够大的数据文件,或将数据文件设置为自动增长方式,而不要让一个表空间使用很多较小的数据文件。
2
、设置表空间的默认存储参数
创建字典管理方式的表空间时,可以设置表空间的默认存储参数
3
、为用户设置表空间限额
创建表空间:
CREATE [UNDO] TABLESPACE tablespace
[DATAFILE clause]
[MINIMUM EXTENT integer[K|M]]
[BLOCKSIZE integer [K]]
[LOGGING|NOLOGGING]
[DEFAULT storage_clause ]
[ONLINE|OFFLINE]
[PERMANENT|TEMPORARY]
[extent_management_clause]
[segment_management_clause]
在表空间创建过程中,ORACLE将在数据字典和控制文件中记录下新建了一个表空间,同时创建指定大小的数据文件。
所有表空间的数据文件总和不能超过初始化参数MAXDATAFILES的限制。
表空间创建好之后,可以使用:
alter tablespace
alter database   
来修改表空间
默认情况下,创建的表空间具有标准块大小,由初始化参数DB_BLOCK_SIZE指定
创建非标准块大小的表空间,须在DB_nk_CACHE_SIZE中设置非标准块的大小,系统才在SGA区中创建具有相同大小的缓存区,否则该表空间将无法使用。
本地管理表空间中指定区的分配管理方式。
AUTOALLOCATE
UNIFORM 两种
默认是AUTOALLOCATE,常用于需要存放大小经常变化的对象和使用不同大小区的表空间,虽然可能造成一些存储空间的浪费,可减轻DBA工作量。
create tablespace user02
datafile ‘d:/user02.dbf’ size 5M
extent management local autoallocate;
UNIFORM
方式常用于存放的大部分对象都要求使用相同大小区的表空间。不会产生任何存储碎片,可以避免存储空间的浪费。
create tablespace user02
datafile ‘d:/user02.dbf’ size 5M
extent management local uniform size 128k;
如没有指定SIZE参数的值,将使用1M作为默认值。
本地管理的表空间分配的数据文件,其头部的部分空间用于空间管理,用UNIFORM方式创建本地管理表空间,为表空间分配的数据文件大小应该大于UNIFORM之后的SIZE指定的区的大小。
本地管理表空间中指定段的存储管理方式。
MAN L
AUTO两种
MAN L
方式使用FREELIST来管理段中间的空闲数据块,默认方式
create tablespace user02
datafile ‘d:/user02.dbf’ size 5M
extent management local
segment space management man l;
AUTO
方式使用位图来管理段中已用数据块和空闲数据块。
create tablespace user02
datafile ‘d:/user02.dbf’ size 5M
extent management local
segment space management auto;
应用于以后所有在该表空间中创建的段,并且段存储管理方式不能改变。
创建字典管理的表空间
通过存储子句(storage)设置存储参数对区进行存储管理,其特点是存储管理具有很强的灵活性,但是存储空间空间会产生碎片,需要手工回收合并。
段的管理方式与本地管理的表空间一样,既可以采用MAN L,也可以采用AUTO方式。
create tablespace user06
datafile 'd:/user06.dbf' size 5M
extent management dictionary
defa