Table of Contents
1 概念
表空间,是Oralce 数据库中的一个逻辑概念。我们可以理解表空间是存储表、索引的逻辑空间。 虽然表空间是逻辑概念,但是实际上也是有其对应的物理存储的。 表空间是由一个或者多个数据文件组成。大文件表空间只有一个数据文件。小文件表空间中最多可以添加多少个数据文件是由rowid的 计算方式决定的。关于相关信息请参见ORACLE_ROWID
2 相关参数
2.1 db_block_size
此参数是数据块大小。
2.2 db_files
此参数限制了数据库中数据文件个数总和的最大值.当然这个值也不是无限设置的,最大值也受到ROWID影响。原因请参见: ORACLE_ROWID
3 相关视图
3.1 DBA_DATA_FILES
3.2 DBA_FREE_SPACE
3.3 V$DATAFILES
3.4 dba_hist_tbspc_space_usage
3.5 dba_free_space
4 分类
表空间的分类,根据不同的标准会有不同的类别.
- 根据数据会话结束后数据仍保留,分为永久表空间与临时表空间
- 根据数据段类型,分为:数据(数据段与索引段,大对象等)表空间,临时表空间,UNDO表空间
- 根据表空间由多少个文件组成,分为:大文件表空间(只有一个文件),小文件表空间(多个文件组成一个表空间,单个表空间最多1023个数据文件)
- 根据管理方式分为: 字典管理和本地管理。
4.1 永久表空间
4.1.1 小文件表空间
4.1.2 大文件表空间
4.1.3 resumalbe
当我们在建立一个大表,或往表里面插入大量数据时,如果中途因为表空间剩余空间不足并且没有开启自动扩展的话,
会话中中止并退出操作,如果操作了很长时间,要从头再来,是非常痛苦的。
这种情况往往出现在我们还无法预估将要插入的数据量时,除了个一个极大的表空间或自动扩展来解决之外。
Oracle还为我们提供了一个很好的功能:resumable
在 resumable开启的情况下,如果Oracle执行某一个SQL申请不到空间了,会话会暂停,开始等待有空间可用,(等待 时间可以由TIMEOUT来控制),等你把空间的问题解决了,Oracle会继续刚才的操作。
想要使用这个功能,需要拥有resumable权限。
具体的语法:ALTER SESSION{ ENABLE RESUMABLE [ TIMEOUT integer ] [ NAME string ]| DISABLE RESUMABLE}
相关数据字典:USER_RESUMABLE and DBA_RESUMABLE
如果在SQL中不指定NAME,Oracle自动生成的NAME= ‘Userusername(userid), Session sessionid, Instance instanceid’.
在10g中,Oracle一样支持9i的上述方法,同时做了增强。
-
增加了一个resumable_timeout的参数
该参数可以在system和session level级均可以修改.对 db,每个instance可以单独设置.而9i中只能在session一级中设置。比如:
SQL> show parameter resumable_timeout; NAME TYPE VALUE ------------------- -------------- ------- resumable_timeout integer 0 SQL> alter system set resumable_timeout=60;
- 对分布式事务的支持 在9i中,resumable特性不支持分布式事务。 10g中,这一限制已经去除。但是在一个分布式事务中,用户开启或者关闭resumable 特性或者变更resumable_timeout参数, 只对当前实例有影响;如果resumable 特性在远端的实例上开启,那么远端的会话会被暂停。
-
增加了一个监控的视图
在10g中,我们也可以通过DBA_OUTSTANDING_ALERTS 来查看当前正牌挂起状态的session.比如:
select object_name,object_type,reason,message_type,message_level from dba_outstanding_alerts where message_group='Space';
在exp/imp,expdp/impdp,sql*loader工具,同样也支持resumable操作,10G 之后是默认开启的. 具体可查看相关命令的帮助文档。