今天看第二章 是数据库对象管理
首先 数据库对象,是表,视图,约束,存储过程,触发器之类的
书上有提到表空间一词,表空间就是用来保存这些数据库对象滴~
创建表空间对象~3种创建方式
1、autoallocate(自动分配)
CREATE TABLESPACE t1
DATAFILE 'e:\t1_1.dbf' SIZE 2M
AUTOALLOCATE;
t1是逻辑命名,t1_1是物理存储的名字
默认情况下,表空间的区管理为本地管理方式,不需要写语句
2、uniform(区分配)
CREATE TABLESPACE t2
DATAFILE 'e:\t2_1.dbf' SIZE 1M,
'e:\t2_2.dbf' SIZE 2M
UNIFORM SIZE 128K;
用这个方式,一个表空间能够对应多个数据文件,不过,不理解最后的SIZE 128M是什么意思~
于是百度了一下一段~
oracle中表,索引,分区等都叫做段,每个段是有多个物理上不连续的区间组成;当段的空间不够时Oracle是通过增加区间来实现的。UNIFORM SIZE就是这个表空间中所有的区间是同样的大小,好处是防止碎片
如果按上所言,应该是表空间中所有区间都是128K大
3、auto(段管理)
CREATE TABLESPACE t3
DATAFILE 'e:\t3_1.dbf' SIZE 1M
AUTOEXTEND ON NEXT 2M
MAXSIZE 10M
SEGMENT SPACE MANAGEMENT AUTO
段管理方式在默认情况下为manual(手动)
除了上述三种表空间的创建之外,临时表空间的创建,以及撤销表空间也是用到了CREATE TABLESPACE语句
CREATE TEMPORARY TABLESPACE temtbs1
TEMPFILE 'e:\temptbs1_1.dbf' SIZE 2M;
CREATE UNDO TABLESPACE undotbss1
DATAFILE 'e:\undotbs1_1.dbf' SIZE 2M;
还不明白临时表和撤销表空间的作用,至少目前我看它们依旧都是占了我所打代码的2M的空间……
不指定temporary或者undo则默认永久表空间
查询表空间信息:
SELECT TABLESPACE_NAME tbs_name,
EXTENT_MANAGEMENT extent_mgt,
SEGMENT_SPACE_MANAGEMENT segment_mgt,
STATUS,CONTENTS
FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME = 'T1';
查询是一个非常想砍人的工作,结论如下:
1、如果SELCET *,结果是全部出来了,但是完全无序化,看着非常纠结(因为表头过长导致)
2、条件句WHERE之后的TABLESPACE_NAME不可用缩写,提示标示符无效
3、由于我创建的表空间名为小写,于是一开始条件语句上写的是小写t1,结果提示“未选定行”,往书下面一看,很好~“在查询条件中,表空间的名称必须全部用大写字母,否则会出现查不到该表空间的情况”
我很想怀疑下这些语句是不是全部被自动大写化了~
修改表空间:
当表空间的物理数据文件容量不足时,可以通过为表空间增大数据文件容量或增加数据文件的个数两种方式来实现表空间的修改
1、增加数据文件
ALTER TABLESPACE t1 ;我很想骂人的,怎么这个时候就可以用小写了!!!!
ADD DATAFILE 'e:\t1_2.dbf' SIZE 2M;
所增加的数据文件可以放在其他的磁盘位置,要写正确完整的路径,如果只写文件名,则该数据文件被存放在Oracle默认路径下,另,文件扩展名不一定是dbf
2、修改数据文件大小
ALTER DATABASE
DATAFILE 'e:\t1_1.dbf'
RESIZE 4M;
修改表空间状态:
ALTER TABLESPACE t1 OFFLINE;
删除表空间:
DROP TABLESPACE t3
INCLUDING CONTENTS AND DATAFILES;
最后一句是:删除表空间中的数据及数据文件
今天到这里了~~睡觉 Z好眠