db2表空间详解 - 图文

更新时间:2023-12-14 15:05:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

3.2 表空间设计

3.2.1 创建表空间

表空间建立数据库系统使用的物理存储设备与用来存储数据的逻辑对象或表之间的关系。对于非自动存储器表空间,在创建表空间时,必须知道将引用的容器的设备名或文件名。另外,必须知道与要分配给表空间的每个设备名或文件名及分配空间大小。对于自动存储器表空间,数据库管理器将根据与数据库关联的存储路径将容器指定给表空间。

在一个数据库内创建表空间,会将容器分配到表空间,并在数据库系统目录表中记录它的定义和属性,然后就可以在此表空间内创建表。当创建数据库时,会创建3个初始表空间。这3个初始表空间的页大小基于使用CREATE DATABASE命令时建立或接受的默认值。此默认值还表示所有将来CREATE BUFFERPOOL和CREATE TABLESPACE语句的默认页大小。如果在创建数据库时不指定页大小,那么默认大小是4KB。如果在创建表空间时不指定页大小,那么默认页大小是创建数据库时设置的页大小。

创建表空间可以通过控制中心或命令行创建。 一、使用控制中心创建表空间

二、使用命令行创建表空间 1.创建用户表空间

使用控制中心创建表空间 创建SMS表空间:

CREATE TABLESPACE MANAGED BY SYSTEM USING (‘’) 创建DMS表空间:

CREATE TABLESPACE MANAGED BY DATABASE USING(DEVICE |FILE’) 创建自动存储器表空间

DB2 QQ交流群281113952

CREATE TABLESPACE

或 CREATE TABLESPACE MANAGED BY AUTOMATIC STORAGE

例:1.在Windows上,使用3个不同的驱动器上的目录,创建SMS表空间 CREATE TABLESPACE TS1 MANAGED BY SYSTEM USING (‘d:\\nxz_tbsp’,’e:\\nxz_tbsp’,’f:\\nxz_tbsp)

2.使用各自有5000页的两个文件容器创建了一个DMS表空间: CREATE TABLESPACE TS2 MANAGED BY DATABASE

USING (FILE’d:\\db2data\\acc_tbsp’ 5000,FILE’e:\\db2data\\acc_tbsp’ 5000)

在创建DMS表空间时,表空间文件容器不需要重建,DB2自动来创建,但裸设备容器无法自动创建,需要root用户参与。

在示例中,为表空间容器提供了显式的名称。但是,如果指定相对容器名,那么将在为该数据库创建的子目录中创建容器。

在创建表空间容器时,数据库管理器会创建任何不存在的目录和文件。例如,如果将容器指定为/prod/user_data/container1,而目录/prod不存在,那么数据库管理器会创建目录/prod和/prod/user_data。

在Linux/UNIX上,数据库管理器创建的任何目录都是使用权限位700创建的。这意味着只有实例所有者才拥有读写访问权和执行访问权。因为只有实例所有者具有这种访问权,所以当正在创建多个实例时,可能会出现下列情况:

·使用与上面描述的相同的目录结构,假定目录级别/prod/user_data不存在。 ·user1创建一个实例(默认情况下命名为user1),接着创建一个数据库,然后创建一个表空间,且/prod/user_data/container1作为该表空间的一个容器。

·user2创建一个实例(默认情况下命名为user2),接着创建一个数据库,然后创建一个表空间,且/prod/user_data/container2作为该表空间的一个容器。

因为数据库管理器根据第一个请求使权限位700创建了目录级别/prod/user_data,所以user2没有对这些目录级别的访问权,因此不能在这些目录中创建container2.在这种情况下,CREATE TABLESPACE操作将失败。

解决此冲突有两种方法:

·在创建表空间之前创建目录/prod/user_data,并将许可权设置为user1和user2创建表空间所需的任何访问权。如果所有级别的表空间目录都存在,那么数据库管理器不会修改访问权。

·在user1创建/prod/user_data/container1之后,将/prod/user_data的许可权设置为user2创建表空间所需的任何访问权。

如果数据库管理器创建了一个子目录,那么在删除该表空间时数据库管理器也可能将该子目录删除。

例:1.在AIX上创建了一个使用具有10000页的3个裸设备作为表空间容器的DMS表空间,并指定它们的I/O特征。

CREATE TABLESPACE TS1 MANAGED BY DATABASE

USING (DEVICE ‘/dev/rdblv6’ 10000,DEVICE ‘/dev/rdblv7’ 10000,DEVICE ‘/dev/rdblv8’ 10000) OVERHEAD 7.5 TRANSFERRATE 0.06

示例中的裸设备必须已经存在,且实例所有者和SYSADM组必须能够写入这些设备。 2.在Linux和UNIX系统上创建一个具有8KB页大小的SMS表空间。

