Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102535
  • 博文数量: 13
  • 博客积分: 507
  • 博客等级: 下士
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-29 16:37
文章分类

全部博文(13)

文章存档

2012年(3)

2011年(3)

2009年(1)

2008年(6)

我的朋友

分类:

2008-03-07 09:58:39

在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。


DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

 


CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。






所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。





三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。



下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。

阅读(4105) | 评论(0) | 转发(0) |
0

上一篇:DB2中的权限

下一篇:赏梅

给主人留下些什么吧!~~