DB2管理员认证二

本教程介绍了DB2数据库的创建,包括设置系统目录表、分配恢复日志等。还讲解了模式的使用,可对数据库对象逻辑分类。同时阐述了各种表空间状态,如SMS和DMS表空间的特征及创建方法,以及缓冲池、表、索引等DB2对象的创建和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本教程的内容

在本教程中,您将学习如何:

  • 创建数据库 使用模式 确定各种表空间状态 创建和操作各种 DB2 对象 创建 SMS 表空间并理解其特征
  • 创建 DMS 表空间并理解其特征

数据库目录

每个数据库管理器实例都有一个系统数据库目录文件,为该实例编目的每个数据库都在该文件中有一项。发出 create database 命令时就对数据库进行了隐式编目,也可以用 catalog database 命令对数据库进行显式编目。

本地数据库目录文件存在于每个定义了数据库的驱动器或路径中。每一个可从该位置访问的数据库在该目录中都有一项。

创建数据库

当您创建数据库时,会为您完成下面的每一项任务:

  • 设置数据库所需的所有系统目录表分配数据库恢复日志创建数据库配置文件和缺省值集
  • 将数据库实用程序绑定到数据库

create database 命令

要创建数据库,请使用:

create database

命令。

您可以有选择地指定以下各项:

  • 用于目录分区的数据库分区号创建数据库所在的驱动器或路径代码集和地域排序序列缺省的扩展块大小是否要自动配置数据库
  • CATALOG、TEMPORARY 和 USERSPACE1 表空间的表空间定义

缺省数据库

CREATE DATABASE 命令创建了个缺省表空间:

  • SYSCATSPACE:用于系统目录表TEMPSPACE1:用于系统创建的临时表
  • USERSPACE1:用于用户创建的对象的缺省表空间

不可以删除 SYSCATSPACE。一旦创建了另一个临时表空间就可以删除 TEMPSPACE1 表空间。一旦创建了另一个用户创建的表空间就可以删除 USERSPACE1 表空间。


系统目录

为每个数据库创建并维护一组系统目录表。这些表包含了有关数据库对象(例如表、视图、索引和包)定义的信息和有关用户对这些对象的访问权类型的安全性信息。这些表存储在 SYSCATSPACE 表空间中。

目录结构

create database 命令允许您根据操作系统来指定在哪个驱动器或目录上创建数据库。

  • 如果没有指定驱动器或目录,那么就在 DFTDBPATH 实例(数据库管理器)配置参数所指定的路径上创建数据库。
  • 如果没有指定驱动器或目录,而且也没设置 DFTDBPATH 实例级的配置参数,那么就在执行 create database 命令的驱动器或路径上创建该数据库。

create database 命令创建了一系列子目录,如下图所示:

用 CREATE DATABASE 命令创建的目录结构

第一个子目录根据在其中创建数据库的实例的所有者命名。在这个子目录下,DB2 创建了一个目录,指出在哪个数据库分区中创建数据库。 对于未分区数据库,目录将是 NODE0000。对于分区数据库,目录将命名为 NODExxxx,其中 xxxx 将是由四位数字组成的数据库实例的分区号,就如 db2nodes.cfg 文件中指明的那样。 例如,对于分区号 43,目录会是 NODE0043。请注意在 Windows 中,实例实际上没有实例所有者,因此实例名(例如 DB2)将用来替代实例所有者的标识。由于在同一驱动器或目录上可以创建多个数据库,因此每个数据库都必须拥有自己唯一的子目录。 在 NODExxxx 目录下,在该驱动器/目录上创建的每个数据库都会有一个 SQLxxxxx 目录。例如,假定我们有两个数据库:MYDB 和 SAMPLE,它们都是在 Windows 系统的 C: 驱动器上创建的。将有两个目录:SQL00001SQL00002

为了确定在哪个目录下创建了数据库,请输入命令 list database directory on C:。这条命令会产生类似下面这样的输出:

数据库目录

在上面的示例中,在 NODExxxx 目录下的 SQL00001 目录中创建数据库 SAMPLE,而在 NODExxxx 目录下的 SQL00002 目录中创建数据库 MYDB。缺省情况下:

  • 系统目录表空间(SYSCATSPACE)将使用目录 SQLT0000.0 系统临时表空间(TEMPSPACE1)将使用目录 SQLT0001.0
  • 缺省的用户表空间(USERSPACE1)将使用目录 SQLT0002.0

