数据库被划分为若干个表空间,每一个表空间内保存一组相关的逻辑对象。每一个表空间由一个或者多个数据文件组成。oracle中的数据逻辑上存储在表空间里,物理上存储在属于该表空间的数据文件里。表空间是用户和物理存储结构之间的纽带。sql
下面介绍和表空间相关的一些概念。数据库
大文件表空间由一个单一的大文件构成,即表空间和数据文件是一一对应的。当大文件表空间配合OMF(oracle managed files)和ASM技术一块儿使用会大大减少DBA的管理工做,由于此时数据文件对用户彻底透明,无需关心底层的数据文件管理。markdown
小文件表空间是oracle默认的表空间形式,一个表空间能够由一个或者多个数据文件组成。oracle
本地管理和字典管理指的是表空间的区(extent)的管理模式(分配和回收)。性能
字典管理是经过sys方案里的数据字典表里的一些表来记录表空间的区的分配状况,因此不管是分配或者回收区,都产生不少的SQL语句,这些SQL语句称为递归SQL,而且这些递归SQL不少须要顺序执行。所以在字典管理表空间里执行DML操做可能会产生递归SQL,在有大量DML操做的状况下,这会产生严重的性能问题。spa
若是system表空间为本地管理表空间,则该数据库不能建立字典管理表空间,可是该数据库能够存在字典管理表空间,由于能够进行表空间迁移。日志
本地管理表空间(默认方式,且oracle强烈推荐)管理区的方式和字典管理有很大的不一样,每一个数据文件用一个位图来管理区,获取一个区只需将位图对应的位由0改成1,回收该区只需将该位由1改成0。这就消除了递归SQL,使得空间的分配和回收被大大加速了。code
当一个对象须要更多空间时,数据库是以区的形式分配给该对象的。该分配多大空间的区给一个对象由区大小分配模式决定,区大小分配模式分为两种,autoallocate模式和uniform模式。orm
autoallocate模式,这是oracle的默认分配模式,指的是oracle控制分配区应该是多大。对象
uniform模式,指的是全部的区都是统一的大小,默认是1M,能够经过size指定区的大小。
若是能够预先知道全部该表空间里的段的大小较接近,且以类似的增加速度增加,则可使用uniform模式,不然应该使用autoallocate模式。
总的来讲,通常状况下使用autoallocate模式就能够了。若是区段的数量太多,以致于影响了sql的执行效率,能够考虑使用uniform模式,设置大的size,以使区的数量降到合理范围内。
段空间管理指的是oracle怎么管理段里的数据块的空闲空间。
手动管理是遗留方式,不推荐使用。使用freelists,pctfree和pctused来管理段内的空闲空间,因为该模式自身的缘由,很容易引发竞争而引发性能问题。
自动管理(默认,且oracle强烈推荐),oracle利用位图块里的位图来跟踪段内的空闲空间。在该模式下只须要设置PCTFREE参数便可。
logging是默认值,绝大多数状况咱们也确实应该使用logging模式,使用nologging模式的机会很是少。
两种模式对于普通的DML是同样的,差异在于直接路径加载。如CTAS语句,如create table test as select * from emp,相较于logging而言,nologging产生的重作日志要少得多。
表空间有在线和离线两种状态。
--使tbs表空间在线
alter tablespace tbs online;
--使表空间tbs正常离线,不须要介质恢复
alter tablespace tbs offline normal;
--使表空间tbs暂时离线,须要介质恢复
alter tablespace tbs offline temporary;
--使表空间tbs当即离线,须要介质恢复
alter tablespace tbs offline immediate;
默认为read write表示可读可写。read only表示表空间只能读取,不能写入,对于某些特定目的,可能会颇有用,能够有效防止用户误操做致使数据损坏。
--使tbs表空间只读
alter tablespace tbs read only;
--使表空间tbs可读写
alter tablespace tbs read write;
这是平时使用的最多的一种,用于保存表和索引等持久数据的表空间。
--建立tbs表空间,本地管理,自动区大小模式,自动段空间管理,---数据文件tbs_o1.dbf初始大小为10M,自动增加,每次10M,最大可--以到1000M
--通常以该模板来建立表空间就能够了,根据本身的须要修改一下。
CREATE TABLESPACE tbs DATAFILE '/u01/oradata/orcl/tbs_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
--建立tbs1表空间,本地管理,统一区大小16M,自动段空间管理
CREATE TABLESPACE tbs1 DATAFILE '/u01/oradata/orcl/tbs1_01.dbf' SIZE 100M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M --建立tbs2表空间,大文件表空间,本地管理,自动区大小模式,自动段空间管理。 CREATE BIGFILE TABLESPACE tbs2 DATAFILE '/u01/oradata/orcl/tbs2_01.dbf' SIZE 100G --建立tbs3表空间,字典管理 CREATE TABLESPACE tbs3 DATAFILE '/u01/oradata/orcl/tbs3_01.dbf' SIZE 100M EXTENT MANAGEMENT DICTIONARY;
--增长数据文件
ALTER TABLESPACE tbs ADD DATAFILE '/u01/oradata/orcl/tbs_02.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;
还原表空间是一种特殊的表空间,只用于存储还原信息。
oracle的还原管理分为自动还原管理(默认、推荐)和手动还原管理(基本不会使用了)。
自动还原管理的配置也很是简单,只须要要将undo_management参数设置为auto,将undo_tablespace参数设置为已经建立好的还原表空间。
在自动还原管理下,虽然能够建立多个还原表空间,可是只有一个还原表空间其做用。当事务内的第一条DML语句运行时,系统为该事务在当前还原表空间分配一个还原段(undo segment),同时分配一个事务表。
注意,若是没有指定还原表空间,oracle会使用系统的撤销段(在system表空间里),一旦发现这种状况,应该立刻建立一个还原表空间,而且指定表空间。
还原表空间的建立和普通表空间是同样的,只是须要增长undo关键字。
--建立还原表空间tbs
CREATE UNDO TABLESPACE tbs DATAFILE '/u01/oradata/orcl/tbs_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M EXTENT MANAGEMENT LOCAL
主要用于存储临时表数据,对于排序和哈希密集型查询,须要在临时表空间里暂时存储排序和哈希数据。
临时表空间和普通表空间的区别在于,临时表空间必须是以uniform模式进行区大小管理
--建立临时表空间temp1,区大小为1M(默认状况)
CREATE TEMPORARY TABLESPACE temp1 TEMPFILE '/u01/oradata/orcl/temp1_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M; --建立临时表空间temp2,区大小为4M CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '/u01/oradata/orcl/temp2_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M --增长临时文件 ALTER TABLESPACE temp ADD TEMPFILE '/u01/oradata/orcl/temp1_02.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;
--删除表空间里的某个临时文件
ALTER DATABASE TEMPFILE '/u01/oradata/orcl/temp1_02.dbf' DROP INCLUDING DATAFILES;
--缩减临时表空间的大小
ALTER TABLESPACE temp1 SHRINK SPACE;
ALTER TABLESPACE temp1 SHRINK SPACE KEEP 100M;
--设置数据库的默认临时表空间
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp1;
--设置用户的临时表空间
ALTER USER scott TEMPORARY TABLESPACE temp1;
OMF主要是为了简化数据文件的管理工做,建立表空间时不须要指定datafile或者tempfile子句。OMF由三个参数控制,
数据文件,在线重作日志文件,控制文件和临时文件放在该目录下。
在线重作日志文件和控制文件的多路备份放在该目录下
若是没有设置DB_CREATE_ONLINE_LOG_DEST_n,则在线重作日志文件和控制文件的多路备份放在该目录下。
dba_tablespaces
dba_free_space
dba_segments
dba_data_files
dba_temp_files
database_properties
v$datafile
v$tempfile
v$filestat