管理表空间和数据文件

Posted ✧*꧁一品堂.技术学习笔记꧂*✧.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了管理表空间和数据文件相关的知识,希望对你有一定的参考价值。

 

前言:管理表空间和数据文件

  在 Oracle数据库中,表空间中的数据存在于磁盘的数据文件中,所以对表空间的管理操作与对数据文件的管理操作密切相关。通过使用表空间,可以有效的部署不同类型的数据,加强数据管理,从而提高数据库的运行性能。

通过阅读本章节内容,可以:

  • 理解表空间和数据文件的关系
  • 掌握如何创建表空间
  • 掌握如何维护表空间和数据文件
  • 了解如何管理撤销表空间
  • 掌握如何管理临时表空间

 

 

 

一:表空间与数据文件的关系

 

       在Oracle 数据库中,表空间与数据文件之间的关系非常密切,这二者 相互依存。也就是说,创建表空间时必须创建数据文件,增加数据文件时也必须指定表空间。

       Oracle磁盘空间管理中的最高逻辑层是表空间(tablespace),它的下一层是段(segment),并且一个段只能驻留在一个表空间中。段的下一层是盘区。一个或者多个盘区 (extent)可以组成一个段,并且每个盘区只能驻留在一个数据文件中。如果一个段跨越多个数据文件,它就只能由多个驻留在不同数据文件中的盘区构成。盘区的下一层就是数据块,它也是磁盘空间管理中逻辑划分的最底层,一组连续的数据块可以组成一个盘区。

image

 

 

 

示例1:在sysetm 模式下:从 dba_data_files 数据字典中查询表空间及其包含的数据文件

  1 SYS@orcl> col tablespace_name for a10;
  2 SYS@orcl> col file_name for a50;
  3 SYS@orcl> col bytes for 999,999,999
  4 SYS@orcl> select tablespace_name ,file_name,bytes from dba_data_files order by tablespace_name;
  5 
  6 TABLESPACE FILE_NAME                                                 BYTES
  7 ---------- -------------------------------------------------- ------------
  8 EXAMPLE    /u01/app/oracle/oradata/orcl/example01.dbf          362,414,080
  9 SYSAUX     /u01/app/oracle/oradata/orcl/sysaux01.dbf           786,432,000
 10 SYSTEM     /u01/app/oracle/oradata/orcl/system01.dbf           765,460,480
 11 UNDOTBS1   /u01/app/oracle/oradata/orcl/undotbs01.dbf          256,901,120
 12 USERS      /u01/app/oracle/oradata/orcl/users01.dbf              5,242,880
 13 
 14 SYS@orcl>

 

     从查询所列的结果来看,一个数据库包括多个表空间,比如system 表空间、users表空间。而每一个表空间又包含一个或者多个数据文件,比如:

users 表包括一个数据文件 users01.dbf ;表空间可以看成是oracle 数据库的逻辑结构,而数据文件可以看成是 Oracle数据库的物理结构。            

 

 

二:oracle 11g 默认的表空间

 

   默认表空间是指在创建Oracle数据库时,系统自动创建的表空间,这些表空间通常用于存放Oracle系统内部数据和提供样列所需的逻辑空间。

oracle默认的表空间及其声明如表:

image

 

      1: system 表空间

  Oracle 数据库的每个版本都使用system 表空间存放内部数据和数据字典。system表空间主要存放sys用户的各个对象和其他用户的少量对象。用户可以从DBA_SEGMENTS 数据字典中查询到某个表空间所存放的数据对象及其类型(如:索引、表、簇等)和拥有者。

 