还有一个名为 SQLOGDIR 的子目录,用于保存数据库日志文件。这是保存日志文件的缺省位置,但是一旦创建了数据库就可以更改该位置。

Linux/UNIX create database 命令示例

要在目录(文件系统)/database 上创建数据库,请使用下面这个命令:

 
create database sample on /database

如果是在定义了数据库分区 0 的服务器上的实例 dbinst 中执行该命令,那么将会创建以下目录结构:

  • /database/dbinst/NODE0000/sqldbdir
  • /database/dbinst/NODE0000/SQL00001

Windows create database 命令示例

要在 D: 驱动器上创建数据库,请使用下面这个命令:


create database sample on D:

如果是在定义了数据库分区 0 的服务器上的实例 dbinst 中执行该命令,那么将会创建以下目录结构:

  • D:/dbinst/NODE0000/sqldbdir
  • D:/dbinst/NODE0000/SQL00001

创建 USERSPACE1 表空间作为 DMS

要创建数据库并将 USERSPACE1 表空间定义为 DMS(请参阅 DMS 表空间)以使用两个文件容器,请使用以下命令:在 Linux 或 UNIX 上:


create database sample2 user table space managed by database 
            using(file '/dbfiles/cont0' 5000, file '/dbfiles/cont1' 5000)

在 Windows 上:


create database sample2 user table space managed by database 
            using(file 'c:/dbfiles/cont0' 5000, file 'c:/dbfiles/cont1' 5000)

以用户定义的容器创建 TEMPSPACE1 表空间

要创建数据库并定义 TEMPSPACE1 表空间以使用两个 SMS 容器(请参阅 SMS 表空间),请使用以下命令:在 Linux 或 UNIX 上:


create database sample3 temporary tablespace managed by system 
            using('/dbfiles/cont0', '/dbfiles/cont1')

在 Windows 上:


create database sample3 temporary tablespace managed by system 
            using('c:/dbfiles/cont0', 'c:/dbfiles/cont1')

更改数据库的排序序列

命令(在 UNIX 中):


creates a database SAMPLE on /mydbs collate using identity

creates a database SAMPLE on D: collate using identity

创建数据库并逐个字节地比较字符串,因为已经将排序序列设置成了 identity

模式是什么?

模式是用于数据库中创建的数据库对象的高级限定符。它是数据库对象的集合,这些对象有表、视图、索引或触发器等等。它对数据库对象进行了逻辑分类。当您将数据组织成表时,将表和其它相关对象组合在一起可能也很有好处。

这可以通过使用 create schema 命令定义模式来完成。有关模式的信息保存在您所连接的数据库的系统目录表中。当创建其它对象时,可以将它们放置在该模式内。

系统模式

系统模式集是和每个数据库一起创建的,并且它们被放置到 SYSCATSPACE 表空间中:

  • SYSIBM:
    • 基本系统目录
    • 建议不要进行直接访问
    SYSCAT:
    • PUBLIC 被授予该模式的 SELECT 权限 对只读视图编目
    • 这是获取目录信息的推荐方式
    SYSSTAT:
    • 可更新的目录视图 - 影响优化器
  • SYSFUN:
    • 用户定义的函数

如何在 DB2 中使用模式?

使用模式来全限定表或其它对象名,如下所示: schemaname.tablename

多张表可以有同一名称,但是要有不同的模式名。因此,表 user1.staff 不同于 user2.staff。因此,您可以使用模式在 DB2 数据库内创建逻辑数据库。

要创建模式,请使用 create schema 命令。

谁可以使用模式?

当您可以创建模式时,可以使用 authorization 关键字指定模式所有者;如果您没有这么做,那么执行 create schema 语句的授权标识将是模式的所有者。还可以同时将模式的特权授予用户和/或组。(请参阅本教程系列中的第一个教程以获取有关特权的更多信息。)

一旦模式存在,模式所有者就可以将模式的 CREATE_IN 特权授予其他用户或组。

在创建对象时指定模式

