版权声明:
本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
原文出处: http://www.aiview.com/notes/db2_using_raw.htm
作者: 张洋 Alex_doesAThotmail.com
最后更新: 2004-7-14
本文中的命令和代码在以下环境编译执行通过:
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设备的各个逻辑分区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
参考资源
下载用于创建数据库的脚本IBM DB2 开发者园地
http://www-900.ibm.com/developerWorks/cn/dmdd/certify/index.shtml
IBM DB2 信息中心
http://publib.boulder.ibm.com/infocenter/db2help/index.jsp
dbforums 论坛
http://dbforums.com/
《DB2 UDB v8.1 for Linux, UNIX, Windows 数据库管理》George Baklarz, Bill Wong 合著,机械工业出版社出版
《DB2数据库管理与应用教程》庄济诚 著,清华大学出版社出版
本文地址:http://com.8s8s.com/it/it19841.htm