Linux环境下的DB2安装

Linux环境下的DB2安装


1.1 OS环境信息


[root]# uname -a

Linux  2.6.18-8.el5xen #1 SMP Fri Jan 26 14:42:21 EST 2007 i686 i686 i386 GNU/Linux



[root]# head -n 1 /etc/issue

Red Hat Enterprise Linux Server release 5 (Tikanga)





1.2 DB2软件信息


[root]# ls /home/fileadmin/

db2exc_971_LNX_x86.tar.gz





1.3 安装步骤以及详解


1.解压软件包并执行安装脚本


[root]# cd /home/fileadmin

[root]# tax -zxvf db2exc_971_LNX_x86.tar.gz



解压开软件包之后,进入解开后的文件夹内,找到下面的脚本文件.



[root]# ./db2_deinstall



该脚本会有大概26个执行步.在第26个步骤的执行过程中会有一定的延迟.

所有的安装步骤都结束之后.默认情况下安装目录在:“/opt/ibm/db2/V9.7/”





2.创建相关管理用户


[root]# groupadd db2iadm1

[root]# groupadd dasadm1

[root]# groupadd db2fadm1

[root]# useradd -g db2iadm1 db2inst1

[root]# useradd -g dasadm1 dasusr1

[root]# useradd -g db2fadm1 db2fenc1

[root]# passwd db2iadm1

[root]# passwd dasusr1

[root]# passwd db2fenc1



db2fenc1:

表示将用来运行受防护用户定义的函数(UDF)和受防护存储过程的用户的名称.如果您正在客户机上创建实例,那么此标志不是必需的.但是在服务器上创建时必须要指定这个用户,指定您所创建的受防护用户的名称.



db2inst1:

表示将来要创建的数据库实例的拥有者,实例的名称必须与拥有实例的用户的名称相同.



dasusr1:

管理数据库服务器(DAS)用户.





3.注册产品许可证


[root]# cd /opt/ibm/db2/V9.7/adm

[root]#./db2licm –a /home/fileadmin/expc/db2/license/db2expc_uw.lic





4.创建DAS


[root]# cd /opt/ibm/db2/V9.7/instance/

[root]# ./ dascrt –u dasusr1



-a: 表示实例的认证类型. (SERVER、CLIENT、DSC、SERVER_ENCRYPT、DSC_ENCRYPT)默认为SERVER.





5.创建数据库实例


[root]# cd /opt/ibm/db2/V9.7/instance/

[root]# ./db2icrt –a server –u db2fenc1 db2inst1



-a: 表示实例的认证类型.

(SERVER、CLIENT、DSC、SERVER_ENCRYPT、DSC_ENCRYPT)默认为SERVER.





6.创建DB2文件的链接


[root]# /opt/IBM/db2/V9.7/cfg/db2ln



如果先前的DB2版本已经与/usr/lib和/usr/include目录建立了链接,那么可以通过输入db2ln命令来自动除去这些链接,以便为此DB2版本链接.如果想要重新建立指向先前版本的库的链接,那么必需先从当前的DB2版本执行db2rmln命令,然后从先前的DB2版本中执行db2ln命令.





7.添加DB2端口


[root]# su – root

[root]# vi /etc/services



添加下面内容到services文件中的一行.

db2inst1   50000/tcp





8.DB2相关变量配置
        

[root]# su – db2inst1

[db2inst1]# db2set DB2_EXTENDED_OPTIMIZATION=ON

[db2inst1]# db2set DB2_DISABLE_FLUSH_LOG=ON

[db2inst1]# db2set AUTOSTART=YES

[db2inst1]# db2set DB2_STRIPED_CONTAINERS=ON

[db2inst1]# db2set DB2_HASH_JOIN=Y

[db2inst1]# db2set DB2COMM=tcpip

[db2inst1]# db2set DB2_PARALLEL_IO=*

[db2inst1]# db2set DB2CODEPAGE=819

[db2inst1]# db2 update dbm cfg using SVCENAME db2inst1

[db2inst1]# db2 update dbm cfg using INDEXREC ACCESS



DB2_EXTENDED_OPTIMIZATION:

指定查询优化器是否使用优化扩展去改进查询性能.



DB2_STRIPED_CONTAINERS:

当用RAID设备作为表空间容器时,为了避免多余的IO,建议extent的大小应该等同于RAID条带或是RAID条带的倍数.但由于创建DMS表空间时, DB2会在每个容器的开始处预留一个页面作为标签,剩余的页都会以extent大小分组, extent数据块就可能和条带不能很好地匹配. 在这种情况下,设置该变量就会告诉DB2为标签预留extent大小的空间而不是缺省的一页从而优化IO操作.



