Oracle --- 表空间

一、Oracle表空间概述

表空间是Oracle数据库中最大的逻辑结构。它提供了一套有效组织数据的方法,是组织数据和进行空间分配的逻辑结构,可以将表空间看做是数据库对象的容器。检点第说,表空间就是一个或多个是数据文件(物理文件)的集合(逻辑文件),所有的数据对象都被逻辑地存放在指定的表空间中。

 

Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle中信息存储的最大逻辑单元,其下还包含有段、区、数据块等逻辑数据类型。表空间是在数据库中开辟的一个空间,用于存放数据库的对象,一个数据库可以由多个表空间组成。可以通过表空间来实现对Oracle的调优。(Oracle数据库独特的高级应用)

 

一个数据库通常包括SYSTEM、SYSAUX和TEMP三个默认表空间,一个或多个临时表空间,还有一个撤销表空间和几个应用程序专用的表空间。可以通过创建新的表空间来满足需求,创建时需要决定表空间的类型。

 

 

二、Oracle表空间类型

1、系统表空间(System tablespace)

系统表空间包括SYSTEM和SYSAUX表空间,系统表空间是所有数据库必须且自动创建的,一般存放Oracle的数据字典及相应数据。

 

2、永久表空间(Permanent tablespace)

永久表空间用于保存永久性数据,如系统数据、应用系统数据。每个用户都会被分配一个永久表空间,以便保存其相关数据。除了撤销表空间以外,相对于临时表空间而言,其他表空间就是永久表空间,如系统表空间。

 

3、临时表空间(Temporary tablespace)

由于Oracle工作时经常需要一些临时的磁盘空间,这些空间主要在查询带有排序(如Group by、Order by等)算法时使用,当用完后就立即释放,对记录在磁盘区的信息不再使用,因此称为临时表空间。一般安装之后只有一个TEMP临时表空间。

 

4、撤销表空间(Undo tablespace)

从Oracle 9i后,提供了一种全新的撤销空间管理方式,从而使得DBA能够很容易地管理撤销空间,即“自动撤销管理”。而与此相对应,通过回滚端进行撤销空间管理的方式呗称为“手工撤销管理”。自动撤销管理方式也称为SMU(System Managed Undo)方式,而回滚段管理方式称为RBU(Rollback Segments Undo)方式。在Oracle 11g数据库中,系统默认为弃用自动撤销表空间管理方式,同时也支持传统的回滚段管理方式。

 

在一个数据库中,只能采用一种撤销空间管理方式,而不能同时存在两种撤销空间管理方式。数据库采用哪一种撤销空间管理方式,是由参数UNDO_MANAGEMENT来确定的。如果设置该参数为“AUTO”,在启动数据库时使用SMU方式:如果设置为“MANUAL”,则在启动数据库时使用RBU方式,运行在自动撤销数据来隐式或显示的回退事务、提供数据的度已执行、帮助数据库从逻辑错误中恢复、实现闪回 查询(Flashback Query)。

 

注意:在SMU方式下,必须在数据库中黄建一个撤销表空间看,Oracle将利用撤销表空间来保存撤销记录。可以在创建数据库的同事建立一个默认的撤销表空间,也可以在数据库创建后再创建新的撤销表空间。

 

5、大文件表空间和小文件表空间

从Oracle 10g开始,Oracle引入了大文件表空间,这是一个新增的表空间类型。该类型的出现时存储能力有了显著的增强。大文件表空间不想传统的表空间那样由多个数据文件组成。

 

大文件表空间(bigfile tablespace)是为了超大型数据库而设计的,如果一个超大型数据库具有上千个数据文件,则更新数据文件头部信息(如check-point)的操作可能会花费很长时间。如果使用大文件表空间,可以使用哦大数据文件来减少文件的数量,从而减少更新的时间。

 

提示:一个大文件表空间对应一个单一的数据文件或临时文件,但是文件可以达到4G数据块大小。理论上当数据块代销为2KB时,大文件表空间可以达到8TB;当数据快大小为4KB时,大文件表空间可以达到32TB。在实际环境中,者还会受到操作系统的文件系统的限制。

 

小文件表空间(smallfile tablespace)是之前Oracle表空间在Oracle 11g中的新名称,是默认创建的表空间的类型。在小文件表空间中可以防止多达1022个数据文件,一个数据库最多可以防止64K个数据文件。SYSTEM和SYSAUX表空间总是被创建为小文件表空间。

 

 

三、Oracle表空间状态

出于不同的使用需求,对表空间设置了不同的状态。通过该表表空间的状态,可以控制表空间的可用性和安全性,也可以为相关的备份恢复等工作提供保障。表空间有以下几种状态:

1、读写(Read-Write)状态

这是表空间的默认状态。任何具有表空间配额并拥有相关权限的用户均可读写表空间的数据。

 

2、只读(Read-Only)状态

如果将表空间设置为只读状态,则任何用户(包括DBA)均无法向表空间写入数据,也无法修改表空间中的现有数据,这种限制和权限无关。

 

只读状态可以使表空间的数据不被修改,即仅能SELECT,而无法进行INSERT、UPDATE或是DELETE操作。只读状态一方面对数据提供了保护,另一方面对数据库中设置静态数据非常有好处。我们可以将不能被修改的静态数据保存在一个单独的表空间中,并将这个表空间设置为只读状态,这样既能够提高数据的安全性,又能够减轻DBA的管理和维护的负担。

 

3、脱机(Offline)状态

在有多个应用表空间的数据库中,DBA可以通过将某个应用表空间设置为脱机状态,是表空间暂时不被用户访问。如果需要访问该表空间时,必须将脱机状态设置为联机状态。这样的设置增强了表空间的可用性,并提高了数据库管理的灵活性。

 

注意:SYSTEM表空间不能被何止为只读状态和脱机状态,因为在数据库运行过程中始终需要SYSTEM表空间数据的支持;另外,零食表空间也不能设置为只读状态。

 

 

四、Oracle表空间作用

对Oracle数据库来说,引入表空间概念具有以下作用:

  • 控制用户所暂用的控件配额。
  • 控制数据库所暂用的磁盘空间。
  • 可以将表空间设置成只读状态而保证大量的静态数据不被修改。
  • 能够将一个表的数据和这个表的索引数据分别存储在不同的表空间中,也可以提高数据库的I/O性能。
  • 可通过其将不同表的数据、分区表的不同分区的数据存储在不同的表空间中,可以提高数据库的I/O性能,并有利于进行数据库的部分备份和恢复等管理工作。
  • 表空间提供了一个备份和恢复的单位,Oracle提供了按表空间备份和恢复的功能。

 

五、Oracle表空间操作

1、查看system用户的默认表空间和临时表空间:

 

select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE 
from dba_users 
where username='SYSTEM';

 


2、查看system用户的默认永久表空间:

 

 

 

 

SELECT PROPERTY_NAME, PROPERTY_VALUE 
FROM DATABASE_PROPERTIES;

 

 

 

 

 

3、查看默认的TEMP表空间:

 

  • 系统管理员:

 

 

SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';

 

 

 

  • 所有用户:

 

 

SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS

 

 

 

 

 

4、查看默认的表空间类型:

 

SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME='DEFAULT_TBS_TYPE';

 

 

 

 

 

5、查看表空间使用情况:

 

SELECT A.TABLESPACE_NAME                     AS TABLESPACE_NAME, 
        ROUND(A.BYTES/(1024*1024*1024),2)    AS "TOTAL(G)"     , 
        ROUND(B.BYTES/(1024*1024*1024),2)    AS "USED(G)"      , 
        ROUND(C.BYTES/(1024*1024*1024),2)    AS "FREE(G)"      , 
        ROUND((B.BYTES * 100) / A.BYTES,2)   AS "% USED"       , 
        ROUND((C.BYTES * 100) / A.BYTES,2)   AS "% FREE" 
FROM SYS.SM$TS_AVAIL A, SYS.SM$TS_USED B, SYS.SM$TS_FREE C 
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME 
AND A.TABLESPACE_NAME = C.TABLESPACE_NAME;

 

 

 

 

 

6、计算表空间使用情况(考虑了数据文件自动增长的情况):

 

SELECT UPPER(F.TABLESPACE_NAME) AS "表空间名称", 
        ROUND(D.AVAILB_BYTES ,2) AS "表空间大小(G)", 
        ROUND(D.MAX_BYTES,2) AS "最终表空间大小(G)", 
        ROUND((D.AVAILB_BYTES - F.USED_BYTES),2) AS "已使用空间(G)", 
        TO_CHAR(ROUND((D.AVAILB_BYTES - F.USED_BYTES) / D.AVAILB_BYTES * 100, 
            2), '999.99') AS "使用比", 
        ROUND(F.USED_BYTES, 6) AS "空闲空间(G)", 
        F.MAX_BYTES AS "最大块(M)" 
 FROM (
        SELECT TABLESPACE_NAME, 
                ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 6) USED_BYTES, 
                ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 6) MAX_BYTES 
        FROM SYS.DBA_FREE_SPACE 
        GROUP BY TABLESPACE_NAME) F, 
      (SELECT DD.TABLESPACE_NAME, 
                ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 6) AVAILB_BYTES, 
            ROUND(SUM(DECODE(DD.MAXBYTES, 0, DD.BYTES, DD.MAXBYTES))/(1024*1024*1024),6) MAX_BYTES 
       FROM SYS.DBA_DATA_FILES DD 
       GROUP BY DD.TABLESPACE_NAME) D 
        WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME 
