什么是表空间?
为了简化对数据文件的管理,oracle数据库引入了表空间的概念。表空间是数据库中最大的逻辑容器,一个表空间包含一个或者多个数据文件。数据容量在物理上由数据文件大小与数量决定,在逻辑上由表空间大小和数量决定。
表空间具有如下属性:
表空间类型:分为永久性表空间(PERMANET TABLESPACE)、临时表空间(TEMP TABLESPACE)、和撤销表空间(UNDO TABLESPACE)三种类型。
表空间管理方式:分为字典管理方式(DICTIONARY)和本地管理方式(0LOCAL)两种,默认创建的表空间采用本地管理方式。
区分配方式:在本地管理方式中,区分配的方式为自动分配(AUTOALLOCATE)和定制分配(UNIFORM)两种方式,区默认采用自动分配方式。
段管理方式:分为自动管理(AUTO)和手动管理(MANUAL)两种方式,默认采用自动管理方式。
在创建表空间时需要指定表空间的类型、名称、数据文件、表管理方式、区分配方式及段管理方式。
创建永久性表空间
可以使用 CREATE TABLESPACE 语句创建永久性表空间,使用EXTENT MANAGERMENT子句设置表空间的管理方式,使用AUTOALLOCATE或者UNIFORM字句设置区分配方式,使用SEGMENT SPACE MANAGEMENT字句设置段的管理方式。
例1:创建永久性表空间OS,区自动扩展,段采用自动管理方式。
SQL> CREATE TABLESPACE OS DATAFILE '/home/oracle/oradata/orcl/OS.DBF' SIZE 50M;
例2:创建永久性表空间OS2,区定制分配,段采用自动管理方式。
SQL> CREATE TABLESPACE OS1 DATAFILE '/home/oracle/oradata/orcl/OS1.DBF' SIZE 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K;
例3: 创建永久性表空间OS3,区自动扩展,段采用手动管理方式。
SQL> CREATE TABLESPACE OS3 DATAFILE '/home/oracle/oradata/orcl/OS3.DBF' SIZE 50M SEGMENT SPACE MANAGEMENT MANUAL;
例4: 创建永久性表空间OS4,区定制分配,段采用手动管理方式。
SQL> CREATE TABLESPACE OS4 DATAFILE '/home/oracle/oradata/orcl/OS4.DBF' SIZE 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K; SEGMENT SPACE MANAGEMENT MANUAL;
例5: 创建永久性表空间INDX,区自动扩展,段采用自动管理方式,专门用于存储ORCL数据库中的数据索引数据
SQL> CREATE TABLESPACE INDX DATAFILE '/home/oracle/oradata/orcl/INDEX01.DBF' SIZE 50M;
例6:创建永久性表空间PAUSER,区自动扩展,段自动管理方式,数据超过500M后自动扩展100M;
SQL> CREATE TABLESPACE PAUSER DATAFILE '/home/oracle/oradata/orcl/PAUSER.DBF' SIZE 500M AUTOEXTEND ON NEXT 100M;
创建大文件表空间
一个大文件表空间只包含一个数据文件,该数据文件可包含4G(232)个数据块,大文件表King就是为超大型数据块设计的。
例:创建一个大文件表空间,文件大小为1GB,区自动分配
SQL> CREATE BIGFILE TABLESPACE big_tbs DATAFILE '/home/oracle/oradata/orcl/big01.dbf' SIZE 1G UNIFORM SIZE 512K;
3 创建临时表空间
临时表空间是指专门存储临时数据的表空间,这些临时数据在会话结束时会自动释放。在数据库实例运行过程中,执行排序等SQL语句时会产生大量的临时数据,而内存不足以容纳这么多数据,此时可以使用临时表空间集中管理临时数据,既提高了排序操作的并发度,也提高的存储空间的管理效率。
可以使用CREATE TEMPORARY TABLESPACE 语句创建临时表空间。临时表空间包含的数据文件称之为临时数据文件,用TEMPFILE字句指定。
例1:创建一个临时表空间OSTEMP1.
SQL> CREATE TEMPORARY TABLESPACE OSTEMP1 TEMPFILE '/home/oracle/oradata/orcl/OSTEMP.DBF' SIZE 20M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 15M; 或者 : SQL>CREATE TEMPORARY TABLESPACE OSTEMP1 TEMPFILE '/home/oracle/oradata/orcl/OSTEMP1_1.DBF' SIZE 50M AUTOEXTEND ON NEXT 50M MAXSIZE 20480M EXTENT MANAGMENT LOCAL;
例2: 创建临时表空间OSTEMP2,并放入临时表空间组TEMP_GROUP.同时将表空间OSTEMP1也放入TEMP_GROUP中。
SQL> CREATE TEMPORARY TABLESPACE OSTEMP2 TEMPFILE '/home/oracle/oradata/orcl/OSTEMP2_1.DBF' SIZE 20M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 15M TABLESPACE GROUP TEMP_GROUP; SQL> ALTER TABLESPACE OSTEMP1 TABLESPACE GROUP TEMP_GROUP;
创建撤销表空间
从oracle9i开始,oracle数据库中引入撤销表空间,专门用于回退段的自动管理,由数据库自动进行回退段的创建、分配、优化。可以使用CREATE UNDO TABLESPACE 语句创建本地管理撤销表空间。
例:创建一个撤销表空间UNDO1
SQL> CREATE UNDO TABLESPACE UNDO1 DATAFILE '/home/oracle/oradata/orcl/UNDO1_1.DBF' SIZE 20M;
注意:撤销表空间只能采用自动分配方式
为了使用撤销表空间数据库的回退信息,需要将初始化参数设置为UNDO_MANAGEMENT 设置为AUTO,同时将初始化参数UNDO_TABLESPACE设置为指定的撤销表空间。
修改表空间大小
在oracle数据库中,表空间的大小是由其包含的数据文件的数量和大小决定的,因此可以通过为表空间添加数据文件或改变已有数据文件的大小改变表空间文件的大小。其中改变数据文件大小有两种方法,一是改变数据文件的可扩展性,另一种是重新设置文件的大小。
1、为表空间添加数据文件:
可以使用ALTER TABLESPACE ...ADD DATAFILE 语句为永久表空间添加数据文件,使用ALTER TABLESPACE ...ADD TEMPFILE语句为临时表空间添加临时数据文件。需要注意的是,不能为大文件表空间添加数据文件,既不能通过添加数据文件的方式改变大文件表空间的大小。
例1:向数据库中的OS表空间添加一个大小为10M的数据文件
SQL> ALTER TABLESPACE OS1 ADD DATAFILE '/home/oracle/oradata/orcl/OS1.DBF' SIZE 10M;
例2:向TEMP表空间添加一个大小为5MB的临时数据文件
SQL> ALTER TABLESPACE OSTEMP1 ADD DATAFILE '/home/oracle/oradata/orcl/OOSTEMP.DBF' SIZE 5M;
注意:如果指定数据文件已经存在,使用REUSE字句进行覆盖
2、改变数据文件的扩展性
如果在创建表空间或为表空间添加数据文件时没有指定AUTOEXTEND ON选项,则该数据的文件大小是固定的。如果为数据文件指定了AUTOEXTEND ON选项,则该数据文件被填满时,数据文件会自动扩展,即表空间被扩展了。
例1:修改数据库OS1表空间的数据文件OS1.DBF
SQL> ALTER DATABASE DATAFILE '/home/oracle/oradata/orcl/OS1.DBF' AUTEEXTEND ON 100M MAXSIZE UNLIMITED;
例2:取消OS1的表空间数据文件OS1.DBF自动增长
SQL> ALTER DATABASE DATAFILE '/home/oracle/oradata/orcl/OS1.DBF' AUTEEXTEND ON;
3、重新设置数据文件大小
可以使用ALTER DATABASE DATAFILE ...RESIZE 改变表空间已有数据文件大小
例:将数据库OS表空间的数据文件OS.DBF改为10M
SQL> ALTER DATABASE DATAFILE '/home/oracle/oradata/orcl/OS.DBF' RESIZE 10M;
修改表空间的可用性
表空间的可用性是指表空间脱机或者联机操作。除了SYSTEM表空间、存放在线回退信息的撤销表空间和临时表空间不可以脱机外,其他表空间都可以设置为脱机状态。将某个表空间设置为脱机状态时,属于该表空间的所有数据文件处于脱机状态。
可以使用ALTER TABLESPACE...OFFLINE将表空间脱机,例如:
SQL> ALTER TABLESPACE OS OFFLINE;
可以使用ALTER TABLESPACE...ONLINE将脱机的表空间联机,例如:
SQL> ALTER TABLESPACE OS ONLINE;
修改表空间的读/写性能
在数据库运行过程中,可以根据需要将表空间设置为只读状态,不过并不是所有表空间都可以设置为只读状态,只有满足以下条件的表空间给才可以设置为只读状态
表空间必须处于联机状态;
表空间不能包含任何活动的会退段;
SYSTEM表空间、辅助系统表空间SYSAUX、当前使用的撤销表空间(UNDO)和当前使用的临时表空间(TEMP)不能设置为只读状态;
如果表空间正在进行联机数据备份,则不能将该表空间设置为只读状态;
可以使用ALTER TABLESPACE ...READ ONLY 语句将表空间设置为只读状态,此时只可以读该表空间的数据,而不能修改该表空间的数据。例如:
SQL> ALTER TABLESPACE OS READ ONLY;
可以使用ALTER TABLESPACE ..READ WRITE将表空间的只读状态恢复为读写状态,例如:
SQL> ALTER TABLESPACE OS READ WRITE;
表空间备份
对数据进行热备份(联机备份)时,需要分别对表空间进行备份,对表空间进行备份的基本步骤为:
1、使用ALTER TEABLESPACE ..BEGIN BACKUP语句将表空间设置为备份模式;
2、在操作系统中备份表空间所对应的数据文件;
3、使用ALTER TABLESPACE ..END BACKUP语句结束表空间的备份模式
例:备份数据库OS表空间
SQL> ALTER TABLESPACE OS BEGIN BACKUP;
复制OS 表空间数据文件OS.DBF到目标位置
SQL>ALTER TABLESPACE OS END BACKUP;
删除表空间
如果不再需要一个表空间及内容,就可以将该表空间从数据库中删除,除了SYSTEM表空间和SYSAUX表空间外,其他表空间都可以删除。一旦表空间被删除,该表空间的所有数据将永久性丢失,如果表空间的数据正在被使用,或者表空间中包含为提交事务的回退信息,则该表空间不能被删除。
使用DROP TABLESPACE .. INCLUDING CONTENTS语句可以删除表空间及其内容
例:删除数据库OS的表空间
SQL> DROP TABLESPACE OS INCLUDING CONTENTS;
通常,删除表空间时,oracle系统仅仅在控制文件和数据字典中删除与表空间和数据文件相关信息,而不会删除操作系统中相应的数据文件。如果要删除表空间的同时,删除操作系统中对应的数据文件,则需要使用INCLUDING CONTENTS AND DATAFILES子句。
例:删除数据库中OS1的表空间,同时删除其对应的数据文件
SQL> DROP TABLESPACE OS1 INCLUDING CONTENTS AND DATAFILES;
如果其他表空间中的约束(外键)引用了要删除表空间中的主键或唯一性约束,则还需要使用CASCADE CONSTRAINTS子句删除完整性约束,否则删除表空间时会报告错误。
例:删除数据库中OS3的表空间,同时删除其对应的数据文件,同时删除其所对应的完整性约束
SQL> DROP TABLESPACE OS3 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
查询表空间信息
在oracle11中,可以查询数据字典视图V$TABLESPACE、DBA_TABLESPACES、DBA_TABLESPACE_GROUPS等获取表空间信息
例:查询数据库中各个表空间的名称、区管理方式、段管理方式、表类型等信息
SQL> SELECT TABLESPACE_NAME,EXTENT_MANAGEMENT,ALLOCATION_TYPE,CONTENTS FROM DBA_TABLESPACES; TABLESPACE_NAME EXTENT_MAN ALLOCATIO CONTENTS ------------------------------ ---------- --------- --------- SYSTEM LOCAL SYSTEM PERMANENT SYSAUX LOCAL SYSTEM PERMANENT UNDOTBS1 LOCAL SYSTEM UNDO TEMP LOCAL UNIFORM TEMPORARY USERS LOCAL SYSTEM PERMANENT EXAMPLE LOCAL SYSTEM PERMANENT OS LOCAL SYSTEM PERMANENT OS1 LOCAL UNIFORM PERMANENT OS3 LOCAL SYSTEM PERMANENT OS4 LOCAL UNIFORM PERMANENT INDX LOCAL SYSTEM PERMANENT TABLESPACE_NAME EXTENT_MAN ALLOCATIO CONTENTS ------------------------------ ---------- --------- --------- PAUSER LOCAL SYSTEM PERMANENT BIG_TBS LOCAL UNIFORM PERMANENT TEMPFILE LOCAL UNIFORM TEMPORARY OSTEMP2 LOCAL UNIFORM TEMPORARY OSTEMP1 LOCAL UNIFORM TEMPORARY UNDO1 LOCAL SYSTEM UNDO
!评论内容需包含中文