因生产需要,在一台IBM X3850服务器上安装DB2数据库,下面是具体过程。
软硬件系统配置:
操作系统:suse enterprise 10 linux(64bit) sp3
硬件配置:32G内存
数据库软件:DB2 V9.7(64bit)
一、检查所需的环境和软件包
在 suse Linux 操作系统上安装DB2数据库之前,应确保系统满足必需的操作系统、硬件、软件和通信要求。
DB2数据库产品有若干不同版本。某些DB2数据库产品和功能部件仅在特定操作系统上可用。这个可参阅IBM官方网站来获取每个操作系统上可用的 DB2 数据库产品。
先用rpm -qa查找所需的软件包,没有的包可用yast2 -i来安装。
linux-uu1q:# rpm -qa|grep libaio
libaio-0.3.104-14.2
libaio-devel-0.3.104-14.2
linux-uu1q:# rpm -qa|grep libstdc
libstdc++-devel-4.1.2_20070115-0.29.6
libstdc++-4.1.2_20070115-0.29.6
linux-uu1q:# rpm -qa|grep nfs-utils
nfs-utils-1.0.7-36.36.47
linux-uu1q:/home/server # rpm -qa |grep compat-libstdc
compat-libstdc++-33-3.2.3-61
(检查是否有libstdc++.so.5
linux-uu1q:/usr/lib64 # ls -l libstdc++.so.*
lrwxrwxrwx 1 root root 18 Feb 22 03:34 libstdc++.so.5 -> libstdc++.so.5.0.7
-rwxr-xr-x 1 root root 825400 Apr 9 2007 libstdc++.so.5.0.7
lrwxrwxrwx 1 root root 18 Feb 21 21:57 libstdc++.so.6 -> libstdc++.so.6.0.8
-rwxr-xr-x 1 root root 969048 Sep 5 2009 libstdc++.so.6.0.8)
注意这个compat-libstdc++-33-3.2.3-61.x86_64.rpm的包在SUSE LINUX 10的光盘里并没有,需要自己下载并安装,另外如果没有安装这个包,则在安装DB2时会报找不到libstdc++.so.5的告警。(对于 DB2 数据库服务器和客户机,libstdc++.so.5 是必需的。还有如果你在 RHEL 5 或 SLES 10 上使用 g++ 4.1 来编译 C++ 应用程序,那么将生成下列警告:libdb2.so 所需要的 libstdc++.so.5 可能与 libstdc++.so.6 冲突)
修改系统核心参数
vi /etc/sysctl.conf
kernel.msgmni = 16384
kernel.sem = 250 256000 32 4096
#sysctl -p
#vi /etc/security/limits.conf
* soft nofile 10240
二、开始进行安装和配置
最后一步一步安装下去,直至完成。
#groupadd -g 997 db2asgrp #(安装DB2 administration server的组)
#useradd -u 1002 -d /home/dasusr1 -g db2asgrp -m dasusr1
(建立安装DB2 administration server(DAS)的用户)
检查license的内容
$db2licm -l
执行如下安装授权许可
#/opt/ibm/db2/V9.7/adm/db2licm -a /mnt/cdrom/db2/license/db2aese.lic
注:默认是三个月试用trial,授权许可后永久permanent
五、创建db2 实例
# cd /opt/ibm/db2/v9.7
# ls -l
#cd instance
# ./db2icrt -s ese -u db2fenc1 db2inst1 (建立数据库实例)
# ./dascrt -u dasusr1 (建立das)
注:以上在安装过程中已经设置完成了,只需下面一步
#cd /opt/ibm/db2/V9.7/cfg
# ./db2ln (建立DB2文件的链接)
六、设定服务端口,配置数据库实例通信
以root用户
vi /etc/services
新增如下行
DB2_db2inst1 60000/tcp
DB2_db2inst1_1 60001/tcp
DB2_db2inst1_2 60002/tcp
DB2_db2inst1_END 60003/tcp
db2c_db2inst1 50001/tcp
保存退出
(这部分安装后可自动生成,也无需配置)
七、启动实例
#su - db2inst1
$db2set DB2RSHCMD=/usr/bin/ssh
这里需要先设置DB2RSHCMD这个变量,再设置DB2COMM等变量
$db2set DB2COMM=tcpip (设置DB2的通信方式为tcpip)
$db2 update dbm cfg using SVCENAME db2c_db2inst1(设置dbm参数SVCENAME为db2c_db2inst1 )
$ db2start
02/22/2013 01:40:54 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
(创建数据库之前需要指定数据库存放目录并配置相应的权限
#mkdir -p /db2data/database
# chown -R db2inst1:db2grp /db2data/database)
$db2 "CREATE DATABASE testdb on /db2data/database USING CODESET GBK TERRITORY CN"
(DB2手工建库
$db2 "create database testdb AUTOMATIC STORAGE YES ON /home/db2inst1 DBPATH ON /home/db2inst1 USING CODESET UTF-8 TERRITORY CN COLLATE USING SYSTEM")
$db2 connect to testdb
注意在连接数据库时,如果报下述错误
SQL0332N Character conversion from the source code page "1386" to the target
code page "819" is not supported. SQLSTATE=57017
上边的错误则说明server端的字符集是1386的,而客户端的字符集是819(cn)的,db2不能server端1386的字符集转化为client端819的字符集。解决这个问题的思想是将client端的字符集改为与server端兼容的
那么需要设置这个参数
db2inst1@linux-uu1q:~> db2set db2codepage=1386
然后退出当前db2inst1用户
db2inst1@linux-uu1q:~> exit
logout
再切换回db2inst1用户,参数生效后就可以正常登录进来了。
linux-uu1q:/ # su - db2inst1
db2inst1@linux-uu1q:~> db2 connect to testdb
Database Connection Information
Database server = DB2/LINUXX8664 9.7.6
SQL authorization ID = DB2INST1
Local database alias = TESTDB
为方便客户端连接数据库,还需设置
$ db2 update dbm cfg using svcename 60005 (如果netstat还看不到这个端口,需重启数据库)
$ db2 catalog tcpip node node_8 remote 192.168.0.8 server 60005(编目节点)
$ db2 catalog db testdb as testdb1 at node node_8(编目数据库在节点上)
创建节点组
首先可以查询一下目前数据库环境中的partition groups有哪些,使用下面命令:
创建下面的partition group
$db2 "CREATE DATABASE PARTITION GROUP dpgods ON DBPARTITIONNUMS (0)"
$db2 "CREATE DATABASE PARTITION GROUP dpgedw ON DBPARTITIONNUMS (0)"
$db2 "CREATE DATABASE PARTITION GROUP dpgddw ON DBPARTITIONNUMS (0)"
创建缓冲池
$db2 connect to testdb
$db2 "ALTER BUFFERPOOL IBMDEFAULTBP SIZE 2000"
$db2 "CREATE BUFFERPOOL bp32k ALL DBPARTITIONNUMS SIZE 983040 PAGESIZE 32K"
创建表空间
$db2 "CREATE LARGE TABLESPACE tbs32kdpgods IN DATABASE PARTITION GROUP dpgods pagesize 32k MANAGED BY DATABASE USING (file '/db2data/dpgtbs32k/dpgtbs32k.data' 500M) ON DBPARTITIONNUM(0) bufferpool bp32k"
$db2 "CREATE LARGE TABLESPACE tbs32kdpgedw IN DATABASE PARTITION GROUP dpgedw pagesize 32k MANAGED BY DATABASE USING (file '/db2data/edw/dpgtbs32k/dpgtbs32k.data' 500M) ON DBPARTITIONNUM(0) bufferpool bp32k"
$db2 "CREATE LARGE TABLESPACE tbs32kdpgddw IN DATABASE PARTITION GROUP dpgddw pagesize 32k MANAGED BY DATABASE USING (file '/db2data/ddw/dpgtbs32k/dpgtbs32k.data' 500M) ON DBPARTITIONNUM(2) bufferpool bp32k"
$db2 "CREATE LARGE TABLESPACE idx32kdpgods IN DATABASE PARTITION GROUP dpgods pagesize 32k MANAGED BY DATABASE USING (file '/db2data/dpgidx32k/dpgidx32k.data' 100M) ON DBPARTITIONNUM(0) bufferpool bp32k"
$db2 "CREATE LARGE TABLESPACE idx32kdpgedw IN DATABASE PARTITION GROUP dpgedw pagesize 32k MANAGED BY DATABASE USING (file '/db2data/edw/dpgidx32k/dpgidx32k.data' 100M) ON DBPARTITIONNUM(0) bufferpool bp32k"
$db2 "CREATE LARGE TABLESPACE idx32kdpgddw IN DATABASE PARTITION GROUP dpgddw pagesize 32k MANAGED BY DATABASE USING (file '/db2data/ddw/dpgidx32k/dpgidx32k.data' 100M) ON DBPARTITIONNUM(2) bufferpool bp32k"
将下面语句复制到文件中,然后db2 -tvf crt_tbs.sql 执行这个脚本
CREATE LARGE TABLESPACE tbs32kods IN DATABASE PARTITION GROUP IBMDEFAULTGROUP pagesize 32k MANAGED BY DATABASEUSING (file '/db2data/ods/tbs32k/tbs32k_0.data' 1000M) ON DBPARTITIONNUM(0)
USING (file '/db2data/ods/tbs32k/tbs32k_1.data' 1000M) ON DBPARTITIONNUM(1)
USING (file '/db2data/ods/tbs32k/tbs32k_2.data' 1000M) ON DBPARTITIONNUM(2)
USING (file '/db2data/ods/tbs32k/tbs32k_3.data' 1000M) ON DBPARTITIONNUM(3)
autoresize yes bufferpool bp32k;
CREATE LARGE TABLESPACE tbs32kedw IN DATABASE PARTITION GROUP IBMDEFAULTGROUP pagesize 32k MANAGED BY DATABASE
USING (file '/db2data/edw/tbs32k/tbs32k_0.data' 1000M) ON DBPARTITIONNUM(0)
USING (file '/db2data/edw/tbs32k/tbs32k_1.data' 1000M) ON DBPARTITIONNUM(1)
USING (file '/db2data/edw/tbs32k/tbs32k_2.data' 1000M) ON DBPARTITIONNUM(2)
USING (file '/db2data/edw/tbs32k/tbs32k_3.data' 1000M) ON DBPARTITIONNUM(3)
autoresize yes bufferpool bp32k;
CREATE LARGE TABLESPACE tbs32kddw IN DATABASE PARTITION GROUP IBMDEFAULTGROUP pagesize 32k MANAGED BY DATABASE
USING (file '/db2data/ddw/tbs32k/tbs32k_0.data' 1000M) ON DBPARTITIONNUM(0)
USING (file '/db2data/ddw/tbs32k/tbs32k_1.data' 1000M) ON DBPARTITIONNUM(1)
USING (file '/db2data/ddw/tbs32k/tbs32k_2.data' 1000M) ON DBPARTITIONNUM(2)
USING (file '/db2data/ddw/tbs32k/tbs32k_3.data' 1000M) ON DBPARTITIONNUM(3)
autoresize yes bufferpool bp32k;
CREATE LARGE TABLESPACE idx32kods IN DATABASE PARTITION GROUP IBMDEFAULTGROUP pagesize 32k MANAGED BY DATABASE
USING (file '/db2data/ods/idx32k/idx32k_0.data' 100M) ON DBPARTITIONNUM(0)
USING (file '/db2data/ods/idx32k/idx32k_1.data' 100M) ON DBPARTITIONNUM(1)
USING (file '/db2data/ods/idx32k/idx32k_2.data' 100M) ON DBPARTITIONNUM(2)
USING (file '/db2data/ods/idx32k/idx32k_3.data' 100M) ON DBPARTITIONNUM(3)
autoresize yes bufferpool bp32k;
CREATE LARGE TABLESPACE idx32kedw IN DATABASE PARTITION GROUP IBMDEFAULTGROUP pagesize 32k MANAGED BY DATABASE
USING (file '/db2data/edw/idx32k/idx32k_0.data' 100M) ON DBPARTITIONNUM(0)
USING (file '/db2data/edw/idx32k/idx32k_1.data' 100M) ON DBPARTITIONNUM(1)
USING (file '/db2data/edw/idx32k/idx32k_2.data' 100M) ON DBPARTITIONNUM(2)
USING (file '/db2data/edw/idx32k/idx32k_3.data' 100M) ON DBPARTITIONNUM(3)
autoresize yes bufferpool bp32k;
CREATE LARGE TABLESPACE idx32kddw IN DATABASE PARTITION GROUP IBMDEFAULTGROUP pagesize 32k MANAGED BY DATABASE
USING (file '/db2data/ddw/idx32k/idx32k_0.data' 100M) ON DBPARTITIONNUM(0)
USING (file '/db2data/ddw/idx32k/idx32k_1.data' 100M) ON DBPARTITIONNUM(1)
USING (file '/db2data/ddw/idx32k/idx32k_2.data' 100M) ON DBPARTITIONNUM(2)
USING (file '/db2data/ddw/idx32k/idx32k_3.data' 100M) ON DBPARTITIONNUM(3)
autoresize yes bufferpool bp32k;
CREATE SYSTEM TEMPORARY TABLESPACE tmp32k
PAGESIZE 32k
MANAGED BY SYSTEM
USING ('/db2data/database/db2inst1/NODE0000/SQL00001/systmptbs_32k') ON DBPARTITIONNUM (0)
USING ('/db2data/database/db2inst1/NODE0001/SQL00001/systmptbs_32k') ON DBPARTITIONNUM (1)
USING ('/db2data/database/db2inst1/NODE0002/SQL00001/systmptbs_32k') ON DBPARTITIONNUM (2)
USING ('/db2data/database/db2inst1/NODE0003/SQL00001/systmptbs_32k') ON DBPARTITIONNUM (3)
BUFFERPOOL bp32k;
CREATE USER TEMPORARY TABLESPACE usrtmp32k
PAGESIZE 32k
MANAGED BY DATABASE
USING (FILE '/db2data/database/db2inst1/NODE0000/SQL00001/usrtmptbs_32k/tbs32k_0.data' 100M) ON DBPARTITIONNUM(0)
USING (FILE '/db2data/database/db2inst1/NODE0001/SQL00001/usrtmptbs_32k/tbs32k_1.data' 100M) ON DBPARTITIONNUM(1)
USING (FILE '/db2data/database/db2inst1/NODE0002/SQL00001/usrtmptbs_32k/tbs32k_2.data' 100M) ON DBPARTITIONNUM(2)
USING (FILE '/db2data/database/db2inst1/NODE0003/SQL00001/usrtmptbs_32k/tbs32k_3.data' 100M) ON DBPARTITIONNUM(3)
bufferpool bp32k;
九、配置数据库和实例的相关参数:
#su - db2inst1
$db2_all "db2 update db cfg for testdb using LOGSECOND 4"
$db2_all "db2 update db cfg for testdb using LOGFILSIZ 130048"
$db2_all "db2 update db cfg for testdb using SORTHEAP 5120"
$db2_all "db2 update db cfg for testdb using LOCKLIST 204800"
$db2_all "db2 update db cfg for testdb using MAXLOCKS 30"
$db2_all "db2 update db cfg for testdb using LOGBUFSZ 20000"
$db2 update dbm cfg using ASLHEAPSZ 10240
$db2 update dbm cfg using MON_HEAP_SZ 1024
$db2 update dbm cfg using sheapthres 1048576
$db2 update dbm cfg using FCM_NUM_BUFFERS 65536
$db2 update dbm cfg using JAVA_HEAP_SZ 8192
$db2 update dbm cfg using RESTBUFSZ 20000
$db2 update dbm cfg using RESTBUFSZ 15000
$db2 update dbm cfg using AGENT_STACK_SZ 10240
$db2 update dbm cfg using QUERY_HEAP_SZ 51200
$db2 force applications all
$db2 terminate
$db2stop force
(备注:ctrl+z的相反动作是ctrl+y,还有的软件是ctrl+alt+z)
补充:
DB2数据库补丁包的安装:
1.以用户root登录linux系统
2.得到DB2数据库补丁包文件(db2v9.7fp3_25384_linuxx64_server.tar.gz);
3.解压该文件 tar -zvxf 文件名
4.停掉所有的实例和DAS,命令如下:
db2admin stop #以用户dasusr1身份执行
db2stop #以用户db2inst1身份执行
5.到解压产生的补丁包目录下开始安装补丁:
执行 #./installFixPack -y
6.升级数据库(#以用户root身份执行)
/opt/IBM/db2/V9.7/instance/db2iupdt db2inst1 #升级实例
/opt/IBM/db2/V9.7//instance/dasupdt dasusr1 #升级DB2管理服务
/opt/IBM/db2/V9.7/instance/ db2iupt -a server -u db2inst1数据库名
7.安装完毕后,启动实例和DAS:
db2admin start #以用户dasusr1身份执行
db2start #以用户db2inst1身份执行
8.完成安装