ORDER BY 4 DESC

 

 

 

 

 

7、查看数据库拥有的表空间:

 

  • 包含数据库中所有表空间的描述信息:

 

 

SELECT * FROM DBA_TABLESPACES;  

 

 

  • 包含当前用户的表空间的描述信息:

 

 

SELECT * FROM USER_TABLESPACES; 

 

 

  • 包含从控制文件中获取的表空间名称和编号信息:

 

 

SELECT * FROM V$TABLESPACE;

 

 

 

 

 

8、查看表空间中的数据文件:

 

  • 包含数据文件以及所属的表空间的描述信息(永久表空间/UNDO表空间)

 

 

SELECT * FROM DBA_DATA_FILES;

 

 

  • 包含临时数据文件以及所属的表空间的描述信息

 

SELECT * FROM DBA_TEMP_FILES;
SELECT * FROM V$TEMPFILE;
  • 包含从控制文件中获取的数据文件的基本信息,包括它所属的表空间名称、编号等
SELECT * FROM V$DATAFILE;
  • 包含所有临时数据文件的基本信息
SELECT * FROM V$TEMPFILE;

 

 

 

9、查看用户拥有的表空间:

 

 

 

 

  • 系统管理员用户使用dba_tablespaces数据字典查看

 

 

select tablespace_name from dba_tablespaces;

 

  • 普通用户使用user_tablespaces数据字典查看
select tablespace_name from user_tablespaces;

 

 

 

 

 

六、Oracle创建表空间

1、基本语法:

 

Create [TEMPORARY] TABLESPACE tablespace_name 
TEMPFILE|DATAFILE 'fileName.dbf' 
size xx
[autoextend on|off]
[next xx] 


解释:

 

tablespace_name : 为表空间名称
datafile : 用于设置物理文件名称 
size : 用于设置表空间的初始大小
autoextend on : 用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
next : 用于设置扩容的空间大小

 

2、实例:

 

create tablespace test_tablespace
datafile 'c:\test_tablespace.dbf'
size 100m
autoextend on
next 10m

 

 

 

 

 

七、Oracle修改表空间的状态

1、设置表空间的联机或脱机状态:

表空间的默认状态是联机状态,如果表空间是脱机状态,那么我们就不能够使用这个表空间了

 

  • 基本语法:

 

 

ALTER TABLESPACE tablespace_name ONLINE|OFFLINE;

 

 

 

  • 实例:

 

 

alter tablespace test_tablespace offline;

 

 

 

 

 

2、设置表空间的只读|可读写状态:

表空间默认为可读写的状态

注意:如果表空间状态中拥有可read,那么表空间就必须是联机状态。

 

  • 基本语法:

 

 

ALTER TABLESPACE tablespace_name [read only][read write];

 

  • 实例:
alter tablespace test_tablespace read only;

 

 

 

 

 

八、Oracle修改表空间的数据文件

1、增加表空间中的数据文件

 

  • 基本语法:

 

 

ALTER TABLESPACE tablespace_name ADD DATAFILE'xx.dbf' SIZE xx;

 

 

 

  • 实例:

 

 

alter tablespace test_tablespace add datafile 'test1_tablespace.dbf' size 10m;


注意:如果发现某个表空间存储空间不足时,可以为表空间添加新的数据文件,扩展表空间大小

 

 

 

 

2、调整数据文件的大小

 

ALTER DATABASE DATAFILE 'c:\test_tablespace.dbf' RESIZE 500M;

 

 


3、删除数据文件

 

注意:不能够删除表空间中的第一个数据文件,如果将第一个数据文件删除的话,相当于删除了整个表空间。

 

 

  • 基本语法:

 

 

ALTER TABLESPACE tablespace_name DROP DATAFILE'filename.dbf';

 

  • 实例:
alter tablespace test_tablespace drop datafile 'test1_tablespace.dbf';

 

 

 

 

 

九、Oracle删除表空间

 

  • 基本语法:

 

 

DROP TABLESPAC tablespace_name [INCLUDING CONTENTS];

 

  • 实例:
drop tablespace test_tablespace including contents;


注意:如果你希望在删除表空间的同时将表空间中的数据文件一同删除,需要加上[INCLUDING CONTENTS] 

 

 

 

 

 

 

你可能感兴趣的:(------,Oracle,数据库)