一.表空间介绍
为了简化对数据文件的管理,Oracle数据库中引入了表空间的概念。表空间是Oracle数据库中的最大逻辑容器,一个表空间包含一个或多个数据文件。数据库容量在物理上由数据文件大小与数量决定,在逻辑上由表空间大小与数量决定。
表空间主要具有下列属性:
表空间类型:分为永久性表空间(PERMANENT TABLESPACE)、临时表空间(TEMP TABLESPACE)和撤销表空间(UNDO TABLESPACE)3种类型
表空间的管理方式:分为字典管理方式(DICTIONAR)和本地管理方式(LOCAL)两种。默认创建的表空间采用本地管理方式。
区分配方式:在本地管理方式中,区的分配方式分为自动分配(AUTOALLOCATE)和定制分配(UNIFORM)两种方式。区默认采用自动分配方式。
段的管理方式:分为自动管理(AUTO)和手动管理(MANUAL)两种方式。默认采用自动管理方式。
二.创建表空间
在创建表空间时需要指定表空间的类型、名称、数据文件、表空间管理方式、区的分配方式及段管理方式。
1.创建永久性表空间
可以使用 CREATE TABLESPACE语句创建久性表空间,使用EXTENT MANAGEMENT子句设置表空间的管理方式,使用AUTOALLOCATE或UNIFORM子句设置区的分配方式,数据库存使用SEGMENT SPACE MANAGEMENT子句设置段的管理方式。
【例1】为案例数据库创建一个永久性的表空间HTBS1,区自动扩展,段采用自动管理方式。
SQL>CREATE TABLESPACE HRTBS1 DATAFILE 'D: APPADMINISTRATORORADATAHUMAN_RESOURCEHRTBS1_. DBF' SIZE 50M;
【例2】为案例数据库创建一个永久性的表空间HRTBS2,区定制分配,段采用手动管理方式。
SQL>CREATE TABLESPACE HRTBS4 DATAFILE 'D: APPADMINISTRATOR ORADATAHUMAN_RESOURCEHRTBS4_1. DBE' SIZE 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K SEGMENT SPACE MANAGEMENT MANUAL;
2.创建大文件表空间
一个大文件表空间只包含一个数据文件,该数据文件可以包含4G个数据块。大文件表空间是为超大型数据库设计的。
【例3】在案例数据库中创建一个大文件表空间,文件大小为1GB,区的分配采用定制方式
SQL>CREATE BIGFILE TABLESPACE big_tbs DATAFILE 'D: APPADMINISTRATOR ORADATAHUMAN_RESOURCEig01.dbf'SIZE 1G UNIFORM SIZE 512K;
注意:大文件表空间中段的管理只能采用自动管理方式,而不能采用手动管理方式
3.创建临时表空间
临时表空间是指专门存储临时数据的表空间,这些临时数据在会话结束时会自动释放。在数据库实例运行过程中,执行排序等SQL语句时会产生大量的临时数据,而内存不足以容纳这么多数据,此时可以使用临时表空间集中管理临时数据,既提高了排序操作的并发度,又提高了存储空间的管理效率。可以使用CREATE TEMPORARY TABLESPACE语句创建临时表空间。临时表空间包含的数据文件称为临时数据文件,用TEMPFILE子句指定。
【例4】为案例数据库创建一个临时表空间 HRTEMP1
SQL>CREATE TEMPORARY TABLESPACE HRTEMP1 TEMPFILE ‘D:APPADMINISTRATORORADATAHUMAN_RESOURCEHRTEMP1_1. DBF' SIZE 20M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 15M;
为了避免临时空间频繁分配与回收时产生大量碎片,临时表空间的区只能采用自动分配方式。
在 Oraclelg数据库中,可以将一个或多个临时表空间组成一个临时表空间组。
【例5】为案例数据库创建一个临时表空间HRTEMP2,并放入临时表空间组TEMP_GROUP同时,将临时表空间HRTEMP1也放入该TEMP_GROUP中。
SQL>CREATE TEMPORARY TABLESPACE HRTEMP2 TEMPFILE ‘D: APPADMINISTRATORORADATA HUMAN_RESOURCEHRTEMP2_1. DBF' SIZE 20M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 15M TABLESPACE GROUP TEMP _GROUP; SQL>ALTER TABLESPACE HRTEMP1 TABLESPACE GROUP TEMP_GROUP;
4.创建撤销表空间
从Oracle9i开始,Oracle数据库中引入撤销表空间,专门用于回退段的自动管理,由数据库自动进行回退段的创建、分配与优化可以使用CREATE UNDO TABLESPACE语句创建本地管理的撤销表空间。
【例6】】为案例数据库创建一个撤销表空间 HRUNDO1
SQL>CREATE UNDO TABLESPACE HRUNDO1 DATAFILE D: APPADMINISTRATORORADATAHUMAN RESOURCEHRUNDO1_1.DBP’SIZE 20M;
注意:撤销表空间的区只能采用自动分配方式。
为了使用撤销表空间管理数据库的回退信息,需要将初始化参数UNDO_MANAGEMENT设置为AUTO,同时将初始化参数UNDO_TABLESPACE设置为指定的撤销表空间。
三.修改表空间大小
修改表空间大小在Oracle数据库中,表空间的大小是由其包含的数据文件的数量和大小决定的。因此,可以通过为表空间添加数据文件或改变已有数据文件的大小改变表空间的容量大小。其中,改变数据文件大小的方法有两种,一种是改变数据文件的可扩展性,另一种是重新设置数据文件的大小
1.为表空间添加数据文件
可以使用ALTER TABLESPACE...ADD DATAFILE语句为永久表空间添加数据文件,使用ALTER TABLESPACE...ADD TEMPFILE语句为临时表空间添加临时数据文件。需要注意的是,不能为大文件表空间添加数据文件,即不能通过添加数据文件的方式改变大文件表空间的大小。
【例7】向案例数据库的USERS表空间中添加一个大小为10MB的数据文件。
SQL>ALTER TABLESPACE USERS ADD DATAFILE 'D: APPADMINISTRATORORADATAHUMAN RESOURCE USERS02.DBF' SIZE 10M;
【例8】向案例数据库的TEMP表空间中添加一个大小为5MB的临时数据文件。
SQL>ALTER TABLESPACE TEMP ADD TEMPFILE 'D: APPADMINISTRATORORADATA HUMAN RESOURCETEMP02 DBP'SIZE 5M;
注意:若指定的数据文件已经存在,可以使用REUSE子句进行覆盖
2.改变数据文件的扩展性
如果在创建表空间或为表空间添加数据文件时没有指定 AUTOEXTEND ON选项,则该数据文件的大小是固定的。如果为数据文件指定了 AUTOEXTEND ON选项当数据文件被填动分配方式满时,数据文件会自动扩展,即表空间被扩展了。
【例9】修改案例数据库USERS表空间的数据件 USERS02.DBF为自动增长方式。
SQL>ALTER DATABASE DATAFILE 'D: APPADMINISTRATORORADATAHUMAN_RESOURCEUSERS02.DBE' AUTOEXTEND ON NEXT IM MAXSIZE UNLIMITED;
【例10】取消HUMAN_RESOURCE数据库USERS表空间的数据文件 USERS02.DBF为自动增长方式。
SQL>ALTER DATABASE DATAFILE 'D: APPADMINISTRATORORADATAHUMAN_RESOURCEUSERS02.DBF' AUTOEXTEND OFF;
3.重新设置数据文件的大小
可以使用 ALTER DATABASE DATAFILE....RESIZE改变表空间已有数据文件的大小。
【例11】将 HUMAN_RESOURCE数据库USERS表空间的数据文件USERS02.DBF大小设置为8MB。
SQL>ALTER DATABASE DATAFILE 'D: APPADMINISTRATORORADATAHUMAN_RESOURCEUSERS02.DBF'RESIZE 8M;
四.修改表空间的可用性
表空间的可用性是指表空间脱机或联机操作。除了SYSTEM表空间、存放在线回退信息的撤销表空间和临时表空间不可以脱机外,其他表空间都可以设置为脱机状态。将某个表空间设置为脱机状态时,属于该表空间的所有数据文件都处于脱机状态。
可以使用 ALTER TABLESPACE....OFFLINE将表空间脱机,例如:
SQL>ALTER TABLESPACE USERS OFFLINE;
因此,可以使用 ALTER TABLESPACE...ONLINE语句将脱机的表空间联机,例如:
SQL>ALTER TABLESPACE USERS ONLINE;
五.修改表空间的读/写性
在数据库运行过程中,可以根据需要将表空间设置为只读状态。不过并不是所有的表空间都可以设置为只读状态,只有满足下列条件的表空间才可以设置为只读状态:
●表空间必须处于联机状态;
●表空间中不能包含任何活动的回退段;
●系统表空间SYSTEM、辅助系统表空间SYSAUX、当前使用的撤销表空间(UNDO)和当前使用的临时表空间(TEMP)不能设置为只读状态;
●如果表空间正在进行联机数据备份,则不能将该表空间设置为只读状态。可以使用ALTER TABLESAPCE...READ ONLY语句将表空间设置为只读状态,此时只可以读该表空间中的数据,而不能修改该表空间中的数据。
例如:
SQL>ALTER TABLESPACE USERS READ ONLY:
可以使用 ALTER TABLESPACE ...READ WRITE语句将表空间由只读状态恢复为读/写状态。例如:
SQL>ALTER TABLESPACE USERS READ WRITE;
六.设置默认表空间
在创建数据库用户时,如果没有使用 DEFAULT TABLESPACE选项指定默认(永久)表空间,则该用户使用数据库的默认表空间;如果没有使用 DEFAULT TEMPORARY TABLESPACE选项指定默认临时表空间,则该用户使用数据库的默认临时表空间。在Oracle11g数据库中,数据库的默认表空间为USERS表空间,默认的临时表空间为TEMP表空间。
可以使用 ALTER DATABASE DEFAULT TABLESPACE语句设置数据库默认表空间。
【例12】将HRTBSI1表空间设置为案例数据库的默认表空间。
SQL>ALTER DATABASE DEFAULT TABLESPACE HRTBS1;
可以使用 ALTER DATABASE DEFAULT TEMPORARY TABLESPACE语句设置数据库的默认临时表空间。
可以将临时表空间组作为数据库的默认临时表空间。
【例13】将temp_group临时表空间组设置为 HUMAN_RESOURCE数据库的默认临时表空间。
SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_group;
七.表空间的备份
对数据库进行热备份(联机备份)时,需要分别对表空间进行备份。对表空间进行备份的基本步骤为:
(1)使用ALTER TABLESPACE...BEGIN BACKUP语句将表空间设置为备份模式;
(2)在操作系统中备份表空间所对应的数据文件;
(3)使用ALTER TABLESPACE...END BACKUP语句结束表空间的备份模式。
【例14】备份案例数据库的HRTBS1表空间。
SQL>ALTER TABLESPACE HRTBS1 BEGIN BACKUP;
复制 HRTBS1表空间的数据文件 HRTBS1_1.DBF到目标位置。
SQL>ALTER TABLESPACE HRTBS1 END BACKUP;
八.删除表空间
如果不再需要一个表空间及其内容,就可以将该表空间从数据库中删除。除了SYSTEM表空间和 SYSAUX表空间外,其他表空间都可以删除。一旦表空间被删除,该表空间中的所有数据将永久性丢失。如果表空间中的数据正在被使用,或者表空间中包含未提交事务的回退信息,则该表空间不能删除。
使用DROP TABLESPACE....INCLUDING CONTENTS语句可以删除表空间及其内容。
【例15】删除案例数据库的 HRUNDO11表空间。
SQL>DROP TABLESPACE HRUNDO1 INCLUDING CONTENTS;
通常,删除表空间时, Oracle系统仅仅在控制文件和数据字典中删除与表空间和数据文件相关的信息,而不会删除操作系统中相应的数据文件。如果要在删除表空间的同时,删除操作系统中对应的数据文件,则需要使用 INCLUDING CONTENTS AND DATAFILES子句
【例16】删除案例数据库的HRUNDO1表空间,同时删除其所对应的数据文件。
SQL>DROP TABLESPACE HRUNDO1 INCLUDINO CONTENTS AND DATAFILES;
如果其他表空间中的约束(外键)引用了要删除表空间中的主键或唯一性约束,则还需要表使用 CASCADE CONSTRAINTS子句删除参照完整性约束,否则删除表空间时会报告错误。
【例17】删除案例数据库的HRUNDOI1表空间,同时删除其所对应的数据文件,以le其他表空间中与 HRUNDOl表空间相关的参照完整性约束。
SQL>DROP TABLESPACE HRUNDO1 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
九.查询表空间信息
在Oracle11g中,可以查询数据字典视图 V$TABLESPACE, DBA_TABLESPACES ,DBA_TABLESPACE_GROUPS等获取表空间信息。
【例18】查询案例数据库中各个表空间的名称、区的管理方式、段的管理方式、表空间类型等信息。
SQL>SELECT TABLESPACE NAME, EXTENT_MANAGEMENT, ALLOCATION_TYPE, CONTENTS FROM DBA_TABLESPACES;