前言:管理表空间和数据文件
在 Oracle数据库中,表空间中的数据存在于磁盘的数据文件中,所以对表空间的管理操作与对数据文件的管理操作密切相关。通过使用表空间,可以有效的部署不同类型的数据,加强数据管理,从而提高数据库的运行性能。
通过阅读本章节内容,可以:
- 理解表空间和数据文件的关系
- 掌握如何创建表空间
- 掌握如何维护表空间和数据文件
- 了解如何管理撤销表空间
- 掌握如何管理临时表空间
一:表空间与数据文件的关系
在Oracle 数据库中,表空间与数据文件之间的关系非常密切,这二者 相互依存。也就是说,创建表空间时必须创建数据文件,增加数据文件时也必须指定表空间。
Oracle磁盘空间管理中的最高逻辑层是表空间(tablespace),它的下一层是段(segment),并且一个段只能驻留在一个表空间中。段的下一层是盘区。一个或者多个盘区 (extent)可以组成一个段,并且每个盘区只能驻留在一个数据文件中。如果一个段跨越多个数据文件,它就只能由多个驻留在不同数据文件中的盘区构成。盘区的下一层就是数据块,它也是磁盘空间管理中逻辑划分的最底层,一组连续的数据块可以组成一个盘区。
示例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默认的表空间及其声明如表:
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
三:创建表空间
为了简化表空间的管理并提供系统性能,Oracle建议将不同类型的数据对象存放到不同的表空间中。因此,在创建数据库后,数据库管理员还应该根据具体应用的情况,建立不同类型的表空间。例如:建立专门用于存放表数据的表空间、建立专门用于存放索引或簇数的表空间等,因此创建表空间的工作就显示十分重要,在创建表空间时必须考虑以下几点:
- 是创建小文件表空间,还是大文件表空间(默认为:小文件表空间)
- 是使用局部盘区管理方式,还是使用传统的目录盘区管理方式(默认为局部盘区管理)
- 是手动管理段空间,还是自动管理段空间(默认为自动)
- 是否用于临时段或撤销段的特殊表空间
1:创建表空间的语法
创建表空间的语法如下:
1 CREATE[SMALLFILE/BIGFILE] TABLESPACE tablespace_name 2 DATAFILE ‘/path/filename‘ SIZE num[k/m] REUSE 3 [,‘/path/filename‘ SIZE num[k/m] REUSE] 4 [...] 5 [AUTOEXTEN [ON/OFF] NEXT NUM[K/M] ] 6 [MAXSIZE num[K/M] | UNLIMITED ] 7 [MININUM EXTENT num[K/M] ] 8 [DEFAULT STORAGE storage ] 9 [ONLINE | OFFLINE ] 10 [LOGGING | NOLOGGING ] 11 [PERMANENT | TEMPORARY ] 12 [ EXTENT MANAGEMENT DICTIONARY | LOCAL [ AUTOALLOCATE | UNIFORM SIZE num [ K/M ] ] ] 13语法中关键字
- 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’:该参数表述数据文件的路径与名字
———————————————————————————————————————————————————————————————————————————————————