整理自:http://tianzt.blog.51cto.com/459544/171759/
http://blog.youkuaiyun.com/wildboy2001/article/details/8177238
http://hi.baidu.com/redstorm_wu/item/19bb413da4b67d0dceb9fe8c
http://hi.baidu.com/muyehou/item/b4da7320c5d2228d6e2cc395
http://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html
是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间。
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
1、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
2、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
3、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;
4、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
三、分区表种类
Oracle分区表分为四类:范围分区表、列表分区表、哈希分区表、组合分区表。
- 范围分区表:创建一个按字段数据范围分区的表,分区置于指定的不同表空间中。
- 列表分区表:创建一个按字段数据列表固定可枚举值分区的表。插入记录分区字段的值必须在列表中,否则不能被插入。
- 哈希分区表:创建一个按字段数据Hash值分区的表。
- 组合分区表:在分区中可以再建立子分区,以实现分区组合。可任意对上述各类分区进行组合分区。
system表空间,存储数据字典和系统回滚段,数据库创建的时候自动创建;
undo表空间,用于回滚操作,设置为自动回滚,则数据库使用一个undo表空进;
temporary表空间,用于临时存放分类操作的中间结果。
索引表空间,用于存放索引
数据表空间,用于存放表
五、表空间
创建表空间:
改变表空间状态:
ALTER TABLESPACE testtb OFFLINE;
ALTER TABLESPACE testtb ONLINE;
ALTER TABLESPACE testtb READ ONLY;
ALTER TABLESPACE testtb READ WRITE;
删除表空间:
DROP TABLESPACE testtb INCLUDING CONTENTS AND DATAFILES;
在删除操作之前将表空间置为在线状态,保证没有未提交的事务引用该表空间
如果表空间有数据,则需要使用INCLUDING CONTENTS参数
扩展表空间:
增加数据文件
ALTER TABLESPACE testtb ADD DATAFILE '/oracle/oradata/db/DATA02.dbf' SIZE 1000M;
手动增加数据文件尺寸
ALTER DATABASE DATAFILE '/oracle/oradata/db/DATA01.dbf' RESIZE 4000M;
设定数据文件自动扩展
ALTER DATABASE DATAFILE '/oracle/oradata/db/DATA01.dbf
AUTOEXTEND ON NEXT 100M
MAXSIZE 10000M;
七、查看表空间
1、查看所有表空间
SELECT * FROM DBA_TABLESPACES
SELECT * FROM USER_TABLESPACES
2、查看表空间的使用情况
SELECT B.FILE_NAME 物理文件名,
B.TABLESPACE_NAME 表空间,
B.BYTES/1024/1024 大小M,
(B.BYTES-SUM(NVL(A.BYTES,0)))/1024/1024 已使用M,
SUBSTR((B.BYTES-SUM(NVL(A.BYTES,0)))/(B.BYTES)*100,1,5) 利用率
FROM DBA_FREE_SPACE A,DBA_DATA_FILES B
WHERE A.FILE_ID=B.FILE_ID
GROUP BY B.TABLESPACE_NAME,B.FILE_NAME,B.BYTES
ORDER BY B.TABLESPACE_NAME
3、查看所有段
SELECT * FROM DBA_SEGMENTS
SELECT * FROM USER_SEGMENTS
4、查看所有区
SELECT * FROM DBA_EXTENTS
SELECT * FROM USER_EXTENTS
八、查看表分区
1、查看所有表分区
SELECT * FROM USER_TAB_PARTITIONS
SELECT * FROM DBA_TAB_PARTITIONS
或者:
select subobject_name
from user_objects
WHERE object_type = 'TABLE PARTITION';
2、查看所有子分区
SELECT * FROM DBA_TAB_SUBPARTITIONS;
SELECT * FROM USER_TAB_SUBPARTITIONS;
3、查看拥有分区的表
SELECT * FROM USER_PART_TABLES;
SELECT * FROM DBA_PART_TABLES;
4、
SELECT * FROM DBA_PART_INDEXES;
SELECT * FROM USER_PART_INDEXES;
SELECT * FROM DBA_IND_PARTITIONS;
SELECT * FROM USER_IND_PARTITIONS;
SELECT * FROM DBA_IND_SUBPARTITIONS;
SELECT * FROM USER_IND_SUBPARTITIONS;