可以如下显式地指定对象的模式名:


create table DWAINE.table1 (c1 int, c2 int)

如果用户 DWAINE 连接到数据库 SAMPLE,并发出下面这个语句: create table t2 (c1 int)

那么就在该数据库中创建模式 DWAINE(只要还未取消用户 DWAINE 的 IMPLICT_SCHEMA 特权)和表。

请注意用来连接数据库的标识是授权标识。

在使用 DML 命令时指定模式

当对数据库对象使用 DML 命令(例如,select、insert、update 和 delete)时:

  • 可以在对象名中显式地指定对象模式,即 schema1.table1。可以使用 set current schemaset current sqlid 命令指定对象模式。
  • 如果没有显式地指定对象模式,那么会把模式设置成当前的授权标识。

例如,如果用户 DWAINE 连接到数据库 SAMPLE,并发出下面这个语句:

select * from t2

那么就从该表(如果该表存在的话)中选择 DWAINE.T2。否则就返回错误。

确定表空间的状态
要查找数据库中表空间的状态,请使用:
list tablespaces show detail
表空间状态

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

不同的表空间状态

简介

本章将讨论以下各项的用途和用法:

  • 缓冲池
  • 表空间
  • 表和索引
  • 视图
  • 标识列
  • 临时表
  • 约束
  • 触发器
缓冲池

数据库缓冲池区是一块内存,主要用途是:在从磁盘读取表索引和数据页以准备进行扫描和修改时,将它们高速缓存起来。缓冲池区通过允许从内存(而不是磁盘)访问数据,从而帮助改进数据库系统性能。由于内存访问比磁盘访问快得多,所以 DB2 需要从磁盘读取或写到磁盘的次数越少,系统运行得就越好。

在创建数据库时,会为数据库创建一个缺省的缓冲池。这个缓冲池名为 IBMDEFAULTBP,它的页大小为 4 KB,并且缺省缓冲池大小因操作系统而异。对于 Windows,缺省缓冲池大小为 250 页(即 1 MB);对于 UNIX,缺省缓冲池大小为 1,000 页(即 4 MB)。不能删除缺省的缓冲池;但是可以使用 alter bufferpool 命令更改它的大小。

创建缓冲池

create bufferpool 命令有多个选项,可以用来指定以下内容:

  • 缓冲池名称:指定缓冲池的名称。这个名称不能用于其它任何缓冲池,并且不能以字符 SYS 或 IBM 开头。 immediate:这个选项规定:如果系统上有足够的可用内存,那么就立即创建缓冲池。如果数据库共享内存中没有足够的保留空间可用来分配给新缓冲池,那么就返回警告,并且缓冲池的创建将延迟(DEFERRED),如下所示。(请注意 immediate 是缺省值。) deferred:指定将在下一次停止并重启数据库时创建缓冲池。 all dbpartitionnumbs:指定将在数据库的所有分区上创建缓冲池。如果没有指定数据库分区组,这就是缺省值。 database partition group:指定在哪个(或哪些)数据库分区组上创建缓冲池。将在属于指定的数据库分区组的所有数据库分区上创建缓冲池。 size:指定缓冲池的大小,用页数进行定义。在分区数据库中,这将是缓冲池所在的所有数据库分区的缺省大小。 numblockpages:指定将在缓冲池的基于块的区域中创建的页数。numblockpages 的实际值可能与指定值有差别,因为这个指定值必须是 blocksize 的倍数。缓冲池中基于块的区域不能大于整个缓冲池大小的 98%。指定值为 0 将对缓冲池禁用 I/O 块。 blocksize:指定在缓冲池基于块的区域中给定块内的页数。块大小必须介于 2 页和 256 页之间;缺省值是 32 页。 pagesize:指定用于缓冲池的页大小。缺省的页大小是 4 KB(即 4096 个字节)。可以用字节或千字节指定页大小。
  • extended storagenot extended storage:指定是否要将缓冲池损坏页复制到名为扩充存储器(extended storage)的二级高速缓存中。从扩充存储器检索数据的效率要比从磁盘检索数据高,但是比从缓冲池检索数据低,因此它不适合于 64 位环境。

注:缓冲池的页大小和名称一旦定义好了就不能改变。

