Oracle真正存放数据的是数据文件data file ,Oracle表空间 table space 实际上是一个逻辑上的概念,他在物理上并不存在,把一组data file 打包在一起就成了一个表空间了
表空间作用:
- 控制数据库所占用的磁盘空间
- 控制用户所占用的表空间配额
- 通过表空间控制数据流向,从而提高I/O性能
- 表空间提供了一个备份和恢复单位
表空间的分类
创建表空间时要指定表空间类型
1.按是否存放系统数据分
- 系统表空间
SYSTEM 放数据字典等系统数据
SYSAUX 存放其他可选组件的系统数据 - 非系统表空间
2.按表空间内容分
永久表空间 permanent tablespace
临时表空间 temporary tablespace
存放临时性的数据,order by等SQL语句会产生大量的临时数据,一般创建用户时要给该用户指定一个临时表空间,存放其操作产生的临时数据,如果没有指定,将占用系统表空间,影响服务器效率- 撤销表空间 undo tablespace
存放回滚段数据,当你对一张表或一条记录进行修改的时候,它会对修改之前的信息进行保存,这样可以保证数据的回滚。
3.按表空间大小分
- 大文件表空间
只能对应一个数据文件data_file,这个data_file可以包括4G个数据块,最大可达32TB - 小文件表空间
可以放1022个data_file
表空间的区管理
- 数据字典管理(Dictionary managed tablespace)
在表空间里,有的区间被占用了,有的没被占用,这些数据是放在数据字典里的。当你对这个表空间进行分配或释放的时候,数据文件里相关的表就会做修改.传统管理方式,10g已经不使用 - 本地管理(locally managed tablespace)
11g默认的管理方式,用位图bitmap来自由的管理区间。一个区间对一个位,如果这个位是1表示已经被占用,0表示未被占用 - 二者区别
词典管理空间表示“中央集权治”,本地管理表空间表示“省市自治区”,一个databases表示中国,tablespaces表示一个省或直辖市。词典管理统一由中央调配。而本地管理表示有高度的自治权利,自已各种资源的分配不用上报中央。
表空间管理操作
查看
- 查看表空间
V$TABLESPACE displays tablespace information from the control file.
select name from V$tablespace
- 查看表空间有哪些文件
desc dba_data_files;
select file_name from dba_data_files
创建
- 创建大小为50M的表空间test,禁止自动扩展数据文件
create tablespace test
logging
datafile
'C:\oracle\oradata\orcl\TEST01.DBF'
size 50M
reuse autoextend off;
- 将表空间test离线
alter tablespace test offline;
- 查看test是否离线
select tablespace_name,status from dba_tablespaces;
- 将表空间test联机
alter tablespace test online;
- 使表空间test只读,从而保持静态数据
alter tablespace test read only;
注:查看表空间是否只读时,也是查找dba_tablespaces的status字段
- 使表空间可读可写
alter tablespace test read write;
- 在Oracle 11g总可直接更名永久表空间和临时表空间,但是system和sysaux表空间不能更名
alter tablespace test rename to test1
删除
drop_tablespace::=
删除表空间,使用命令drop tablespace ‘表空间名’ 但是有3个选项需要注意:
INCLUDING CONTENTS:指删除表空间中的segments;
INCLUDING CONTENTS AND DATAFILES:指删除segments和datafiles;
CASCADE CONSTRAINTS:删除所有与该空间相关的完整性约束条件。
例子
删除表空间test之前
删除
drop tablespace test including contents and datafiles cascade constraints;
删除之后