第19章表空间管理表空间是Oracle11g对数据库文件的称呼。可把它看作表驻留的空间。Oracle数据库中的数据可能会以难以置信的速度增长,所以需要谨慎地管理空间,并特别注意数据文件和归档日志使用的空间。本章将讲解Oracle11g的基础结构、表空间相关概念、表空间管理以及如何合理利用表空间。19.1Oracle11g的基础结构在理解表空间之前,先学习Oracle11g的基础结构。Oracle11g的基础结构主要包括Oracle模式和存储结构。模式是模式对象的集合,而模式对象是直接引用数据库数据的逻辑结构。模式对象包括这样一些结构:表、视图、序列、存储过程、同一词、索引、簇和数据库链等。Oracle数据库的存储结构分为逻辑存储结构和物理存储结构。19.1.1模式Oracle数据库有许多模式,模式是一种逻辑结构,包括像段、视图、存储过程、函数、包、触发器、用户定义对象、集合类型、序列之类的对象。每一个数据库用户对应一个模式。模式名是控制此模式的用户。模式对象是逻辑数据存储结构,每一种模式对象在磁盘上没有一个相应文件存储其信息。一个模式对象逻辑地存储在数据库的一个表空间中,每一个对象的数据物理地包含在表空间的一个或多个数据文件中。段是一种数据结构,可以是表、索引、临时段、撤销段。段用于存储表空间中某一中特定的具有独立存储结构的对象的所有数据,它有一个或多个区组成。19.1.1模式模式的示例有system、sys、scott、sh等。模式对象之间的关系如图所示。19.1.1模式1.段、区间和块模式可以有许多段和段类型,每个段是一个表或者分区或者群集或者索引的单个实例。Oracle段类型如下:表,是以行和列方式存储数据的地方。表在一种模式和一个表空间中实现,它是数据库的核心。索引,在表中是否创建索引是可选的。索引有助于实现诸如主键和唯一性之类的完整性约束。临时段,是作为执行SQL语句的临时存储区域。临时段可用于数据排序,一旦查询或事务完成就把排序数据丢弃。撤销段,用于管理变化前的映像,在需要时可回滚数据,可以保证数据正在修改时查询数据的一致性。段实际上是用于存储表空间中的数据,可以把它们看作物理结构。19.1.1模式2.逻辑模式结构数据库和模式中处理存储数据之外,还包括一些数据库对象,如视图、序列、用户定义类型。视图,不存储数据,主要对数据库的安全性、易用性和性能方面起到重要作用。序列,用来生成新的唯一数字,当向表中插入数据时,供应用程序使用。用户定义类型,用户可以创建一些类型以支持面向对象的开发。19.1.2存储结构模式对象在数据库中是以段存储的。每个段只能存储在单一表空间中,表空间由一个或多个数据文件组成。如果表空间用完,可以扩大组成表空间的数据文件,也可以向表空间添加新的数据文件,一个数据文件只能存储单一表空间的数据。单个表空间可以存储多个段和不同段类型的数据。合理利用空间不但能节省空间,还可以提高数据库系统的效率和工作性能。19.1.3表空间相关概念在Oracle数据库中,表空间和数据文件是有紧密联系的。每一个数据文件对应一个表空间,一个表空间可以存放多个数据文件。在创建表空间的同时必须创建数据文件。一个Oracle数据库由一个或多个表空间组成,在表空间中可以存放数据文件。数据文件存放的就是数据库中的数据。在表空间中的逻辑存储单位是段。表空间通常包括system(用于Oracle内部数据字典)、sysaux(用于辅助内部对象)、users(用于用户对象)、以及用于应用程序表、索引和另外的数据库结构的其他表结构。19.2表空间管理空间应该在数据文件和表空间级进行管理,而不是像表和索引一样。表空间的管理涉及创建、修改、删除等操作。19.2.1查看表空间表空间不够用时会极大地影响数据库性能,因此平时对于表空间的状态应多加观察,在空间接近上限时及时采取措施。通常,可以采用OEM企业管理器和数据字典来获得空间使用信息。19.2.1查看表空间1.通过OEM企业管理器查看表空间在OEM企业管理器中可以查看到数据文件和默认表空间的可用空间数量。19.2.1查看表空间2.通过数据字典获取信息这里使用的数据字典是表user_tablespaces、user_free_space、dba_free_space,可以查看其内容来得到有关表空间的空间信息。19.2.1查看表空间【例19-1】user_tablespaces数据字典中包括数据库中的可用的表空间。通过user_tablespaces査看表空间的空间信息。【例19-2】如果要查看某一个用户的默认表空间,可以使用dba_users。通过dba_users査看以sysk开头的用户的默认表空间。【例19-3】user_free_space可以查看表空间的使用情况。通过user_free_space査看表空间的空间信息。【例19-4】通过dba_free_space査看表空间的空间信息。19.2.2创建表空间表空间是一个逻辑概念,数据库中存储的数据是动态变化的,并且一般是向不断增加的方向变化。当要扩充数据库存储空间时,可以创建新的表空间并执行它的数据文件,系统会划出一块磁盘空间给这个表空间。创建表空间有两种方式:OEM企业管理器和语句的方法。19.2.2创建表空间1.通过OEM企业管理器创建表空间【例19-5】通过OEM企业管理器创建一个表空间。19.2.2创建表空间2.通过语句创建表空间创建表空间可以使用create命令,如图所示。19.2.2创建表空间【例19-6】使用语句创建一个自动扩展表空间,schema2,并且设置扩展的大小是128K,最大值是2048M。19.2.3重命名表空间创建好表空间之后,需要重命名表空间也是很简单的。重命名表空间有两种方式,一种是企业管理器,另一种是语句的方式。1.使用企业管理器重命名表空间【例19-7】在企业管理器中重命名schema2表空间,设置新的名称是schematwo。19.2.3重命名表空间2.使用语句的方式重命名表空间重命名表空间也可以使用语句来完成,其语法格式如图所示。19.2.3重命名表空间【例19-8】利用语句重命名schematwo表空间,设置新的名称是schema2。19.2.4设置表空间的状态表空间在创建时如果不指定状态,默认是读写状态,除了读写状态之外,还有只读状态、脱机。设置表空间的读写状态可以通过企业管理器,也可以通过语句的方法。19.2.4设置表空间的状态1.通过企业管理器设置表空间的状态如果要修改表空间的读写状态,需要在表空间的编辑页面的状态栏下选择“读写”、“只读”或者“脱机”。19.2.4设置表空间的状态2.通过语句的方法设置表空间的状态的语法比较简单,如图所示。【例19-9】利用语句设置schema2表空间为只读状态。19.3合理利用表空间存储空间是数据库系统中非常重要的资源,数据库所拥有的存储空间一旦用尽,整个数据库系统就会处于停滞状态,所以用户该合理利用空间。一方面要对数据库中的对象进行合理的设计以达到节省空间的目的;另一方面应该对空间进行及时回收和删除。19.3.1处理空间不足的情况随着时间的推移,数据库文件的空间会不足,导致无法向数据库中增加数据,解决空间不足的方法是扩充数据库的存储空间。用户可以通过增加system表空间中的数据文件、创建新的表空间、创建新的数据文件的方法实现。创建新的表空间在19.2节中已经讲解。19.3.1处理空间不足的情况1.增加system表空间中的数据文件的大小system表空间是整个数据库最重要的表空间,它的存储空间不够将会直接影响到数据库的运行。增加system表空间中的数据文件的大小。19.3.1处理空间不足的情况2.创建新的数据文件如果在创建表空间的时候,数据文件的大小设置的不合理,之后的使用过程中可能会出现使用空间不足的情况,此时可以增加表空间中的数据文件来扩充数据库的存储空间。增加表空间的数据文件。19.3.2正确的数据类型数据表是数据库中最为重要的对象,因为数据库中的数据都要存储在数据表中。创建表时需要为每一列指定一个数据类型,并且还需要给列指定长度大小。使得列中的数据都遵循相同的约束。数据类型及长度设置的优劣将直接影响到数据所占空间的大小,如果设计不合理就可能造成很大的浪费,反之将会节省宝贵的空间资源。因此,设计数据表各列的数据类型和长度,往往是创建表之前很重要的工作。【示例19-10】创建一个仅包含两列的数据表,第一列用于存储学生的序号,第二列存储学生的姓名。19.3.3回收利用表空间当一些对象不再使用时,可以将其删除,以释放相应的空间,以此来减少存储空间的使用。用户可以通过三种方法回收利用表空间。19.3.3回收利用表空间1.删除数据表数据库中的某些对象在使用了一段时间后,如果不再使用,需要将其删除回收空间。【示例19-11】删除数据表students。19.3.3回收利用表空间2.删除表空间如果不再需要一个表空间,就可以将该表空间从数据库删除。系统表空间(sysaux、system、temp)是不能删除的。可以使用企业管理器的方法删除表空间,也可以使用语句的方法删除表空间。19.3.3回收利用表空间2.删除表空间删除表空间也是用drop命令,删除表空间的语法格式如图所示。【示例19-12】利用企业管理器删除表空间schema1。【示例19-13】利用语句删除表空间schema2。19.4小结本章讲解了Oracle11g的基础结构,以及表空间概述。本章重点是如何管理表空间,即如何创建、重命名表空间、设置表空间的状态。本章的难点是如何合理利用表空间。下一章将学习与数据库安全有关的对象。