create bufferpool 语句示例

以下语句:


create bufferpool BP1 size 25000 

创建了一个名为 BP1、大小为 100 MB(25000 个 4 KB 大小的页)的缓冲池。由于没有指定页大小,所以缓冲池使用缺省的 4 KB 页大小。由于 IMMEDIATE 选项是缺省选项,所以只要有足够的可用内存可以满足该请求,就可以立即分配并使用该缓冲池。以下语句:


create bufferpool BP2 size 25000 pagesize 8 K

创建了一个名为 BP2、大小为 200 MB(25000 个 8 KB 大小的页)的缓冲池。该缓冲池使用 8 KB 的页大小。由于 immediate 选项是缺省选项,所以只要有足够的可用内存可以满足该请求,就可以立即分配并使用该缓冲池。以下语句:


create bufferpool BP3 deferred size 1000000

创建了一个名为 BP3、大小为 4 GB(1,000,000 个 4 KB 大小的页)的缓冲池。由于没有指定页大小,所以缓冲池使用缺省的 4 KB 页大小。由于指定了 deferred 选项,所以在停止并重启数据库之前不会分配缓冲池。

创建表

为了在数据库中创建表,首先必须连接到该数据库。另外,必须拥有实例的 SYSADM 权限,或者拥有数据库的 DBADM 权限或 createtab 特权。创建表时,可以指定以下内容:

  • 模式表名列定义主键/外键
  • 数据、索引和长对象的表空间

下图举了一个示例:

创建表语法

在何处创建表?

如果不用 in 子句创建表,那么表数据(及其索引和 LOB 数据)按下列先后顺序放置:

  • 在 IBMDEFAULTGROUP 表空间中(如果它存在并且页大小足够)在用户创建的表空间中,该表空间的页大小是满足该表的一个最小值
  • 在 USERSPACE1 中(如果它存在并且页大小足够)

ININDEX INLONG IN 子句指定常规的表数据、索引和长对象存储在哪些表空间中。请注意这只适用于 DMS 表空间。

获取表信息

可以通过下列命令获取表信息:

  • list tables - 列出当前用户的表 list tables for all - 列出数据库中所定义的所有表 list tables for schema schemaname - 列出具有指定模式的表
  • describe table tablename - 显示指定表的结构

例如,下面这个命令:


describe table department

产生了以下输出:

描述表的输出

索引

索引可以:

  • 是升序或是降序(如果没有指定,缺省值是升序)是唯一的,也可以是不唯一的(如果没有指定,缺省值是不唯一的)是复合的用来执行群集是双向的(这由 allowdisallow reverse scans 控制的)
  • 包括其它列(这只适用于唯一索引)。

下面的多个 create unique 语句说明了上面这些选项:


create unique index itemno on albums (itemno) desc
create index clx1 on stock (shipdate) cluster allow reverse scans
create unique index incidx on stock (itemno) include (itemname)
create index item on stock (itemno) disallow reverse scans collect detailed statistics
标识列

标识列是表中的数字列,它使 DB2 自动为插入到该表的每一行生成唯一的数值。一个表最多有一个标识列。该列的值可以由 DB2 以 ALWAYS 方式或缺省方式生成:

  • 如果以 ALWAYS 方式生成值,那么 DB2 数据库就始终生成它们,并且不允许应用程序提供显式值
  • 如果是在缺省情况下生成值,那么可以由应用程序显式提供这些值;只有在应用程序不提供值的情况下 DB2 才生成该值。因此,DB2 不能保证这些值的唯一性。这个选项往往用于数据传播或表的装入/卸装。

让我们研究一下一个示例。假定表的创建使用了下面这个命令:


create table inventory (partno INTEGER GENERATED ALWAYS AS IDENTITY
          (START WITH 100 INCREMENT BY 1), description CHAR(20) )

以及下列几个语句:

语句结果
insert into inventory VALUES (DEFAULT,'door') 
insert into inventory (description) VALUES ('hinge') 
insert into inventory VALUES (200,'windor') 
insert into inventory (description) VALUES ('frame')
inserts 100,door
inserts 101,hinge
error
inserts 102,frame

然后语句 SELECT * FROM inventory 给出了下列结果:


100 door
101 hinge
102 frame

视图

视图是从一个或多个基本表、别名或视图中派生出的,在检索数据时可以与基本表交替使用。当更改视图中所显示的数据时,则在表本身中更改该数据。可以创建一个视图以在允许对其它数据进行较一般访问的同时限制访问某些敏感的数据。用于视图的数据并不和表分开存储。换句话说,除了系统目录中存在视图的定义以外,视图不使用数据库中的任何其它空间。视图的创建者至少需要拥有对视图定义中所引用的基本表的 SELECT 特权。有关所有现有视图的信息存储在:

  • SYSCAT.VIEWSSYSCAT.VIEWDEP
  • SYSCAT.TABLES

以下这些 create view 语句说明了视图是如何工作的:


create view DEPTSALARY AS SELECT DEPTNO, DEPTNAME, SUM(SALARY) 
          AS TOTALS FROM PAYROLL GROUP BY DEPTNO,DEPTNAME
create view EMPSALARY AS SELECT EMPNO, EMPNAME, SALARY FROM PAYROLL, 
          PERSONNEL WHERE EMPNO=EMPNUMB

with check option

with check option 规定这样一个约束:通过视图插入或更新的每一行都必须符合视图的定义。不符合视图定义的行无法满足视图的搜索条件。例如,请研究下面这个命令:


create view emp_view2 (empno, empname, deptno) AS (SELECT id, name, 
          dept FROM employee WHERE dept = 10)with check option

当这个视图用来插入新值或更新为新值时,with check option 限制了 dept 列的输入值。

约束

DB2 中有许多种约束:

  • 引用完整性约束唯一性约束检查约束
  • 信息约束

不能直接修改约束;而是必须将它删除,然后创建一个具有您想要特征的新约束。

我们将在接下来的几页中逐个讨论这些约束。

引用完整性约束

 

引用完整性约束是在创建表时定义的,或者是在之后使用 alter table 语句定义的。建立引用完整性的子句有:

  • primary key 子句unique constraint 子句foreign key 子句
  • references 子句

例如:


create table artists (artno INT, ...  primary key (artno) foreign key dept (workdept) 
          references department on delete no action)

让我们了解一下各种引用完整性规则: 插入规则:

  • 有一个隐式规则,在没有找到父项时取消插入。

删除规则:

  • Restrict:如果有从属行就不能删除父行。Cascade:删除父表中的行会自动删除其从属表中的任何相关行。No Action(缺省值):在应用了所有其它引用约束之后强制每个子行的父行都存在。
  • Set Null:外键字段设置成 null;其它列保持不变。

更新规则:

  • Restrict:如果从属表中的行与键的初始值相匹配,则不更新父键。
  • No Action(缺省值):如果从属表中没有任何行与父键相匹配,则不更新父键。

唯一性约束

唯一性约束可以用作外键约束的主键,就象一个显式声明的主键。这允许对同一张表内的不同列设置 RI 约束(请参阅引用完整性约束)。

唯一性约束强制使列中的值变成唯一;列不能包含空值。

检查约束

检查约束用来强制执行表级别的数据完整性。它强制表中的值符合该约束。所有的后续插入和更新都必须符合对表的已定义的约束,否则这样的语句会失败。

如果表中的现有行不满足约束,则不能定义该约束。可以关闭约束检查以加快大量数据的添加,但是该表处于检查暂挂(CHECK PENDING)状态。

信息约束

信息约束是可以被优化器所使用,但是在运行时期间不能实施的规则。因为其它约束可能会导致插入、更新或删除操作的开销,所以如果应用程序已经验证了数据,那么信息约束可能是个较好的备用办法。信息约束可以是:

  • ENFORCED:通过数据库管理器在正常操作(比如插入、更新或删除)期间强制执行该约束。 NOT ENFORCED:使用这一约束时,当表中有数据违反该约束时 DB2 可能会返回错误结果。 ENABLE QUERY OPTIMIZATION:该约束在适当环境下可以用于查询优化
  • DISABLE QUERY OPTIMIZATION:该约束不能用于查询优化

触发器

