表空间、表分区

整理自:http://tianzt.blog.51cto.com/459544/171759/

              http://blog.csdn.net/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


一、表空间及分区表的概念
表空间:
  是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间。
    表空间是oracle管理的最大的逻辑存储单元,建立在数据文件(物理存储单元)之上。
      oracle的逻辑存储单元:tablespaces > segments > extents > data blocks
      oracle的物理存储单元:data file > os block

       所有的oracle段都有一个在段内容纳数据的上限,我们把这个上限称为"high water mark"或HWM。这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment。HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很象一个水库的历史最高水位,这也就是HWM的原始含义,当然不能说一个水库没水了,就说该水库的历史最高水位为0。但是如果我们在表上使用了truncate命令,则该表的HWM会被重新置为0。

分区表: 
    当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
二、分区表的优势

1、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;

2、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;

3、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;

4、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

三、分区表种类

Oracle分区表分为四类:范围分区表、列表分区表、哈希分区表、组合分区表。

    1. 范围分区表:创建一个按字段数据范围分区的表,分区置于指定的不同表空间中。
    2. 列表分区表:创建一个按字段数据列表固定可枚举值分区的表。插入记录分区字段的值必须在列表中,否则不能被插入。
    3. 哈希分区表:创建一个按字段数据Hash值分区的表。
    4. 组合分区表:在分区中可以再建立子分区,以实现分区组合。可任意对上述各类分区进行组合分区。
四、表空间种类

system表空间,存储数据字典和系统回滚段,数据库创建的时候自动创建;

undo表空间,用于回滚操作,设置为自动回滚,则数据库使用一个undo表空进;

temporary表空间,用于临时存放分类操作的中间结果。

索引表空间,用于存放索引

数据表空间,用于存放表

五、表空间

创建表空间语法详解。

创建表空间:

创建数据表空间

创建临时表空间

创建索引表空间

创建undo表空间

改变表空间状态:

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;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值