表空间

一、表空间基础

    表空间是Oracle中用来管理数据库数据存储的一种逻辑结构。每个应用程序的表和索引都作为一个段存储,而这些段都存储在作为表空间成分的数据文件中。表空间是由一个或多个数据文件组成的。

    表空间中的数据存储结构又可以细分为段、区和数据块:

    数据块(data block):Oracle数据库的存储基础,由磁盘上的字节组成,初始化参数DB_BLOCK_SIZE指定了数据块的大小,一般介于2~32KB之间,默认为8KB。

    区(extent):由特定数目的相邻的数据块组成,是Oracle中空间分配的单元。

    段(segment):一组区构成段,用来存储各种逻辑对象(比如表、索引或其他对象),每个表的数据存储在自身的数据段中,索引存储在自己的索引段中。

    一个最简单的Oracle数据库必须有System和Sysaux表空间。System表空间是创建新数据库时创建的第一个永久表空间,它含有重要的帮助数据库运行的数据字典信息,Sysaux表空间是System表空间的一个辅助表空间,存储各种Oracle应用的元数据

二、表空间分类

    永久表空间、临时表空间。

    系统表空间:System换人Sysaux表空间。System表空间是系统核心表空间,存放数据字典表、控制文件和数据文件的信息等。该表空间仅能被SYS、SYSTEM等用户使用,不能被重命名和删除。

    临时表空间:当执行数据排序order by、汇总group by或创建和重建索引时,会使用临时表空间来存放数据,服务器进程会先在进程全局区PGA中存放数据,当PGA空间不够时会建立临时段,这些临时数据存放在临时表空间中。若没有指定临时表空间,默认会将SYSTEM表空间作为临时表空间,会导致SYSTEM表空间产生大量存储碎片,不利于数据库的稳定性。

    UNDO表空间(撤销表空间、重做表空间):实现撤销管理,比如当回滚一个事务时从撤销表空间拿旧数据进行恢复。可以创建多个撤销表空间,但同一时刻只能激活一个撤销表空间,在UNDO_TABLESPACE中指定。

    大文件表空间:由一个可以包含4G个数据块的数据文件组成,主要用在超大型数据库的场合来减少数据文件个数。

    用户表空间(数据表空间):存放用户创建的对象和私有信息。

三、创建表空间

    创建普通表空间:create tablespace

    创建撤销表空间:create undo tablespace

    创建临时表空间:create temporary tablespace

    创建大文件表空间:create bigfile tablespace

create tablespace tbs_01 datafile '/data01/oracle/app/oradata/tbs_f1.dbf' size 200M 

online  --指定表空间在线或离线(offline)

extent management local [UNIFORM | AUTOALLOCATE] --指定表空间如何管理区

segment space management auto  --指定表空间的段管理方式,只与本地管理表空间有关
nologging;  --使数据库不对表空间中任何对象生成重做记录

    Oracle监控表空间的两种方式:

    本地管理的表空间(Locally Managed Tablespace),默认的空间管理方式,使用位图来管理区,所有区的分配和回收的管理信息存储在表空间数据文件的位置结构中,以记录数据文件内数据块的可用或占用情况。

    数据字典管理的表空间(Dictionary Managed Tablespace),将表空间的使用信息存放在数据字典中,一般不建议使用。

    区的分配方式(仅用于本地管理的表空间):

    UNIFORM:指定表空间中所有区的大小都相同,默认为1M;

    AUTOALLOCATE:默认设置,指定Oracle自动管理区的大小。

    段的管理方式(管理段中已用和空闲数据块的机制):

    MANUAL手工方式:使用空闲列表free list来管理段的空闲数据块。

    AUTO自动方式:使用位图管理段内的可用空间,描述段内每个数据块是否有足够的可用空间来插入新数据。

Oracle Database 11g的表空间默认为自动段空间管理的本地管理。在创建这种类型的表空间时不能指定默认的存储参数,如INITIAL、NEXT、PCTINCREASE、MINEXTENTS或MAXENTENTS等。

    Oracle通过分配一定数量的区给段,并完成段的空间分配后,除非解除分配,否则此空间一直属于该段。解除分配:

truncate table table_name drop storage;    或

alter table table_name deallocate unused;

