oracle基础-表空间(一)

来源:互联网 发布:迪克斯特拉算法的例题 编辑:程序博客网 时间:2024/05/20 00:12

表空间是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

原创粉丝点击