DB2_HASH_JOIN:

指定排序时使用HASH排序,这样db2在表join时,先对各表做hash排序,再join,这样可以大大提高性能.



DB2_PARALLEL_IO:

默认值为NULL.值:TablespaceID[:n],…….定义表空间的逗号分隔列表.如果表空间的预取大小为AUTOMATIC,您可以通过指定表空间标识,后面跟一个冒号,再加上每个容器中的磁盘数n,来向DB2数据库管理器表示该表空间的每个容器中的磁盘数.如果没有指定 n,那么使用默认值6.您可以将TablespaceID 替换为星号(*)来指定所有的表空间.如果 DB2_PARALLEL_IO=*,那么所有表空间都将使用6作为每个容器中的磁盘数.如果您同时指定星号(*)和表空间标识,那么优先使用表空间标识设置.例如,如果 DB2_PARALLEL_IO=*,1:3,那么所有表空间都将使用 6 作为每个容器中的磁盘数,但是第一个表空间除外(它将使用 3作为每个容器中的磁盘数).



预取大小 =(容器数)*(每个容器的磁盘数)* 扩展数据块大小



INDEXREC:

索引重新创建时间的配置参数.ACCESS 第一次访问索引时将重建无效的索引.在 DB2 前滚或 HADR 日志重放期间将重做任何完全记录的索引构建.当启动了 HADR 且发生 HADR 接管时,将在接管之后第一次访问基础表时重建任何无效的索引.



SVCENAME:

TCP/IP 服务名称的配置参数.





9.启动DB2


[db2inst1]# db2start



本人在使用该命令启动DB2的时候遇到了下面的错误.

SQL1220N The database manager shared memory set cannot be allocated



①检查系统系统配置:没有问题.



[dnmzu01@haizdl@ibm]$ ipcs -l

------ Shared Memory Limits --------

max number of segments = 4096

max seg size (kbytes) = 4194303

max total shared memory (kbytes) = 1073741824

min seg size (bytes) = 1

(略)



②检查安装许可是否过期:没有问题.



[dnmzu01@haizdl@ibm]$ db2licm -l

Product name:                     "DB2 Express-C"

License type:                     "Unwarranted"

Expiry date:                      "Permanent"

Product identifier:               "db2expc"

Version information:              "9.7"

Max number of CPUs:               "2"

Max amount of memory (GB):        "2"



③检查IPC KEY 是否存在,并且重建IPC KEY.



[db2inst1]# ls –la /home/dnmzu01/sqllib/.ftok

[db2inst1]# cd /home/dnmzu01/sqllib/bin

[db2inst1]# ./ db2ftok

[db2inst1]# ls –la /home/dnmzu01/sqllib/.ftok

[db2inst1]# db2start



Reference: To do this we use the ftok subroutine which is used to generate a standard interprocess communication key. All interprocess communication facilities require you to supply a key to the msgget, semget, and shmget subroutines in order to obtain interprocess communication identifiers. The ftok subroutine provides one method for creating keys and is used by db2 during startup.



问题解决.





10.创建数据库以及DBA用户


创建数据库:

[db2inst1]# db2 "CREATE DB nmdb01 on ‘/usr/db2dir/’"



创建数据库管理用户:

[db2inst1]# groupadd dbadmin

[db2inst1]# useradd –g dbadmin dbadm1

[db2inst1]# passwd dbadm1

[db2inst1]# cp /home/db2inst1/.bashrc /home/dbadm1/

[db2inst1]# db2 “connect to nmd01”

[db2inst1]# db2 “grant dbadm on database to group dbadmin”

[db2inst1]# db2 “grant dbadm on database to user dbadm1”





11.进行数据库内的测试.


[db2inst1]# su – dbadm1

[dbadm1]# db2 “connect to nmd01”

[dbadm1]# db2 “CREATE BUFFERPOOL BP0”

[dbadm1]# db2 “CREATE TABLESPACE TBS01 PAGESIZE 4K MANAGED BY DATABASE EXTENDSIZE 32 PREFETCHSIZE 32 USING( FILE ‘/usr/db2dir/nmdb01/nmdb01/tb0100’ 5000) BUFFERPOOL BP0”

[dbadm1]# db2 “CREATE TABLE TB01”





12.整个安装和调试过程结束.

作者: haizdl@126.com   发布时间: 2011-06-03

刚弄完,共享一下

作者: haizdl@126.com   发布时间: 2011-06-03