存储参数:

    初始区(initial extent):确定在表空间中创建的对象的初始空间分配量。

    下一个区(next extent):确定创建初始区之后的后续区的尺寸。

    区管理(extent management):分为本地管理和字典管理。

    分配类型(allocation type):区的分配方式,UNIFORM和AUTOALLOCATE。

    段空间管理(segment space management):表空间的段管理方式,AUTO(默认)或MANUAL。

查看表空间的参数设置:

select initial_extent,next_extent,extent_management,allocation_type,segment_space_management from dba_tablespaces;

创建临时表空间:

create temporary tablespace tmp_tbs_01
tempfile '/data01/oracle/oradata/temp01.dbf'
size 200M
extent management local
uniform size 5M;

创建一个初始大小是200M的临时表空间,统一分区大小为5M。

指定某个用户的临时表空间:

alter user appinv temporary tablespace tmp_tsb_01;

指定整个数据库的默认临时表空间:

alter database default temporary tablespace tmp_tbs_01;

创建撤销表空间:

create undo tablespace tbs_undo_01
datafile '/data01/oracle/oradata/tbs_undo_01.dbf'
size 50M
extent management local;

不能再一个正在运行的事务中创建撤销表空间。

指定实例所用的撤销表空间:

alter system set undo_tablespace=tbs_undo_01;

四、表空间管理

增加表空间大小:

alter tablespace test01 
add datafile '/data01/oracle/oradata/test01.dbf'
size 1000M;

调整表空间大小:

alter database 
datafile '/data01/oracle/oradata/test01.dbf'
resize 500M;

添加可自动扩展的数据文件:

alter tablespace test01
add datafile '/data01/oracle/oradata/test02.dbf'
autoextend on
next 200M
[maxsize 1000M];

更改表空间状态(联机|脱机):

alter tablespace test01 online;
alter tablespace test01 offline [NORMAL | TEMPORARY | IMMEDIATE];

更改表空间的读写状态:

alter tablespace test01 read only;
alter tablespace test01 read write;

更改表空间名称:

alter tablespace test01 rename to test02;

指定用户的默认表空间:

alter user appinv default tablespace test01;

删除表空间:

drop tablespace tablespace
[INCLUDING contents [{and | keep} datafiles]
[cascade constraints]--移除所有完整性约束
];

重命名数据文件:(当操作系统上的数据文件名改变后)

alter tablespace test01
rename datafile
'/data01/oracle/oradata/test01.dbf'
to
'/data01/oracle/oradata/test02.dbf';

关于临时表空间(在数据块关闭时,数据库将释放排序段):

    视图V$SORT_SEGMENT,查看排序段的空间分配和解除空间分配。

    视图V$SORT_USAGE,查看当前谁在使用该排序段。

    视图V$TEMPFILE和V$DBA_TEMP_FILES,查看当前分配给某个临时表空间的临时文件细节。

更改临时表空间操作:

alter tablespace temp add tempfile '/data01/oracle/oradata/test01.dbf' size 1000M reuse; --增大临时表空间
alter database tempfile '/data01/oracle/oradata/test01.dbf' resize 1000M; --重置表空间大小
alter database tempfile '/data01/oracle/oradata/test01.dbf' drop including datafiles; --删除临时文件

收缩临时表空间:

alter tablespace temp shrink space [tempfile '/data01/oracle/oradata/test01.dbf'] [keep 500M];

创建临时表空间组:

create temporary tablespace temp01
tempfile '/data01/oracle/oradata/temp01.dbf' size 500M
tablespace tmpgrp1;
alter tablespace temp02 tablespace group tmpgrp1;

    临时表空间组优点:

        SQL查询同时使用多个临时表空间,很少用尽排序空间;

        可以在数据库级指定多个默认表空间;

        并行操作将高效利用多个临时表空间;

        单个用户可在不同的会话中使用不同的临时表空间。

表空间可加密,这里不细讲。

管理表空间的数据字典视图:

    DBA_TABLESPACE:表空间的各种信息。

    DBA_FREE_SPACE:数据库任意时刻有多少可用空间。

    DBA_SEGMENTS:段的名称、类型及所属表空间。

    DBA_DATA_FILES:数据文件名、数据文件所属表空间、字节数、块数和相对文件号。

    DBA_TABLESPACE_GROUPS:表空间组。

    V$DATAFILE(V$TEMPFILE):数据文件名、表空间号、状态、最后更改的时间戳等。

    V$FILESTAT:关于文件读/写统计的详细数据,包括物理读和写的数目、读和写I/O所花的时间以及平均读和写的时间(毫秒)。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值