数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
DB2 环境部署-在DB2 UDB V8.1中使用裸(raw)设备

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
原文出处: http://www.aiview.com/notes/db2_using_raw.htm
作者: 张洋 Alex_doesAThotmail.com
最后更新: 2004-7-14


 目录
  1. 一般信息
  2. 规划磁盘分区
  3. 创建RAW设备
  4. 创建数据库
  5. 规划日志以及备份文件存储
  6. 额外信息
  7. 参考资源
一般信息

本文中的命令和代码在以下环境编译执行通过:

IBM xSeriers 345(Inter 32位)
RedHat Enterprise Linux 3.0
DB2 V8.1 for Linux
主机连接一个IBM EMP300 磁盘柜,用于数据库数据存储。磁盘柜共有6块磁盘,单块146GB,其中5块做成RAID5,剩余一块做备用盘。

RAID5中,校验信息不单独占用一个磁盘,而是根据算法平均分布在各个磁盘上,这样避免了读写校验信息产生的瓶颈。
假设在主机上已经安装好了一个DB2服务,创建了一个实例,名为db2,还未建立数据库,并且磁盘柜已经在系统下安装好驱动程序,我们获得的设备名为sdb,还未进行分区。

下面分步介绍在磁盘阵列上建立raw设备并进行数据规划和数据放置的操作步骤:

规划磁盘分区

以root登录,对磁盘阵列进行分区,在root提示符下键入:

#fdisk /dev/sdb

新增3个主分区sdb1,sdb2,sdb3,每个分区20GB,分别划分给系统目录表空间、默认的系统临时表空间和新增的32kb的临时表空间,
剩下空间约527GB全部划分给第4个扩展分区sdb4,在扩展分区中增加5个逻辑分区sdb5,sdb6,sdb7,sdb8,sdb9,前两个逻辑分 区各160GB,用作表存储的用户表空间,第三个逻辑分区为20GB,用作专门放置索引的用户表空间,余下的2个逻辑分区分别为80GB、93GB,这两 个逻辑分区使用ext3进行格式化,用于存放日志和数据库备份。
注意:sdb1-sdb7均未进行格式化操作,准备用作raw设备,由DB2自行管理。

以下是分好区的磁盘状态:

Disk /dev/sdb: 587.2 GB, 587257085952 bytes
254 heads, 63 sectors/track, 71677 cylinders
Units = cylinders of 16002 * 512 = 8193024 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 2501 20010469+ 83 Linux
/dev/sdb2 2502 5002 20010501 83 Linux
/dev/sdb3 5003 7503 20010501 83 Linux
/dev/sdb4 7504 71677 513456174 5 Extended
/dev/sdb5 7504 27502 160011967+ 83 Linux
/dev/sdb6 27503 47501 160011967+ 83 Linux
/dev/sdb7 47502 50002 20010469+ 83 Linux
/dev/sdb8 50003 60002 80009968+ 83 Linux
/dev/sdb9 60003 71677 93411643+ 83 Linux

创建RAW设备

打算用作raw设备的各个逻辑分区DB2不能够直接使用,需要使用raw命令创建raw设备名:
在root提示符下键入:

# raw -a

查询当前已经建立的raw设备名,目前为空,我们可以从第一个设备名用起,

在root提示符下键入:

# raw /dev/raw/raw1 /dev/sdb1 # 用于system catalog tablespace (4K)
# raw /dev/raw/raw2 /dev/sdb2 # 用于system temp tablespace (4K)
# raw /dev/raw/raw3 /dev/sdb3 # 用于system temp tablespace (32K)
# raw /dev/raw/raw5 /dev/sdb5 # 用于user tablespace1 (32K),存储表
# raw /dev/raw/raw6 /dev/sdb6 # 用于user tablespace1 (32K),存储表
# raw /dev/raw/raw7 /dev/sdb7 # 用于user tablespace2 (32K),存储索引

至此,我们创建了6个raw设备名,用于交给DB2直接管理,查看一下已经创建的raw设备名的情况:

# raw -a

/dev/raw/raw1: bound to major 8, minor 17
/dev/raw/raw2: bound to major 8, minor 18
/dev/raw/raw3: bound to major 8, minor 19
/dev/raw/raw5: bound to major 8, minor 21
/dev/raw/raw6: bound to major 8, minor 22
/dev/raw/raw7: bound to major 8, minor 23

如果想删除一个raw设备名(例如/dev/raw/raw1),在root提示符下键入:

# raw /dev/raw/raw1 0 0

接着修改系统的初始化文件,添加如下行到 /etc/rc.d/sysinit 文件:

raw /dev/raw/raw1 /dev/sdb1
raw /dev/raw/raw2 /dev/sdb2
raw /dev/raw/raw3 /dev/sdb3
raw /dev/raw/raw5 /dev/sdb5
raw /dev/raw/raw6 /dev/sdb6
raw /dev/raw/raw7 /dev/sdb7

这样系统在下次启动时,会重新建立需要的raw设备名。

默认建立的raw设备拥有者是disk,必须让数据库实例的拥有者具有此设备的存取权限,在root提示符下键入:

# chown db2:disk /dev/raw/raw[1,2,3,4,5,6,7]

将db2用户更改为7个裸设备的拥有者,至此,这些裸设备已经可以为DB2所引用。

创建数据库

下面准备使用以上raw设备创建一个名为newdb的数据库,包含页size为4kb系统目录表空间、系统临时表空间以及用户表空间各一个;
然后新建页size为8kb、16kb、32kb的缓冲池各一个;
删除4kb的用户表空间,新建2个32kb页size的用户表空间,用于用户表的存储;
新建一个32kb页size的用户表空间,用于存储索引;
新建一个32kb页size的系统临时表空间;

我们将完成以上功能的脚本保存为newdb.sql,并通过如下方式执行此脚本:

在root提示符下键入如下命令,转到db2用户下:

# su - db2

执行上面的脚本:

$ db2 -td";" -f newdb.sql

至此数据库创建完成。下载脚本代码

规划日志以及备份文件存储

接下来,还需要规划日志和数据库备份的存储,首先将用于日志和数据库备份的分区进行格式化(此过程花费时间较长):
在root提示符下键入:

# mkfs.ext3 /dev/sdb8
# mkfs.ext3 /dev/sdb9

创建DB2数据库的目录:

# mkdir /db2
# chown db2:db2 /db2
# su - db2

$ mkdir /db2/db2log
$ mkdir /db2/db2backup
$ exit

mount逻辑分区到目录:

# mount /dev/sdb8 /db2/db2log
# mount /dev/sdb9 /db2/db2backup

更新数据库的log文件路径:

# su - db2
$ db2 connect to newdb
$ db2 update db cfg using newlogpath '/db2/db2log'

停顿数据库使修改生效,使用defer参数继续执行已有的事务,拒绝新的连接,停顿成功后发布激活数据库的命令:

$ db2 quiesce db defer
$ db2 unquiesce db
$ exit

至此我们完成了利用raw设备进行数据规划和数据放置的任务。

额外信息

当已经在raw设备上创建容器之后,若没有通过正常的步骤删除表空间所在数据库,也没有直接删除容器或者容器所在表空间,则再次利用这些raw设备时,DB2会报错:
The container is already in use

此时应使用db2untag命令释放container标志,而采用重新对磁盘进行分区或者格式化的操作是无济于事的。

释放已经在raw设备raw1上建立的container标志:

# su - db2
$ db2untag /dev/raw/raw1

 

参考资源

  • 下载用于创建数据库的脚本



相关文章

相关软件