触发器定义了一组操作,这些操作可以通过一个对指定的基本表所进行的操作来激活(或称为触发)。触发了这些操作,可能会对数据库造成其它更改或产生异常。可以在插入、更新或删除之前之后激发触发器。触发器用于:

  • 验证:以这种方式使用时,触发器类似于约束,但是更灵活。 调节:以这种方式使用时,触发器允许将新数据修改/调节成预定义值。
  • 完整性:以这种方式使用时,触发器类似于引用完整性,但是更灵活。

存储三角

DB2 存储三角

在 DB2 数据库内,在四个不同的级别上定义并控制着数据和索引的存储。为了适应分区数据库,有一个抽象层称为分区组(partition groups),如上图所示。分区组是数据库内一个或多个数据库分区的组合或集合。创建表空间时,将它分配给分区组,并且它只在属于分区组的数据库分区上创建。每个表空间必须有一个或多个容器,这些容器定义了表空间的物理存储。容器可以是操作系统目录、大小已预先确定的文件、诸如未格式化的硬盘驱动器这样的裸设备、硬盘驱动器上的分区或逻辑卷。

表空间

表空间是用于定义表和索引在数据库内存储位置的逻辑实体。由于所有 DB2 表和索引都驻留在表空间中,所以这允许对表和索引数据的物理存储位置进行完全控制。可以使用一个或多个底层物理存储设备来创建表空间,这些设备便是容器。这使得我们能创建将在任何物理环境中提供性能最佳的物理数据库设计。有关数据库中表空间的更多详细情况可以使用以下命令来获得:

  • get snapshot for tablespaces
  • list tablespaces

简介

系统管理的空间(System Managed Space,SMS)表空间使用操作系统所提供的文件系统管理器来分配和管理表的存储空间。在 SMS 表空间内,每个容器都是一个操作系统目录,而表对象被创建成这个目录中的文件。创建 SMS 表空间时,用户必须指定每个容器的目录名。通过对每个对象使用唯一的文件名,DB2 将在表空间中所使用的目录内创建表。

如果在多个容器中创建一个表空间,那么 DB2 将均衡写入到各个容器的数据量。由于一旦创建了 SMS 表空间,就不能动态地将容器添加到 SMS 表空间中,因此在创建该表空间时要了解该表空间的大小需求并创建所有必需的容器,这一点很重要。

SMS 表空间特征

对于 SMS 表空间:

  • 所有表数据和索引都共享同一个表空间。表空间中的每张表都有其自己的文件名,可由所有容器使用。文件扩展名表示存储在文件中的数据类型。文件大小有可能动态增长,其大小上限由容器数量、操作系统在文件系统大小方面的限制以及操作系统在单个文件大小方面的限制所决定。当单个容器中的所有空间都已分配之后,就认为该表空间已满,即使其它容器中还有剩余空间。只可以将新容器添加到还没有任何容器的分区上的 SMS 中。
  • 在 Linux 或 UNIX 上,文件系统大小可能会增加。

SMS 表空间非常便于管理,建议将它用作 TEMP 表空间。

创建 SMS 表空间

要创建 SMS 表空间,请使用下面这个命令:


create table space TS1 managed by system using ('path1', 'path2', 'path3')

在给 SMS 容器指定路径时,该路径可以是某个目录的绝对路径或相对路径。如果目录不存在,DB2 会创建一个。如果目录存在,它不能包含任何文件或子目录。例如,下面这个命令:

 
create table space ts1 managed by system using ('D:/DIR1')

指定了目录的绝对路径;因此,如果该目录原本不存在,那么 DB2 将在数据库服务器的 D: 驱动器上创建 DIR1 目录。下面这条命令:


create tablespace ts2  managed by system using ('DIR1')

指定相对路径 DIR1;因此 DB2 将在数据库主目录下创建 DIR1 目录。以下 SQL 语句用三个容器在三个不同的驱动器或文件系统上创建了一个 SMS 表空间。请注意,表空间名是相同的,下列示例显示了 UNIX/Linux 和 Windows 表空间定义的差别:


create tablespace smstbspc managed by system 
          using ('d:/tbspc1', 'e:/tbspc2', 'f:/ tbspc3')
create tablespace smstbspc managed by system 
          using ('/dbase/container1', '/dbase/container2', '/dbase/container3')