1: 例如: 查询 users 表空间内存放的数据对象及其类型和拥有者。

  1 SYS@orcl> col owner for a10;
  2 SYS@orcl> col segment_name for a30;
  3 SYS@orcl> col segment_type for a20;
  4 SYS@orcl> select segment_type,segment_name,owner from dba_segments where tablespace_name =\'USERS\';
  5 
  6 SEGMENT_TYPE         SEGMENT_NAME                   OWNER
  7 -------------------- ------------------------------ ----------
  8 TABLE                DDL_OPER_LOG                   SCOTT
  9 TABLE                DEPT                           SCOTT
 10 TABLE                DEPT_LOG                       SCOTT
 11 TABLE                EMP                            SCOTT
 12 TABLE                GOODS                          SCOTT
 13 INDEX                PK_DEPT                        SCOTT
 14 INDEX                PK_EMP                         SCOTT
 15 TABLE                SALGRADE                       SCOTT
 16 INDEX                SYS_C0011673                   SCOTT
 17 TABLE                JOBS_TEMP                      HR
 18 INDEX                SYS_C0011441                   HR
 19 
 20 SEGMENT_TYPE         SEGMENT_NAME                   OWNER
 21 -------------------- ------------------------------ ----------
 22 NESTED TABLE         ACTION_TABLE                   OE
 23 INDEX                ACTION_TABLE_MEMBERS           OE
 24 TABLE                CATEGORIES_TAB                 OE
 25 LOBSEGMENT           EXTRADATA886_L                 OE
 26 NESTED TABLE         LINEITEM_TABLE                 OE
 27 INDEX                LINEITEM_TABLE_MEMBERS         OE
 28 LOBSEGMENT           NAMESPACES887_L                OE
 29 NESTED TABLE         PRODUCT_REF_LIST_NESTEDTAB     OE
 30 TABLE                PURCHASEORDER                  OE
 31 NESTED TABLE         SUBCATEGORY_REF_LIST_NESTEDTAB OE
 32 INDEX                SYS_C0011250                   OE
 33 
 34 SEGMENT_TYPE         SEGMENT_NAME                   OWNER
 35 -------------------- ------------------------------ ----------
 36 INDEX                SYS_C0011251                   OE
 37 INDEX                SYS_C0011254                   OE
 38 INDEX                SYS_C0011255                   OE
 39 INDEX                SYS_C0011256                   OE
 40 INDEX                SYS_C0011257                   OE
 41 INDEX                SYS_C0011258                   OE
 42 INDEX                SYS_FK0000076744N00007$        OE
 43 INDEX                SYS_FK0000076744N00009$        OE
 44 LOBINDEX             SYS_IL0000076694C00004$$       OE
 45 LOBINDEX             SYS_IL0000076694C00005$$       OE
 46 LOBINDEX             SYS_IL0000076694C00008$$       OE
 47 
 48 SEGMENT_TYPE         SEGMENT_NAME                   OWNER
 49 -------------------- ------------------------------ ----------
 50 LOBINDEX             SYS_IL0000076694C00012$$       OE
 51 LOBINDEX             SYS_IL0000076694C00017$$       OE
 52 LOBINDEX             SYS_IL0000076694C00026$$       OE
 53 LOBINDEX             SYS_IL0000076694C00033$$       OE
 54 LOBINDEX             SYS_IL0000076695C00004$$       OE
 55 LOBINDEX             SYS_IL0000076699C00005$$       OE
 56 LOBINDEX             SYS_IL0000076699C00010$$       OE
 57 LOBSEGMENT           SYS_LOB0000076695C00004$$      OE
 58 LOBSEGMENT           SYS_LOB0000076699C00005$$      OE
 59 LOBSEGMENT           SYS_LOB0000076699C00010$$      OE
 60 LOBSEGMENT           SYS_XDBPD$881_L                OE
 61 
 62 SEGMENT_TYPE         SEGMENT_NAME                   OWNER
 63 -------------------- ------------------------------ ----------
 64 LOBSEGMENT           SYS_XDBPD$882_L                OE
 65 LOBSEGMENT           SYS_XDBPD$883_L                OE
 66 LOBSEGMENT           SYS_XDBPD$884_L                OE
 67 LOBSEGMENT           SYS_XDBPD$885_L                OE
 68 
 69 48 rows selected.
 70 
 71 SYS@orcl>

 

   从运行结果可以看出,users表空间存放了scott用户的表和索引,以及OE 用户的大对象索引、索引等数据对象。

 

 

  2: sysaux 表空间

 

        system 表空间主要用于存放Oracle系统内部的数据字典,而sysaux表空间充当system的辅助表空间,主要用于储存数据字典以外的其他数据对象,它在一定程度上降低 了 system表空间的负荷。

示例1:下面通过dba_segments 数据字典来查询sysaux 表空间的相关信息

  1 SYS@orcl>  select owner as "用户",count(segment_name) as "对象数量" from dba_segments where tablespace_name=\'SYSAUX\' GROUP BY OWNER;
  2 
  3 用户                             对象数量
  4 ------------------------------ ----------
  5 MDSYS                                 572
  6 CTXSYS                                 59
  7 OLAPSYS                               141
  8 SYSTEM                                153
  9 EXFSYS                                 58
 10 APEX_030200                           467
 11 DBSNMP                                 12
 12 ORDSYS                                  7
 13 SYSMAN                                746
 14 XDB                                  1372
 15 ORDDATA                               160
 16 
 17 ????                             ????????
 18 ------------------------------ ----------
 19 SYS                                  1169
 20 WMSYS                                  56
 21 
 22 13 rows selected.
 23 
 24 SYS@orcl>
 25 

