创建数据库

本文详细介绍了使用DB2创建数据库的过程,包括不同类型的表空间管理方式、容器定义、页面大小等关键参数设置,并通过示例命令展示了具体应用。

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

3.1.3  创建数据库(3)

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

  1. |--MANAGED BY--------------------------------------------------->  
  2. |>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->  
  3.    '-DATABASE USING--(----+-FILE---+--'container-string' --number-of-pages-+--)-'                          '-DEVICE-' 
  4.   >--+-----------------------------+------------------------------>  
  5.    '-EXTENTSIZE--number-of-pages-' 
  6.   >--+-------------------------------+---------------------------->  
  7.    '-PREFETCHSIZE--number-of-pages-' 

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

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

  1. SYSTEM USING ('container string'

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

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

  1. DATABASE USING ( FILE/DEVICE 'container string' number of pages|K|M|G ) 

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

对于FILE容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于DEVICE容器,容器字符串必须是设备名而且这个设备必须已经存在,对于DEVICE容器通常需要使用操作系统root权限创建逻辑卷并且赋予DB2实例使用的权限,一般通过UNIX/Linux的chown命令实现这一点。

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

  1. EXTENTSIZE  number of pages 

EXTENTSIZE指定数据库可以写到一个容器中的PAGESIZE页面数量,达到这个数量之后将跳到下一个容器。EXTENTSIZE值还可以指定为一个整数,后面跟着K、M或G。数据库管理程序在存储数据时重复地循环使用各个容器。EXTENTSIZE大小是在表空间级定义的。一旦为表空间指定了扩展数据块大小,就不能改变了。数据库配置参数 DFT_EXTENT_SZ指定数据库中所有表空间的默认扩展数据块大小。这个值的范围是2到256个页面;因此,绝对大小是从8KB到1024KB(对于4KB页面),或者从16 KB到2048KB(对于8KB页面)。可以在CREATE TABLESPACE语句中使用EXTENTSIZE参数覆盖这个数字。

  1. PREFETCHSIZE  number of pages 

PREFETCHSIZE指定在执行数据预获取时将从表空间中读取的PAGESIZE页面数量。连续的预读取是指数据库管理程序能够提前预测查询,在实际引用页面之前读取这些页面。这样查询就不需要等待底层操作系统执行I/O操作。这种异步的检索可以显著减少执行时间。可以通过修改CREATE TABLESPACE语句中的PREFETCHSIZE参数来控制执行预获取的积极程度。在默认情况下,这个值设置为DFT_PREFETCH_SZ数据库配置参数。这个值代表在DB2触发预读取请求时每次读取多少个页面。通过将这个值设置为扩展数据块大小的倍数,可以并行地读取多个扩展数据块。当表空间的容器在不同的硬盘上时,这个功能甚至效率更高。预读取大小还可以指定为一个整数,后面跟着K、M或G。

关于PREFETCHSIZE的设置,我们在后面表空间性能小节还会详细讲解。

CREATE DATABASE命令示例

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

  1. CREATE DATABASE MYDB  
  2. DFT_EXTENT_SZ 4  
  3. CATALOG TABLESPACE MANAGED BY DATABASE USING  
  4.   (FILE 'C:\DB2DATA\CATALOG.DAT' 2000, FILE 'D:\DB2DATA\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' 1200)  
  11.    EXTENTSIZE 24  
  12.    PREFETCHSIZE 48 

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

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

DFT_EXTENT_SZ 4:这个参数告诉DB2默认的扩展数据块大小是4个页面,除非在创建表空间时显式地声明,否则默认使用这个值。

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

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

EXTENTSIZE 8:EXTENTSIZE是8个页面。这个设置会覆盖DFT_EXTENT_SZ。

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

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

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

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

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

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

PREFETCHSIZE 48:查询处理期间,同时预读取48个页面。

上面我们介绍了关于如何创建DB2数据库的背景知识。在大多数情况下,CREATE DATABASE命令的默认值提供了一个可以满足开发和测试需要的数据库。一旦决定将数据库转入生产环境,就需要对DB2使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。关于这部分内容我们会在3.2节中详细讲解。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值