Oracle的表空间

Oracle表空间

1 表空间的概述

            ORACLE数据库被划分成称作为表空间的逻辑区域,形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等

2 表空间的作用

  • 决定数据库实体的空间分配;
  • 设置数据库用户的空间份额;
  • 控制数据库部分数据的可用性;
  • 分布数据于不同的设备之间以改善性能;
  • 备份和恢复数据

3 表空间的分类

1>   系统表空间:该表空间是每个Oracle数据库都必须具备的部分。在系统表空间中存放的是诸如表空间名称,表空间所含数据文件这类管理数据库自身所需的信息。不能由用户创建。

2>   临时表空间:临时表空间是Oracle用于存储其所有临时表的所在。临时表空间类似于数据库白板或草稿纸。就像有时可能需要草草记下一些数据以对其进行操作一样,Oracle工作时也需要一些临时的磁盘空间。可有多个临时表空间。用户可以自己创建临时表空间

3>   用户表空间:用来存放用户的私有信息。例如,在学习使用Oracle时,读者可能需要建立一些数据库对象。

4>   回滚表空间:撤销表空间用于回滚事务,以及提供与DML语句同时运行在相同的表或表集上的select语句的读一致性,并支持大量Oracle闪回特性,例如闪回查询(Flashback Query)  3 表空间的常用操作

--注:临时表空间和撤销表空间是oracle管理的特殊的表空间.只用于存放系统相关数据.

--oracle 创建表空间应该授予的权限

 1.被授予关于一个或多个表空间中的resource特权;

 2.被指定缺省表空间;

 3.被分配指定表空间的存储空间使用份额;

 4.被指定缺省临时段表空间。

4:表空间的常用操作

1>   建立表空间

  --> 语法格式:

CREATE [BIGFILE | SMALLFILE][TEMPORARY]TABLESPACE name    --指定带创建的表空间的名称和类型

DATAFILE 数据文件全名 | TEMPFILE 临时文件全名                             --为表空间指定数据文件或临时文件

[MINIMUM EXTENT 最小区段大小]                                      --指定表空间的最小区段大小

[BLOCKSIZE 块大小]                                                     --指定表空间的块大小

[[COMPRESS|NOCOMPRESS] DEFAULT STORAGE]                       --指定本地存储策略

[LOGGING|NOLOGGING]                                               --是否创建重做日志文件,默认logging

[FORCE LOGGING]                                                                       --强制日志模式,nologging参数不再起作用

[ONLINE|OFFLINE]                                                                        --表空间是联机还是脱机状态

[EXTENT MANAGEMENT DICTIONARY |LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]  --扩展区块的管理方式

[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]                  --段空间管理方式

[FLASHBACK ON|OFF]                                                                    --是否支持闪回

--> 实例

CREATE TABLESPACE TestTS                        --创建名为TestTS的表空间
DATAFILE 'D:\Oracle\oradata\orcl\sample.dbf'    --为表空间指定数据文件
         SIZE 50M REUSE                         --数据文件的大小为50M
         AUTOEXTEND ON                          --数据文件自动增长
         NEXT 50M                               --下一次数据文件增长50M
         MAXSIZE 1024M                          --数据文件的最大大小为1G
MINIMUM EXTENT 128K                             --最小区段大小128K,默认为64K
DEFAULT STORAGE
( 
        INITIAL 128K                            --区段的第一个段为128K
        NEXT 128K                               --第二个Extend的大小,
                                                --第二个以后的Extend计算方式:前一个Extend*(1+PCTINCREASE%)
        MINEXTENTS 1                            --区段第一次创建的时候分配1个Extend
        MAXEXTENTS 4096                         --最多可分配的Extend的个数
        PCTINCREASE 0                           --第二个以后得Extend增长的百分比
)
LOGGING                                         --生成日志
ONLINE                                          --联机
SEGMENT SPACE MANAGEMENT AUTO                   --自动区段管理
FLASHBACK ON;                                   --开启回闪

2>   修改表空间