image

 

三:创建表空间

    为了简化表空间的管理并提供系统性能,Oracle建议将不同类型的数据对象存放到不同的表空间中。因此,在创建数据库后,数据库管理员还应该根据具体应用的情况,建立不同类型的表空间。例如:建立专门用于存放表数据的表空间、建立专门用于存放索引或簇数的表空间等,因此创建表空间的工作就显示十分重要,在创建表空间时必须考虑以下几点:

  • 是创建小文件表空间,还是大文件表空间(默认为:小文件表空间)
  • 是使用局部盘区管理方式,还是使用传统的目录盘区管理方式(默认为局部盘区管理)
  • 是手动管理段空间,还是自动管理段空间(默认为自动)
  • 是否用于临时段或撤销段的特殊表空间

 

1:创建表空间的语法

创建表空间的语法如下:

 


语法中关键字

  • SMALLFILE | BIGFILE : 表示创建的是小文件表空间 还是 大文件表空间
  • REUSE:  表示 若该文件存在,则清除该文件再重新建立该文件,若该文件不存在,则创建该文件。
  • AUTOEXEND[ ON | OFF ]:  表示数据文件为自动扩展(ON) 或者 非自动扩展(OFF),如果是自动扩展,则需要设置 next 的值。
  • MAXSIZE:  表示当数据文件自动扩展时,允许数据文件扩展的最大长度字节数,如果指定 UNLIMITED 关键字,则不需要指定字节长度。
  • MINIMUN EXTENT: 指定最小的长度,由操作系统和数据库的块决定
  • ONLINE | OFFLINE: 创建表空间时可以指定为在线或者离线
  • PERMANENT | TEMPORARY :  指定创建的表空间是 永久表空间或临时表空间,默认为永久性表空间。
  • LOGGING | NOLOGGING : 指定该表空间内的表在加载数据时是否产生日志,默认为产生日志(LOGGING)。即使设置为NOLOGGING,但在进行 INSERT、UPDATE 和 DELETE 操作时,Oracle 仍会将操作信息记录到Redo Log Buffer 中。
  • EXTENT MANAGEMENT DICTIONARY | LOCAL:指定表空间的扩展方式是使用数据字典管理还是本地化管理,默认为本地化管理。Oracle不推荐使用数据字典表空间。
  • AUTOALLOCATE | UNIFORM SIZE : 如果采用本地化管理表空间,在表空间扩展时,指定每次盘区扩展的大小是由系统自动指定还是按照等同大小进行。若是按照等同大小进行,则默认每次扩展的大小为1MB.
  • DEFAULT STORAGE: 指定以后要创建的表、索引及簇的储存参数值,这些参数将影响以后表等的储存参数值。

语法中的参数

tablespace_name:该参数表示要创建的表空间的名称

‘/path/filename’:该参数表述数据文件的路径与名字

 

 

2:通过本地化管理方式创建表空间

image

示例1:通过本地化管理方式(Local)创建一个大小为10M 的表空间,其扩展大小为256kb

1: 创建前:

image

2: 创建脚本:

  1 
  2 SYS@orcl> create tablespace tbs_test1 datafile \'/u01/app/oracle/oradata/orcl/datafile1.dbf\' size 10m extent management local uniform size 256k;
  3 
  4 Tablespace created.
  5 
  6 SYS@orcl>

 

3: 创建后:

image

 

示例2:通过本地化管理方式(local) 创建一个大小为 10M的表空间,其扩展大小为 自动管理,

 

  1 SYS@orcl> create tablespace tbs_test2 datafile \'/u01/app/oracle/oradata/orcl/datafile2.dbf\' size 10m extent management local autoallocate;
  2 
  3 Tablespace created.
  4 
  5 SYS@orcl>

 

创建后的:

image

        在上面的2个例子中,由于创建的都是本地化管理方式的表空间所有都是使用 extent management local 子句。当创建扩展大小等同的表空间时,使用 uniform 关键字,并指定每次扩展时的大小,当创建扩展大小为自动管理时,使用 autoallocate 关键字,并且不需要指定扩展时的大小。

 

3:通过段空间管理方式创建表空间

         段空间管理方式时建立在本地化空间管理方式基础之上的,即:只有本地化管理方式的表空间,才能进一步在其基础上建立段空间管理方式。它使用“SEGMENT SPACE MANAGEMENT MANUAL / LOCAL”语句,段空间管理又可以分为手动段和自动段两种空间管理方式。

 

1:手动段空间管理方式

