DB2表空间应该如何管理呢?这是很多人都提到过的问题,在解决这个问题之前,先让我们了解一下什么是DB2表空间:
DB2表空间
数据库中的所有数据都存储在许多表空间中。可以认为表空间是孩子而数据库是其父母,其中表空间(孩子)不能有多个数据库(父母)。由于表空间有不同用途,因此根据它们的用途和管理方式将它们分类。根据用途有五种不同的表空间:
目录表空间
每个数据库只有一个目录表空间,它是在发出 CREATE DATABASE 命令时创建的。目录表空间被 DB2 命名为 SYSCATSPACE,它保存了系统目录表。每当创建数据库时,都会创建这个表空间。
常规表空间
常规表空间保存所有***的数据,包括常规的表和索引。它还可以保存诸如 LOB(Large Object)之类的长数据,除非这些数据显式地存储在长表空间中。如果某些表空间是用于非分区表的数据库管理的空间(Database Managed Space,DMS)或者用于分区表的系统管理的空间,则可以将表及其索引分别放到单独的常规表空间中。我们将在 表空间管理 小节描述 DMS 和 SMS。目录表空间是常规表空间的一个例子。缺省情况下,目录表空间是数据库创建期间所创建的***一个常规表空间。
长表空间
长表空间像常规表空间一样存储***数据,包括 LOB。这种表空间必须是 DMS,这也是默认类型。长表空间中创建的表比常规表空间中的表大。大型表可支持每个数据页超过 255 行,从而提高数据页上的空间利用率。当创建数据库时,DB2 创建一个名为 USERSPACE1 的长表空间。
系统临时表空间
系统临时表空间用于存储 SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的缺省系统临时表空间名为 TEMPSPACE1。
用户临时表空间
用户临时表空间存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间,以允许定义已声明的临时表。用户临时表空间是可选的,缺省情况下不创建。
DB2表空间管理
可以用两种不同的方式管理DB2表空间:
系统管理的空间(SMS)
操作系统管理 SMS 表空间。容器被定义成常规操作系统文件,并且是通过操作系统调用访问的。这意味着以下任务全部由常规操作系统功能来处理:
I/O 缓冲
根据操作系统惯例分配空间
必要时自动扩展表空间
但是,不能从 SMS 表空间删除容器,并且仅限于将新的容器添加到分区的数据库。前一节中所说明的那三个缺省表空间都是 SMS。
数据库管理的空间(DMS)
DMS 表空间是由 DB2 管理的。可以将容器定义成文件(在创建表空间时将把给定的大小全部分配给它们)或设备。分配方法和操作系统允许多少 I/O,DB2 就可以管理多少 I/O。可以通过使用 ALTER TABLESPACE 命令来扩展容器。还可以释放未使用的那部分 DMS 容器(从 V8 开始)。
【编辑推荐】