管理表空间和数据文件
Posted ✧*꧁一品堂.技术学习笔记꧂*✧.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了管理表空间和数据文件相关的知识,希望对你有一定的参考价值。
前言:管理表空间和数据文件
在 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:创建表空间的语法
创建表空间的语法如下:
语法中关键字
- 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:通过本地化管理方式创建表空间
示例1:通过本地化管理方式(Local)创建一个大小为10M 的表空间,其扩展大小为256kb
1: 创建前:
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: 创建后:
示例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>
创建后的:
在上面的2个例子中,由于创建的都是本地化管理方式的表空间所有都是使用 extent management local 子句。当创建扩展大小等同的表空间时,使用 uniform 关键字,并指定每次扩展时的大小,当创建扩展大小为自动管理时,使用 autoallocate 关键字,并且不需要指定扩展时的大小。
3:通过段空间管理方式创建表空间
段空间管理方式时建立在本地化空间管理方式基础之上的,即:只有本地化管理方式的表空间,才能进一步在其基础上建立段空间管理方式。它使用“SEGMENT SPACE MANAGEMENT MANUAL / LOCAL”语句,段空间管理又可以分为手动段和自动段两种空间管理方式。
1:手动段空间管理方式
示例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
2:采用段空间管理方式
示例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
4:创建非标准块表空间
示例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:建立大文件 表空间
示例:创建一个大文件表空间,指定一个数据文件,并且数据文件的大小为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> 71 SYS@orcl> alter tablespace tbs_big_1 resize 1g; 2 3 Tablespace altered. 4 5 SYS@orcl>
1 SYS@orcl> alter database datafile \'/u01/app/oracle/oradata/orcl/datafile3.dbf\' resize 100M; 2 3 Database altered. 4 5 SYS@orcl>
四:维护表空间与数据文件
1:设置默认表空间
示例:将临时表空间 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 设置为默认的永久表空间
2:更改表空间的状态
示例:修改tbs_test3 表空间为只读状态
示例:修改 tbs_test3 表空间状态为 可读可写状态;
3:重命名表空间
示例:将 tbs_test3 表空间重新命名为: tbs_test_3
4:删除表空间
示例:删除表空间 tbs_test2及其包含的所有内容
1 SYS@orcl> drop tablespace TBS_TEST以上是关于管理表空间和数据文件的主要内容,如果未能解决你的问题,请参考以下文章