image

 

示例1:通过本地化管理方式 local 创建一个表空间,其扩展大小为自动管理,其段空间管理方式为手动

  1 SYS@orcl> create tablespace tbs_test3 datafile \'/u01/app/oracle/oradata/orcl/datafile3.dbf\' size 20m extent management local autoallocate segment space management manual;
  2 
  3 Tablespace created.
  4 
  5 SYS@orcl>
  6 
  7 

 

image

 

2:采用段空间管理方式

image

示例2:通过本地化管理方式 local  创建1个大小为20M 的表空间,其扩展大小为自动管理,其段空间管理方式为自动,

  1 SYS@orcl> create tablespace tbs_test4 datafile \'/u01/app/oracle/oradata/orcl/datafile4.dbf\' size 20m   extent management local autoallocate segment space management auto;
  2 
  3 Tablespace created.
  4 
  5 SYS@orcl>
  6 

image

image

 

4:创建非标准块表空间

image

示例1:创建一个非标准块的表空间,块的大小为标准块的2倍

  1 SYS@orcl> show parameter db_16k_cache_size
  2 
  3 NAME                                 TYPE        VALUE
  4 ------------------------------------ ----------- ------------------------------
  5 db_16k_cache_size                    big integer 0
  6 SYS@orcl> alter system set db_16k_cache_size=16M scope=both;
  7 
  8 System altered.
  9 
 10 SYS@orcl> show parameter db_16k_cache_size
 11 
 12 NAME                                 TYPE        VALUE
 13 ------------------------------------ ----------- ------------------------------
 14 db_16k_cache_size                    big integer 16M
 15 SYS@orcl> create tablespace tbs_test5 datafile \'/u01/app/oracle/oradata/orcl/datafile5.dbf\' size 60M reuse autoextend on next 4m maxsize unlimited blocksize 16k extent management local autoallocate segment space management auto;
 16 
 17 Tablespace created.
 18 
 19 SYS@orcl>
 20 

 

5:建立大文件 表空间

image

 

  示例:创建一个大文件表空间,指定一个数据文件,并且数据文件的大小为2GB

  1 
  2 SYS@orcl> create bigfile tablespace tbs_big_1 datafile \'/u01/app/oracle/oradata/orcl/datafilebig_1.dfb\' size 2G;
  3 
  4 Tablespace created.
  5 
  6 SYS@orcl>
  7 

image

image

  1 SYS@orcl> alter tablespace tbs_big_1 resize 1g;
  2 
  3 Tablespace altered.
  4 
  5 SYS@orcl>

image

 

  1 SYS@orcl> alter database datafile \'/u01/app/oracle/oradata/orcl/datafile3.dbf\' resize 100M;
  2 
  3 Database altered.
  4 
  5 SYS@orcl>

 

四:维护表空间与数据文件

image

1:设置默认表空间

image

 

示例:将临时表空间 temp_1 设置为默认的临时表空间

1:创建 临时表空间 temp_1

  1 SYS@orcl> create TEMPORARY tablespace temp_1 TEMPFILE \'/u01/app/oracle/oradata/orcl/temp_1.dbf\' size 50m autoextend on next 50m maxsize 2048m extent management local;
  2 
  3 Tablespace created.
  4 
  5 SYS@orcl>

2:将临时表空间temp_1 设置为默认的临时表空间

  1 
  2 SYS@orcl> alter database default temporary tablespace temp_1;
  3 
  4 Database altered.
  5 
  6 SYS@orcl>

 

示例2:将表空间 tbs_example 设置为默认的永久表空间

  1 
  2 SYS@orcl> alter database default tablespace TBS_TEST1;
  3 
  4 Database altered.
  5 
  6 SYS@orcl>

 

2:更改表空间的状态

image

示例:修改tbs_test3 表空间为只读状态

  1 SYS@orcl> alter tablespace TBS_TEST3 read only;
  2 
  3 Tablespace altered.
  4 
  5 SYS@orcl>

 

示例:修改 tbs_test3 表空间状态为 可读可写状态;

  1 
  2 SYS@orcl> alter tablespace TBS_TEST3  read write;
  3 
  4 Tablespace altered.
  5 
  6 SYS@orcl>

 

3:重命名表空间

image

示例:将 tbs_test3 表空间重新命名为: tbs_test_3

  1 SYS@orcl> alter tablespace tbs_test3 rename to tbs_test_3;
  2 
  3 Tablespace altered.
  4 
  5 SYS@orcl>

image

 

4:删除表空间

image

示例:删除表空间 tbs_test2及其包含的所有内容