改变 SMS 表空间


改变(alter)SMS 表空间只能用来更改预取(prefetch)大小。不能使用 alter 命令将容器添加到 SMS 表空间中。
但是,可以在重定向恢复期间重新定义、添加或除去容器。


启用多页文件分配


在 SMS 表空间中,缺省情况下对象增大时,对象文件每次扩展一页。 将大量行插入到表中时,这可能会产生大量 I/O,这会对数据库性能造成负面影响。db2empfa 工具使 DB2 能一次给对象文件分配或扩展一个完整的扩展块。 这个工具可以在数据库级上启用;当它运行时,DB2 将分配空白页以填满指定数据库内所有 SMS 表空间容器中的最后一个扩展块。

注:一旦运行了 db2empfa 工具,就不能撤销它的操作结果。

简介

使用数据库管理的空间(Database Managed Space,DMS)表空间时,数据库管理器控制着表空间内的存储分配。在 DMS 表空间内,容器可以是操作系统文件、裸逻辑卷或裸磁盘分区。有了 DMS 表空间,创建该表空间时就预先分配空间。创建 DMS 表空间时,用户必须指定文件、逻辑卷或磁盘分区的名称以及(一个或多个)容器的大小。

DMS 特征

对于 DMS 表空间:

  • 空间是在创建该表空间时分配的。可以使用 alter tablespace 命令添加或删除表空间容器。添加或删除容器时,会自动并异步地重新均衡数据。可以动态扩展、减少容器的数目或调整其大小。表空间容量只受物理存储器限制。文件系统 I/O 用于 DMS 文件操作。
  • 直接 I/O 用于 DMS 原始操作。

DMS 表空间考虑到了可能的最高性能,对于 OLTP 尤其如此。它们还允许进行最灵活的数据放置,因为您可以将表对象(也就是,数据、索引、长型 varchar/LOB 数据)分割到不同的表空间中。

使用设备容器创建 DMS 表空间

在 Linux 和 UNIX 中,设备容器被映射到底层逻辑卷。在 Windows 中,设备容器被映射到未格式化的磁盘分区。创建了容器的设备不能用于其它任何用途,换句话说,它不能包含任何文件系统,并且不应当被格式化。指定容器的大小时,请确保使用了设备上的所有空间,因为任何未用的空间都不能用于其它任何用途。但是,如果今后要扩展表空间容器或调整表空间容器的大小,那么还可以使用该空间。可以用页数、KB、MB 或 GB 指定容器的大小。下面是一些创建 DMS 表空间的命令示例:


create tablespace mytbspc managed by database using (device '/dev/rmydisk1' 10000)
create tablespace mytbspc managed by database using (device '//./G:' 10000)
create tablespace mytbspc managed by database using (device '/dev/rmydisk1' 100M)
create tablespace mytbspc managed by database using (device '//./G:' 100M)


用文件容器创建 DMS 表空间


DB2 还可以使用用于 DMS 容器的文件。指定一个文件时,DB2 将给该文件预先分配指定的大小。对于 DMS 文件,您可以在同一个文件系统或底层卷上拥有容器,这与设备容器不同。 可以用页数、KB、MB 或 GB 指定容器的大小。更多的一些命令示例:


create tablespace mytbspc managed by database using (file '/dbfiles/ts1c1' 10000)
create tablespace mytbspc managed by database using (file 'G:/dbfiles/ts1c1' 10000)
create tablespace mytbspc managed by database using (file '/dbfiles/ts1c1' 100M)
create tablespace mytbspc managed by database using (file 'G:/dbfiles/ts1c1' 100M)

改变 DMS 表空间

对于 DMS 表空间,alter database 命令可以用于:

  • 添加容器删除容器扩展容器调整容器的大小,使之更大或更小
  • 更改预取大小

SMS vs. DMS

下面的图表比较了 SMS 和 DMS 的优点:

比较 SMS 和 DMS

结束语

在本教程中我们讨论了:

  • 创建数据库模式的使用各种表空间状态创建并操作各种 DB2 对象创建 SMS 表空间并理解其特征
  • 创建 DMS 表空间并理解其特征

现在您可以准备参加 DBA 认证考试数据放置部分的测验了。祝您好运!


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值