--> 语法格式:

           alter tablespce 表空间名

           (add datafile 文件标识符[,文件标识符]...

           |rename datafile ’文件名’[,’文件名’]...

           to ’文件名’[,’文件名’]...

           |default storage(存储配置参数)

           |online|offline[normal|immediate]

           |(begin|end)backup);

 --> 实例

    --1.使表空间脱机
            ALTER TABLESPACE GAME OFFLINE; 
       --如果是意外删除了数据文件,则必须带有recover选项
            ALTER TABLESPACE GAME OFFLINE FOR RECOVER;
       --2.使表空间联机
            ALTER TABLESPACE GAME ONLINE; 
       --3.使数据文件脱机
            ALTER DATABASE DATAFILE 3 OFFLINE;
       --4.使数据文件联机
            ALTER DATABASE DATAFILE 3 ONLINE;
       --5.使表空间只读
            ALTER TABLESPACE GAME READ ONLY;
       --6.使表空间可读写
            ALTER TABLESPACE GAME READ WRITE;
      --首先查看表空间的名字和所属文件
            SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME,
                   ROUND(BYTES / (1024 * 1024), 0) TOTAL_SPACE
            FROM DBA_DATA_FILES
           ORDER BY TABLESPACE_NAME;

3>   扩展表空间  

     --1.增加数据文件
            ALTER TABLESPACE GAME
            ADD DATAFILE '/oracle/oradata/db/game02.dbf'
            SIZE 1000M;
        --2.手动增加数据文件尺寸
            ALTER DATABASE
            DATAFILE '/oracle/oradata/db/game.dbf'
            RESIZE 4000m;
        --3.设定数据文件自动扩展
            ALTER DATABASE
            DATAFILE '/oracle/oradata/db/game.dbf'
            AUTOEXTEND ON
            NEXT 100M
            MAXSIZE 10000M;
        --4.设定后查看表空间信息
             SELECT A.TABLESPACE_NAME,
                    A.BYTES TOTAL,
                    B.BYTES USED,
                    C.BYTES FREE,
                    (B.BYTES * 100) / A.BYTES "% used",
                    (C.BYTES * 100) / A.BYTES "% 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;

    4> 删除表空间 

1 --> 语法格式:
2    /* drop tablespace表空间名[including contents [and datafile]]; */
3 --> 实例
4    DROP TABLESPACE TestTS;        

 

    5> 表空间相关查询

 1 --检查当前用户空间分配情况
 2     SELECT TABLESPACE_NAME,
 3            SUM(EXTENTS),
 4            SUM(BLOCKS),
 5            SUM(BYTES)
 6       FROM USER_SEGMENTS
 7      GROUP BY TABLESPACE_NAME;
 8 -- 检查各用户空间分配情况
 9     SELECT OWNER,
10            TABLESPACE_NAME,
11            SUM(EXTENTS),
12            SUM(BLOCKS),SUM(BYTES)
13       FROM DBA_SEGMENTS
14      GROUP BY OWNER, TABLESPACE_NAME;
15 -- 检查当前用户数据库实体空间使用情况
16       SELECT TABLESPACE_NAME,SEGMENT_NAME,
17              SEGMENT_TYPE,
18              COUNT(EXTENT_ID),
19              SUM(BLOCKS), SUM(BYTES)
20         FROM USER_EXTENTS
21        GROUP BY TABLESPACE_NAME, SEGMENT_NAME, SEGMENT_TYPE;
22 -- 检查各用户空间使用情况
23       SELECT OWNER, TABLESPACE_NAME,
24              COUNT(EXTENT_ID),
25              SUM(BLOCKS), SUM(BYTES)
26         FROM USER_EXTENTS
27      GROUP BY OWNER, TABLESPACE_NAME;
28 -- 检查数据库空间使用情况
29        SELECT TABLESPACE_NAME, COUNT(EXTENT_ID),
30           SUM (BLOCKS), SUM(BYTES)
31          FROM USER_EXTENTS
32      GROUP BY TABLESPACE_NAME;
33 -- 检查当前用户自由空间情况
34     SELECT TABLESPACE_NAME, COUNT(BLOCK_ID),
35          SUM (BLOCKS), SUM(BYTES)
36        FROM USER_FREE_SPACE
37         GROUP BY TABLESPACE_NAME;
38 --检查数据库自由空间情况
39     SELECT TABLESPACE_NAME, COUNT(BLOCK_ID),
40           SUM (BLOCKS), SUM(BYTES)
41          FROM DBA_FREE_SPACE
42         GROUP BY TABLESPACE_NAME;
posted @ 2012-11-02 10:52  Silently Silence  阅读(754)  评论(0)    收藏  举报