表空间是oracle中的一个逻辑单位,用于存放其他oracle方案和管理datafile。
我目前所理解的:
1)tablespace可以拥有一个或者多个datafile,并且datafile所占的空间大小即为tablespace的size。
2)在创建一些方案如table,index之类的,可以指定它的存放表空间。如果tablespace中拥有多个datafile,当用户向tablespace中插入数据时,无法预测数据将会被存放在哪个文件之上。tablespace自动分配数据存放,如果又多个文件,第一个存满了,存第二个...依次,直到所有数据文件充满数据。然后需要手动或者系统自动扩大表空间。
3)表空间类型:Permanent(默认)、Undo、Temporary 。
3.1)默认的就是用户表空间,也就是永久表空间。用户存储数据的。
3.2) 回滚表空间,用于存DML语句的undo语句和事物相关语句。
3.3) 临时表空间,用于排序、构建索引或者分析等。
4)tablespace在创建时,可以指定其中extent和segment的管理方式。
通俗的事物类比解释:公司A总部在南京A0,然后在江苏和无锡都又有分公司A1和A2。如果说A0,A1,A2的办公楼算作是datafile的话,那么公司A可以看成一个tablespace。楼层是extent,房间是block。员工是data。然后如果继续类比下去的话就是table和index都可以比作部门或者项目组。
表空间的相关操作(Permanent tablespace):
一、创建
create tablespace tablespace_name
datafile '...(文件绝对路径)' size file_size [autoextend on next next_extend_size maxsize file_max_size]
[datafile ...] (可以有多个数据文件)
[logging|nologging] (是否记录重写日志)
[online|offline] (联机或者脱机)
extent management local [ autolocal |uniform size next_extend_size] (扩展区管理,一般默认本地管理,一般自动增长大小,不过也可以通过uniform进行固定增长)
segment space management [auto|manual] (数据段管理,默认自动,即位图管理,如果选择手动,就是字典管理,需要通过PCTUSED、FREELISTS、FREELIST GROUPS的方式来管理Segment中的data block)
storage 参数(用于auto都是采用位图管理segment,自动会生产)
二、修改大小
1.通过添加数据文件来修改表空间大小
alter tablespace tablespace_name add datafile '...' size file_size [autoextent on ...]
2.通过修改数据文件来实现,有两种情况,一是扩大数据文件,二是让数据文件自动增长
alter database datafile '....' resize new_file_size;
alter database datafile '...' autoextent on next next_extend_size maxsize max_file_size;
三、修改状态(联机、脱机、只读...)
alter tablespace tablespace_name offline | online
四、移动(tablespace只是个逻辑概念,没有move相关命令,也不能直接移动也没有移动的概念,我们只能移动数据文件)
1.先让表空间脱机
2.用copy命令,将datafile从原位置复制一份到目标位置。
3.alter database rename file '源文件' to '目标文件';
4.让表空间联机
五、删除表空间
drop tablespace 表空间名 [including contents [and datafile]];
六、查看表空间使用情况
通过相关数据字典和视图:dba_data_file, dba_extents, dba_segments, v$free_space