表空间的管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表空间的管理相关的知识,希望对你有一定的参考价值。
表空间是数据库的逻辑组织形式,在一个数据库中可以创建多个表空间。
表空间的主要作用是将不同用途的数据分离开来,以提高数据的安全性,并提高系统的性能。
表空间在数据库中起着非常重要的作用。
一方面,表空间在逻辑结构上由多个段组成,数据都存储在表空间的段中,另一方面,表空间在物理结构上对应着多个数据文件,数据库对象中的数据最终存储在这些数据文件中。
表空间的类型较多,根据不同的分类标准,将得到不同的分类结果。
根据存储数据类型的不同,表空间可分为系统表空间、UNDO表空间、临时表空间和用户表空间。
根据存储空间方式的不同,表空间可分为字典管理表空间和本地管理表空间。
根据是否支持大文件来划分,表空间可分为大文件表空间和小文件表空间。
表空间的管理主要涉及各种类型表空间的创建、删除、扩展、修改状态等。
表空间的结构
一个表空间由多个段组成,每个段可能代表一个数据库对象。
当用户创建表、索引、簇等数据库对象时,在表空间中将自动创建一个段,以存储该对象的数据。
一个段占用一个或多个区,当区的空间被写满后,段就会自动扩展。
在创建表空间时就需要指定区的分配方式。
区管理方式
区管理方式指的是为一个数据库对象分配存储空间的方式,在创建表空间时需要指定区管理方式。
Oracle支持两种区管理方式,字典管理和本地管理。
在创建字典管理的表空间时,需要指定若干存储参数,以后在这个表空间中创建数据库对象时,就按照这些存储参数为数据库对象分配所需要的区,当这些区被写满后,数据库服务器将按照存储参数为数据库对象分配新的区。
表空间的存储参数记录在数据字典中。
在创建字典管理的表空间时,可以指定以下几个存储参数:
•INITIAL(初始) :指定第一个区的大小,即首先要为数据库对象分配的区的大小。
•NEXT :指定下一个区的大小。
• MINEXTENTS :为数据库对象分配的最少区的个数,默认值为1。
• MAXEXTENTS : 最多为数据库对象分配的区个数。
• PCTINCREASE :从第三个区开始,每一个区在前一个区的基础上增长的百分比。
在字典管理表空间中,区的分配和回收都是基于数据字典进行的。
当为数据库对象分配区时,需要从数据字典中查询存储参数,分配结束后,需要把分配的结果写入数据字典。
这样要在数据字典上执行很多的查询操作和DML操作,并且产生重做日志和回滚数据。
另外,由于数据库对象中的区大小不同,随着数据库服务器的运行,在段中将产生越来越的存储碎片
在本地管理表空间中,区的大小都是相同的。
在创建表空间时,可以通过参数指定统一的区大小,或者由数据库服务器根据实际情况自动指定区的大小。
与字典管理方式相比,本地管理方式有以下优点:
·区的分配和回收不再基于数据字典,从而避免了对数据字典的递归访问,也不会产生重做日志和回滚数据。
·所有区的大小都相同,这就减少了存储空间中的存储碎片。
·不需要合并表空间中的存储碎片,数据库服务器自动监视存储空间的使用情况,并合并相邻的空闲存储空间。
Oracle建议大家使用本地管理表空间。
在Oracle 11g的数据库中创建的表空间默认就是本地管理的,如SYSTEM表空间目前是字典管理的,可以通过下面的方式,调用PL/SQL程序包中的存储过程,把它转化为本地管理表空间:
EXECUTE DBMS_SPACE_ADMIN.tablespace_migrate_to_local(‘SYSTEM‘);
段管理方式
当用户向表中写入数据时,这些数据被写入表段中的空闲数据块中,服务器进程先查找表中的空闲数据块,然后将数据写入数据块,最后还要修改数据块的状态。
对于段空间管理,Oracle提供了两种方式,一种是手工管理,另一种是自动管理。
手工管理段空间的方式是这样实现的:在每个段的头部都有一段保留空间,在保留空间中维护一个空闲列表,在这个列表中记录当前段中所有的空闲块。
当用户向表中写数据时,服务器进程在这个空闲列表中查找足够数量的空闲块,将数据写入这些块。
如果一个块已经被写满了,这个块就从空闲列表中被删除。
在查找空闲块的过程中,为防止其他服务器进程使用同样的空闲块,服务器进程将对空闲列表加锁,只有空闲列表上的锁被释放后,其他服务器进程才可以在空闲列表中查找空闲块。
如果用户在某个表上的事务很频繁,那么空闲列表将成为延缓事务执行的瓶颈。
自动管理方式是Oracle 11g数据库默认采用的段管理方式。
这种管理方式是这样实现的:在每个段的头部有一个位图,在位图中记录当前段中每个数据块的状态,用二进制数0和1表示数据块的状态,每个数据块在位图中只占一位。
使用位图的好处首先是节省空间,其次,当用户向表中写入数据时,服务器进程只要扫描位图就可以查找空闲数据块,而且不需要对位图加锁。
在创建表空间时,需要为表空间指定段空间管理方式。
数据文件
表空间中的所有数据都是以数据文件的形式存储在磁盘上的。
一个表空间包含一个或多个数据文件。
在创建表空间时,至少要为表空间指定一个数据文件。
如果表空间只包含一个数据文件,那么表空间中的数据将全部存储在这个数据文件中。
如果表空间中包含多个文件,表空间中的数据将以区为单位分布在各个数据文件中。
假设某个表空间中有三个数据文件,那么在该表空间中创建一个表时,表中的第一、四、七……个区将位于第一个数据文件,第二、五、八、……个区将位于第二个数据文件中,依此类推。
如果将数据文件存放在不同的磁盘上,那么用户在访问表空间中的数据时,可以同时读写多个数据文件,从而减少了磁盘读写的冲突次数。
当表空间中的存储空间被消耗完时,用户将无法再写入数据。
数据库管理员必须扩展表空间,为其分配新的存储空间。
可以向表空间中增加新的数据文件,也可以手工扩展现有的数据文件,还可以激活数据文件的自动扩展功能,使它能够自动扩展。
本地管理表空间的管理
以上是关于表空间的管理的主要内容,如果未能解决你的问题,请参考以下文章