数据库表空间创建和管理
介绍
表空间是数据库的逻辑存储概念
从物理上讲:数据库中的数据存放在数据文件中
从逻辑上讲:数据库则是存放在表空间中,表空间存放着一个或者多个数据文件 ,并且同一表空间可以包含不同磁盘下的数据文件。
如何规划表空间
1、数据库实例通过表空间控制数据库占用的磁盘空间(一个表空间可以存放多个数据文件,而数据文件是存放在物理磁盘的真实物理介质。)
2、对表空间规划就是对数据文件(数据文件,日志文件,归档文件,控制文件等)存放路径的规划。
3、没有业务关联的数据要分开存放到不同的表空间下,这样有利于提高I/O性能,同时利于备份和恢复等管理操作。
4、对于同一个表空间,尽量将不同类型的数据文件存放到不同的物理磁盘上,这样可提高IOPS,显著提高I/O性能。
5、关于LOB对象,要存放在独立表空间。数据文件最好分散存储在不同磁盘上。这样对LOB对象的访问效率会有明显提升。
6、随着数据量的增长,索引占用的磁盘空间也会相应增多;而且索引的访问频率比较高,需要将不同索引存放在不同的独立表空间下。这样既方便对索引进行维护和管理,也可提高I/O性能。
7、建立表空间一般是由数据库管理员用户来执行的。普通用户则需要使用管理员用户授权后才能创建。DBA需要对不同用户分配不同的表空间使用,建议不同用户间不要共用同一表空间,避免I/O争用,同时减少管理和维护的开销。
建立数据表空间语法
Oracle中逻辑结构包括表空间、段、区、块,而创建表空间时候,需要指定这些逻辑结构的管理方式。
其中数据库标准块大小在创建数据库的时候已经指定。
表空间(区)管理方式:数据字典管理和本地管理;
段管理方式:手工段空间管理(MSSM)和自动段空间管理(ASSM)
语法:
CREATE TABLESPACE tbs_name
DATAFILE '/u01/oracle/data/tbs_name1.dbf'
SIZE 50M
AUTOEXTEND ON MAXSIZE xxx ---设定 autoextend on 最好设定 maxsize
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 8M
BLOCKSIZE xxk ---非标准块表空间要配置db_xxk_cache_size
SEGMENT SPACE MANAGEMENT AUTO|MANUAL;
举例说明
这里为了方便理解。模拟多块硬盘。以某系统中的索引表空间、数据表空间、LOB表空间,临时表空间,UNDO表空间为例来说明创建表空间的创建。
假设服务器硬盘有数据盘
disk1, disk2,disk3,disk4,disk5, disk6,disk7,disk8
表空间类型 | 数据文件存放位置 | 备注 |
数据表空间1 |
disk1,disk2 | 数据表空间按不同业务数据分开存储。比如A数据,B数据,C接口数据,这些数据使用单独表空间管理存放。若磁盘数量足够,建议将数据文件分散存储。 |
数据表空间2 |
disk1,disk2 | |
索引表空间 |
disk3,disk4 | 现勘这样的系统属于B/S架构中的OLTP系统,随着时间推移,数据量呈线性增长。索引数据也会越来越多。因此,使用单独磁盘存放索引表空间,一可提高IOPS,二方便管理维护。 |
LOB表空间 |
disk5,disk6 | LOB数据对I/O要求很高, 像现勘系统这样的数据量,最好使用多块磁盘来分布存储LOB数据。LOB表空间段仅用来存放LOB数据对象。段不能够使用ASSM段管理方式。 |
临时表空间 |
disk7 | 由于临时表空间用于排序,暂存数据,这种特性导致不适合使用ASSM段管理方式。只能使用MSSM段管理的方式。 |
数据表空间创建举例:
create tablespace tbs_data1 datafile
‘/disk1/tbs_data1.dbf’size 50M,
‘/disk2/tbs_data2.dbf’size 50M
extent management local uniform size 8M
segment space management auto;
LOB表空间创建:
create tablespace tbs_lob1 datafile
‘/disk5/tbs_lob1.dbf’size 50M,
‘/disk6/tbs_lob2.dbf’size 50M
extent management local uniform size 8M
segment space management manual ;
临时表空间:
create temporary tablespace tbs_tmp1 tempfile
‘/disk7/tbs_temp.dbf’size50M,
extent management local uniform size 8M
segment space management manual ;
UNDO表空间:
Oracle还有专门的UNDO表空间,用来保证数据库一致读。UNDO表空间需要单独为业务用户创建,否则默认会用system表空间存放UNDO段,这样一旦UNDO表空间有问题,将会导致灾难性故障。UNDO表空间使用段空间自动管理方式比较方便。
create undo tablespce tbs_undo datafile
‘/disk8/tbs_undo.dbf’size 200M auto extend on
extent management local segment
space management auto;
更详细的表空间内容参考:
http://www.cnblogs.com/kerrycode/p/3418694.html