CREATE TABLSESPACE SMS8K PAGESIZE 8192 MANAGED BY SYSTEM USING (‘FSMS_8K_1’ BUFFERPOOL BUFFERPOOL8K

示例中相关联的缓冲池必须具有相同的8KB页大小。而且只有在激活了创建的表空间

DB2 QQ交流群281113952

所引用的缓冲池之后才能使用该表空间。

2.创建系统临时表空间

系统临时表空间用来存储分组、排序、连接、重组、创建索引操作。数据库必须始终至少有一个这样的表空间。创建数据库时,定义的3个默认表空间之一便是名为“TEMPSPACE1”的系统临时表空间。

创建名为tmp_tbsp的表空间

CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp MANAGED BY SYSTEM USING (‘d:\\tmp_tbsp’,’e:\\tmp_tbsp’)

对于每个页大小至少应该具有一个和该页大小匹配的系统临时表空间。

3.创建用户临时表空间

用户临时表空间不是在创建数据库时默认创建的。如果应用程序需要使用临时表,则需要创建用来驻留临时表的用户临时表空间。用户临时表空间通常用来批量插入、批量更新和批量删除以加快速度。使用DECLARE GLOBAL TEMPORARY TABLE语句声明临时表时必须要求用户临时表空间存在。

创建名为usr_tmp的用户临时表空间

CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY DATABASE USING(FILE ‘d:\\db2data\%user_tbsp’ 5000,FILE’e:\\db2data\%user_tbsp’ 5000)

3.2.2 表空间维护

1.查看表空间

可以使用DB2 LIST TABLESPACES[SHOW DETAIL]来查看表空间的详细信息。 LIST TABLESPACES命令的输出信息如下: 当前数据库的表空间 表空间标识 = 0 名称 = SYSCATSPACE 类型 = 数据库管理空间 内容 = 所有持久数据。常规表空间。 状态 = 0x0000 详细解释:正常 表空间标识 = 1 名称 = TEMPSPACE1 类型 = 系统管理空间 内容 = 系统临时数据 状态 = 0x0000 详细解释:正常 表空间标识 = 2 名称 = USERSPACE1 类型 = 数据库管理空间 内容 = 所有持久数据。大型表空间。 状态 = 0x0000 详细解释:正常 DB2 QQ交流群281113952

图示中的3个表空间都是通过CREATE DATABASE 命令自动创建的。用户可以通过在该命令中定制表空间选项来覆盖默认的表空间创建选项。但是在创建数据库时必须创建一个系统编目表空间和至少一个常规表空间,以及至少一个系统临时表空间。通过使用CREATE DATABASE命令或以后使用CREATE TABLESPACE命令,可以创建更多的所有类型的表空间(系统表空间除外)。上述3个表空间中,系统编目表空间和系统临时表空间都是只读的,用户不可以在上面创建用户表,如下所示:

C:\\Documents and Settings\\Administrator>db2 create table t(i int) in syscatspace

DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。 在SQL 处理期间,它返回: SQL0287N SYSCATSPACE 不可用于用户对象。 SQLSTATE=42838 查看表空间及容器的属性

指定LIST TABLESPACES命令的SHOW DETAIL选项将显示其他信息: LIST TABLESPACES SHOW DETAIL

默认情况下,将列出创建数据库时所创建的3个表空间。LIST TABLESPACES SHOW DETAIL命令的输出信息如下:

要列出容器,我们需要使用以上输出中的Tablespace ID: LIST TABLESPACE CONTAINERS FOR 2

查看表空间容器的情况,使用LIST TABLESPACE CONTAINERS命令:

该命令将列出指定表空间中的所有容器。如上所示的路径指向容器物理上所在的位置。 表空间状态

查看一个数据库中的表空间的状态,可以使用命令: LIST TABLESPACES SHOW DETAIL

一个表空间可以有多种不同的状态,如下所示:

DB2 QQ交流群281113952

2.修改表空间

可使用控制中心或命令行来改变表空间。要使用命令行来改变表空间,可使用ALTER TABLESPACE语句。可以改变SMS、DMS和自动存储器容器,还可以重命名表空间,并将它从脱机方式改为联机方式。

对于SMS表空间,我们只能增加容器,对于DMS表空间,可以添加、扩展、重新平衡、删除或减少容器,或者调整容器大小。

添加或扩展DMS容器

通过将一个或多个容器添加至DMS表空间,可以增大该表空间的大小。

当将新容器添加到表空间或扩展现有容器时,可能会发生表空间重新平衡(rebanlance)。重新平衡过程涉及将表空间扩展数据块从一个位置移至另一位置。在此过程中,将尝试在表空间内分割数据。重新平衡不必在所有容器上进行,但这取决于许多因素,例如现有容器配置、新容器的大小和表空间满的程度。

在重新平衡期间,不限制对该表空间的访问。如果需要添加多个容器,那么应该同时添加这些容器,以减少重新平衡的次数。虽然重新平衡期间表空间仍然可以访问,但是我们还是尽量避免在业务高峰期间增减容器,因为数据重新平衡期间系统上有很大的I/O活动。

要使用命令行将容器添加到DMS表空间,可以使用以下命令:

ALTER TABLESPACE ADD (DEVICE ‘,FILE ‘)

例:在Linux/UNIX系统上,将两个各含10000页的新设备容器添加到表空间 ALTER TABLESPACE TS1 ADD (DEVICE ‘/dev/rhd9’ 10000, DEVICE ‘/dev/rhd10’ 10000) 添加容器会涉及到表空间容器的重新平衡,如果不想重新平衡表空间,可以使用表空间

本文来源:https://www.bwwdw.com/article/ot15.html

Top