目录

1.表空间

(1)创建表空间 

(2)管理表空间

 (3)删除表空间

补充


Oracle学习的相关知识点(汇总)

1.表空间

表空间由数据文件组成,这些数据文件是数据库实际存放数据的地方,数据库的所有系统数据和用户数据都必须存放在数据文件中。创建一个数据库时,系统都会默认地为它创建一个“SYSTEM”表空间以存储系统信息。

(1)创建表空间 

下面的参数和说明都是比较复杂的,只有慢慢的和不断的练习才能更好的掌握。 

格式:

CREATE TABLESPACE <表空间名>

        DATAFILE '/<文件路径>/<文件名>' [SIZE<文件大小> [ K∣M ]] [ REUSE ]

        [ AUTOEXTEND [ OFF∣ON [ NEXT <磁盘空间大小>[ K∣M ]]

        [ MAXSIZE [ UMLIMITED∣<最大磁盘空间大小> [ K∣M ] ] ] ]

        [ MINMUM EXTENT<数字值> [ K | M ] ]

        [ DEFAULT <存储参数>]

        [ ONLINE∣OFFLINE ]

        [ LOGGING∣NOLOGGING ]

        [ PERMANENT∣TEMPORARY ]

        [ EXTENT MANAGEMENT [ DICTIONARY∣LOCAL [ AUTOALLOCATE∣UNIFORM [ SIZE <数字值>[K | M]]]]]

说明

  • DATAFILE子句:用于为表空间创建数据文件,格式与CREATE DATABASE语句中的DATAFILE子句相同。
  • AUTOEXTEND:用于指定是否禁止或允许自动扩展数据文件。若选择OFF,则禁止自动扩展数据文件。 若选择ON,则允许自动扩展数据文件。NEXT指定当需要更多盘区时分配给数据文件的磁盘空间。
  • MAXSIZE:指定允许分配给数据文件的最大磁盘空间。其中,UMLIMITED表示对分配给数据文件的 磁盘空间没有设置限制。
  • MINMUM EXTENT:指定最小的长度,默认为操作系统和数据库块确定。
  • ONLINE和OFFLINE:ONLINE表示在创建表空间之后,使授权访问该表空间的用户立即可用该表空间; OFFLINE表示在创建表空间之后使该表空间不可用,默认为ONLINE

<存储参数>::= STORAGE

(

        INITIAL <第一个区的大小>[ K︱M ]

        NEXT<下一个区的大小> [ K︱M ]

        MINEXTENTS ︱<区的最小个数>UNLIMITED

        MAXEXTENTS <区的最大个数>

        PCTINCREASE <数字值>.

        FREELISTS<空闲列表数量>

        FREELIST GROUPS<空闲列表组数量>

)

  • INITIAL指定对象(段)的第一个区的大小,单位为KB或MB,默认值是5个数据块的大小;
  • NEXT指定下一个区以及后续区的大小,单位为KB或MB,最小值是1个数据块的大小
  • MINEXTENTS指定创建对象(段)时就应该分配的区的个数,默认为1;
  • MAXEXTENTS指定可以为一个对象分配的区的最大个数,该参数最小值是MINEXTENTS;
  • PCTINCREASE指定第3个区以及后续区在前面区的基础之上增加的百分比; FREELISTS指定表、簇或索引的每个空闲列表组的空闲列表数量;
  • FREELIST GROUP指定表、簇或索引的空闲列表组的数量
  • LOGGING/NOLOGGING:指定日志属性,它表示将来的表、索引等是否需要进行日志处理。默认值 为LOGGING。
  • PERMANENT:指定表空间,将用于保存永久对象,这是默认设置。
  • TEMPORARY:指定表空间,将用于保存临时对象。
  • EXTENT MANAGEMENT:指定如何管理表空间的盘区。
  • DICTIONARY:指定使用字典表来管理表空间,这是默认设置。
  • LOCAL:指定本地管理表空间。
  • AUTOALLOCATE:指定表空间由系统管理,用户不能指定盘区尺寸。
  • UNIFORM:指定使用SIZE字节的统一盘区来管理表空间。默认的SIZE为1MB。如果既没指定 AUTOALLOCATE又没指定UNIFORM,那么默认为AUTOALLOCATE。

注意:指定了LOCAL,那么就不能指定DEFAULT<存储参数>和TEMPORARY;

例子1:创建一个20MB大小的表空间,包含日志处理并且是不允许自动扩展数据文件的。

CREATE TABLESPACE DEMOTAB
    DATAFILE 'E:\Oracle\TableSpace\demo1.DBF' SIZE 20M REUSE 
    AUTOEXTEND OFF
    LOGGING;

 例子2:例子1:创建一个20MB大小的表空间,包含日志处理并且是允许自动扩展数据文件的。

CREATE TABLESPACE DEMOTAB1
    DATAFILE 'E:\Oracle\TableSpace\demo2.DBF' SIZE 20M REUSE 
    AUTOEXTEND ON NEXT 1M MAXSIZE 30M
    LOGGING
    EXTENT MANAGEMENT LOCAL;

(2)管理表空间

利用ALTER TABLESPACE命令可以修改现有的表空间或它的一个或多个数据文件。可以为数据库中每一个数 据文件指定各自的存储扩展参数值

格式:

ALTER TABLESPACE <表空间名>

        [ADD DATAFILE | TEMPFILE '/<文件路径>/<文件名>' [SIZE<文件大小> [ K∣M ]] ]

        [ REUSE ]

        [ AUTOEXTEND [ OFF∣ON [ NEXT <磁盘空间大小>[ K∣M ]]

        [ MAXSIZE [ UMLIMITED∣<最大磁盘空间大小> [ K∣M ] ] ] ]

        [RENAME DATAFILE '<路径>/<文件名>',...n TO '<路径>/<新文件名>',...n]

        [ DEFAULT <存储参数>]

        [ ONLINE∣OFFLINE [ NORMAL∣TEMPORARY∣IMMEDIATE ]]

        [ LOGGING∣NOLOGGING ]

        [ PERMANENT∣TEMPORARY ]

        [READ ONLY | WRITE]

说明

  • ADD DATAFILE∣TEMPFILE:向表空 间添加指定的数据文件或临时 文件
  • RENAME DATAFILE:对一个 或多个表空间的数据文件重命名。 在重命名数据文件之前要使表空间 脱机
  • READ WRITE:表明在先前 只读表空间上允许写操作。
  • READ ONLY:表明表空间上 不允许进一步写操作。该子句在 现有的事务全部提交或回滚后才 生效,使表空间变成只读。

例子:将新的数据文件添加到已有的表空间DEMOTAB1。

ALTER TABLESPACE DEMOTAB1
    ADD DATAFILE 'E:\Oracle\TableSpace\demo3.DBF' SIZE 20M REUSE 
    AUTOEXTEND ON NEXT 1M MAXSIZE 30M;

 

 (3)删除表空间

DROP TABLESPACE <表空间名>

        [INCLUDING CONTEINTS [{AND | KEEP}DATAFILES]

                [CASCADE CONSTRAINTS]

        ];

提示:在删除表空间之前,如果其中还保留有数据库对象,则必须使用INCLUDING CONTENTS子句,表示表空间和其中保存的数据库对象全部删除,但对应的数据文件并不会从操作系统中被删除。

如果要删除表空间对象的数据文件,则必须使用AND DATAFILES;

如果要保留数据文件,则加上KEEP DATAFILES。

使用CASCADE CONSTRAINTS用于删除与表空间相关的数据文件,但只对最新创建的或者最后一个表空间有效。

例子:删除表空间DEMOTAB1,并且删除相关的数据文件和对象。

DROP TABLESPACE DEMOTAB1
    INCLUDING CONTENTS AND DATAFILES;

提示:申请的空间越大,那么删除的过程时间也就越长。

补充

如果要查看表空间的情况:

SELECT FILE_NAME, BYTES

        FROM DBA_DATA_FILES
        WHERE TABLESPACE_NAME = 'DEMOTAB1';

select *
    from dba_data_files
    where tablespace_name='DEMOTAB1';

--未使用的表空间大小 
select tablespace_name,sum(bytes)/1024/1024 
    from dba_free_space 
    group by tablespace_name; 

--查看每个表占用的空间大小:

select segment_name,sum(bytes)/1024/1024
    from user_extents
    group by segment_name; 

--查看每个表占用的空间大小:

    
select segment_name,sum(bytes)/1024/1024
    from user_extents
    group by segment_name;

 

更多推荐

Oracle数据库的表空间(一)