-------表空间的介绍:
为了简化数据文件的管理,oracle 数据库中引入了表空间的概念。表空间是 oracle 数据库中最大的逻辑容器,一个表空间包含一个或多个数据文件。
数据库容量在物理上由数据文件大小与数量决定,在逻辑上由表空间大小与数量决定。
表空间主要具有下列属性:
》》表空间类型:分为永久性表空间(tablespace)
临时表空间(temp tablespace)
撤销表空间(undo tablespace)
3种类型。
》》表空间的管理方式:分为字典管理方式(dictionary)
本地管理方式(默认创建的表空间采用这种管理方式)(local)
》》区分配方式:在本地管理方式中,区的分配方式分为 自动分配方式(区默认采用这种方式)(autoallocate)
定制分配方式(unifrom)
》》段的管理方式:自动管理(默认采用这种管理方式)(auto)
手动管理(manual)
--------创建表空间:
在创建表空间的时候要指定表空间的类型、名称、数据文件、表管理方式、区管理方式、段管理方式。
1.创建永久性表空间
创建永久性表空间: create tablespace
设置表空间的管理方式:extent management
设置区的分配方式:autoallocate
uniform
设置段的管理方式:segment space management
《案例》
为数据库创建一个永久性表空间 HRTBS1 , 区自动扩展,段采用自动管理方式
SQL> create tablespace HRTBS1 datafile '........HRTBS_1.DBF' size 50M ;
备注:'........HRTBS_1.DBF' 表示:表空间 HRTBS1在磁盘中的数据文件的路径
《案例》
为数据库创建一个永久性表空间 HRTBS2 ,区定制分配,段采用自动管理方式:
SQL>create tablespace HRTBS2 datafile '......HRTBS_2.DBF' size 50M
extent management local uniform size 512K ;
《案例》
为数据库创建一个永久性表空间 HRTBS3 ,区自动扩展,段采用手动管理方式
SQL> create tablespace HRTBS3 datafile '.......HRTBS3.DBF' size 50M
segment space management manual;
《案例》
为数据库创建一个永久性表空间 HRTBS4 ,区定制分配,段采用手动管理方式
SQL> create tablespace HRTBS4 datafile '......HRTBS_4.DBF' size 50M
extent management local uniform size 512K
segment space management manual;
《案例》
为数据库创建一个永久性表空间 INDX , 区自动扩展,段采用自动管理方式,专门用于存储 HUMAN_RESOURCE 数据库中的索引数据
SQL>create tablespace INDX datafile '........INDX_1.DBF' size 50M;
2.创建大文件表空间:
一个大文件表空间只包含一个数据文件,该数据文件可以包含4G (2的32次)数据块。大文件表空间是为超大型数据库设计的。
《案例》
在案例数据库中创建一个大文件表空间,文件大小为 1GB ,区的分配采用定制方式。
create bigfile tablespace big_tbs datafile '.........big01.DBF' size 1G
uniform size 521K ;
注意:大文件表空间中段的管理只能采用自动管理方式,而不能采用手动管理方式。
3.创建临时表空间
临时表空间是指专门存储临时数据的表空间,这些临时数据在会话结束时会自动释放。在数据库实例运行过程中,执行排序等SQL 语句时会
产生大量的临时数据,而内存不足以容纳这么多数据,此时可以使用临时表空间集中管理临时数据,既提高了排序操作的并发度,又提高了存储
空间的管理效率。
创建临时表空间:create temporary tablespace
临时表空间包含的数据文件称为临时数据文件,用 tempfile 指定
《案例》
为案例数据库创建一个临时表空间 HRTEMP1
create temporary tablespace HRTEMP1 tempfile '........HRTEMP_1.DBF' size 20M
extent management local uniform size 15M;
为了避免临时表空间频繁分配与回收产生大量的碎片,临时表空间的区只能采用自动分配方式
在oracle 11g 数据库中,可以将一个或多个临时表空间组成一个临时表空间组。
《案例》
为案例数据库创建一个临时表空间 HRTEMP2 ,并放入临时表空间组 TEMP_GROUP 。同时,将临时表空间 HRTEMPS1 也放入该 TEMP_GROUP
中。
SQL>create temporary tablespace HRTEMP2 tempfile '......HRTEMP_2.DBF' size 20M
extent management local uniform size 15M
tablespace group TEMP_GROUP ;
SQL>alter tablespace HRTEMPS1 tablespace group TEMP_GROUP ;
4.创建撤销表空间:
从oracle 9i 开始,oracle数据库中引入撤销表空间,专门用于回退段的自动管理,由数据库自动进行回退段的创建、分配与优化。
创建本地管理的撤销表空间: create undo tablespace
《案例》
为案例数据库创建一个撤销表空间 HUNDO1
SQL>create undo tablespace HUNDO1 datafile '.....HUNDO_1.DBF' size 20M;
注意:撤销表空间的区只能采用自动分配方式
为了使用撤销表空间管理数据库的回退信息,需要将初始化参数 UNDO_MANAGEMENT 设置为 AUTO,
同时将初始化参数 UNDO_TABLESPACE 设置为指定的撤销表空间。
----------修改表空间的大小:
在oracle数据库中,表空间的大小是由其包含的数据文件的数量和大小决定的。因此,可以通过为表空间添加数据文件或改变已有数据文件的大小
改变表空间的容量大小。其中,改变数据文件的大小的方法有两种:一种是改变数据文件的可扩展性
另一种是重新设置数据文件的大小
1.为表空间添加数据文件:
为永久性表空间天添加数据文件:alter tablespace...add datafile
为临时表空间添加数据文件: alter tablespace ... add tempfile
需要注意的是:不能为大文件表空间添加数据文件,即不能通过添加数据文件的方式改变文件表空间的大小。
《案例》
向案例数据库的 USERS 表空间中添加一个大小为 10 MB 的数据文件。
SQL> alter tablespace USERS add datafile '.........USR02.DBF' size 10MB;
《案例》
向案例数据库的TEMP 表空间中添加一个大小为 5MB 的临时数据文件。
SQL>alter tablespace temp add tempfile '.......temp02.DBF' size 5MB;
注意:若指定的数据文件已经存在,可以使用 REUSE 子句进行覆盖。
2. 改变数据文件的扩展性:
如果在创建表空间或为表空间添加数据文件时没有指定 AUTOEXTEND ON 选项,则该数据文件的大小是固定的。如果为数据文件指定了
AUTOEXTEND ON 选项,则当数据文件被填满时,数据文件会自动扩展,即表空间是被扩展了。
《案例》
修改案例数据库 USERS 表空间的数据文件 USERS02.DBF 为自动增长方式:
SQL> alter datatase datafile '.....USERS02.DBF' autoextend on next 1M maxsize unlimited;
取消HUMAN_RESOURCE 数据库 USERS 表空间的数据文件 USERS02.DBF 的自动增长方式
SQL> alter database datafile '........USERS02.DBF' autoextend off;
3.重新设置数据文件的大小:
改变表空间已有数据文件的大小: alter database datafile ' .....DBF' resize
将HUMAN_RESOURCE 数据库 USERS 表空间数据文件的 USER02.DBF 大小设置为 8MB
SQL> alter database datafile '.....USER02.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 tablespace ...read only; ,此时只可以读该表空间中的数据,而不能修改表空间中的数据。
例如:SQL>alter tablespace users read only;
将表空间由只读状态恢复为 读/写状态:alter tablespace ... read write;
例如:SQL>alter tablespace users read write;
-----------设置默认表空间:
在创建数据库用户时,如果没有使用 default tablespace 选项指定默认(永久)表空间,则该用户使用数据库的默认表空间;
如果没有使用 default temporary tablespace 选项指定默认临时表空间,则该用户使用数据库默认的临时表空间。
(1)、 设置数据库默认表空间:alter database default tablespace
例如:将HRTBS1表空间设置为案例数据库的默认表空间
SQL>alter database default tablespace HRTBS1;
(2)、设置数据库的默认临时表空间:alter database default temporary tabelspace
例如:将HRTEMP1 表空间设置为 HUMAN_RESOURCE 数据库的默认临时表空间
SQL>alter database default temporary tablespace HRTEMP1;
(3)、可以将临时表空间组作为数据库的默认临时表空间
例如:将 temp_group 临时表空间组设置为 HUMAN_RESOURCE 数据库的默认临时表空间
SQL>alter database default temporary tablespace temp_group;
-------------表空间的备份:
对数据库进行热备份(联机备份)时,需要分别对表空间进行备份。对表空间进行备份的基本步骤如下:
(1)、使用 alter tablespace .... begin backup; 语句将表空间设置为备份模式
(2)、在操作系统中备份表空间所对应的数据文件
(3)、使用 alter tablespace....end backup; 语句将结束表空间的备份模式
《案例》
备份数据库的HRTBS1 表空间:
SQL>alter tablespace HRTBS1 begin backup;
复制 HRTBS1 表空间的数据文件 HRTBS1_1.DBF 到目标位置;
SQL>alter tablespace HRTBS1 end backup;
--------------删除表空间:
如果不再需要一个表空间及其内容,就可以将该表空间从数据库中删除。除了SYSTEM 表空间和 SYSAUX 表空间 外,其他表空间都可以
删除。一旦表空间被删除,该表空间中的所有数据将永久性丢失。如果表空间中的数据正在被使用,或者表空间中包含未提交事务的回退信息,
则该表空间不能被删除。
(1)、 删除表空间及其内容:drop tablespace ... including contents
《案例》
删除案例数据库的 HRUNDO1 表空间:
SQL>drop tablespace HRUNDO1 including contents;
通常,删除表空间时,oracle 系统仅仅在控制文件和数据字典中删除与表空间和数据文件相关的信息,而不会删除操作系统中相应的数据文件。
(2)、如果要在删除表空间的同时,删除操作系统中对应的数据文件,则需要使用 including contents and datafiles
《案例》
删除案例数据库的 HRUNDO1 表空间,同时删除其所对应的数据文件。
SQL> drop tablespace HRUNDO1 including contents and datafiles;
(3)、如果其他表空间中的约束(外键)引用了要删除表空间中的主键或唯一性约束,则还需要使用 cascade constraints 子句删除完整性约束,否则
删除表空间时会报告错误。
《案例》
删除案例数据库的 HRUNDO1 表空间,同时删除其所对应的数据文件,以及其他表空间与 HRUNDO1 表空间相关的参照完整性约束。
SQL>drop tablespace HRUNDO1 including contents and datafiles cascade constraints;
---------------查询表空间信息:
在oracle 11g 中,可以查询数据字典视图 V$TABLESPACE 、 DBA_TABLESPACES 、DBA_TABLESPACE_GROUPS 等获取表空间信息。
《案例》
查询案例数据库中各个表空间的名称、区管理方式、段管理方式、表空间类型等信息。
SQL> select TABLESPACE_NAME , EXTENT_MANAGEMENT , ALLOCATION_TYPE , CONTENTS from DBA_TABLESPACES;