db2表空间详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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’) 创建自动存储器表空间

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页大小。而且只有在激活了创建的表空间

相关文档
最新文档