Linux下db2创建实例、数据库

首先,系统原有的DB2信息,
安装目录 : /opt/ibm/db2/V9.7
DB2inst1实例目录 : /home/DB2inst1
1.创建DB2cz实例:
    给DB2cz实例创建实例用户和组:
    创建用户
        useradd db2cz
        useradd dbfencz
    参照db2inst1
    把用户分配到组:usermod -a -g db2iadm1 db2cz  
        usermod -a -g db2fadm1 db2fencz
    创建DB2实例DB2cz:
        用 root 用户,cd /db2_install_path/instances/ 执行 ./db2icrt -u db2fencz db2cz
        db2fence 用来运行 “受防护用户定义的函数 (UDF) 和 受防护存储过程的进程”。
        看看create function / procedure的语法,有个fenced的选项。udf和udp是可以用到外部程序的,万一用到的程序出了问题,db2很可能跟着也挂了。现在有了 db2fence db2fmp,它挂了就挂了。db2没事……
3.建数据库,建表
    调出DB2编辑器  
        C:\Users\acer>db2 
        要退出 db2 交互方式,在命令提示符处输入 QUIT。在非交互方式下,所有命令都必须以“db2”作前缀。  
        db2 =>create database ZF using codeset GBK territory CN  db2   --创建库,并制定为GBK编码
            DB20000I  CREATE DATABASE 命令成功完成。  
        db2 => connect to ZF
    数据库连接信息  
数据库服务器         = DB2/LINUXX8664 9. 9.7.0
SQL 授权标识         = DB2CZ
本地数据库别名       = ZF
db2 => create table youtable(
id integer not null primary key,
username varchar(200),
password varchar(200)
        DB20000I  SQL 命令成功完成。  
db2 => insert into youtable(
id,username,password

values(

188,'stevenjohn','stevenanthony'
)  
        DB20000I  SQL 命令成功完成。  

    db2 => select * from youtable


=========================================================


4.配置远程连接端口
首先为远程连接配置空闲端口: (查看端口使用情况命令: netstat -na | grep 50000 查看50000端口是否已使用中 )
vi /etc/services 查看分配给DB2实例DB2inst2的端口. 返回结果中db这一块的有
# Local services  
DB2_DB2inst1 60000/tcp  
DB2_DB2inst1_1 60001/tcp  
DB2_DB2inst1_2 60002/tcp  
DB2_DB2inst1_END 60003/tcp  
DB2c_DB2inst1 50000/tcp  
DB2i_DB2inst1 50001/tcp)   
DB2_DB2inst2 60004/tcp  
DB2_DB2inst2_1 60005/tcp  
DB2_DB2inst2_2 60006/tcp  
DB2_DB2inst2_END 60007/tcp  
)  
在里面添加两条:
DB2c_DB2inst2 70000/tcp  
DB2i_DB2inst2 70001/tcp  
分别为为DB2inst2实例的侦听端口和中断端口。
网上找到的大部分创建第二个实例以及建表的方法就至此结束了,但是实际使用的时候,远程连接还是连接不上的。
后来找到了通过另一实例DB2inst1使用CATALOG编目的方法来实现远程连接的成功方法。
首先切换到另一用户,这里使用DB2inst1:
在root下:
su - DB2inst1
编目节点名,取任意名称,如为inst3,指向DB2机器所在,之前在etc/services文件中为DB2inst2实例配置的侦听端口:
DB2 "catalog tcpip node inst3 remote 10.213.1.95 server 70000" 
然后给节点指向的DB2inst2实例新建的数据库配置别名:
DB2 "catalog db gpending as gpending at node inst3" 
编目成功后,可以尝试连接(在DB2inst1用户下):
用命令: connect to gpending user DB2inst2 using password
或命令: DB2 attach to inst3 user DB2inst2 using password
系统会报出如下一个通信协议的错误,类似于:SQL30081N 检测到通信错误。正在使用的通信协议:"TCP/IP"。正在使用的通信API:"SOCKETS"。
检测到错误的位置:"10.213.1.95"。检测到错误的通信函数:"connect"。
协议特定的错误代 码:"111"、"*"、"*"。 SQLSTATE=08001,
(这一段是网上搜索到的:
为什么通讯协议会出错呢?系统不是会默认地给实例设置一些基础的属性吗?
并非如此!!!
通过DB2SETUP方式创建的实例(即使用DB2安装文件来新建实例),有些参数会默认的帮你设置成缺省的参数值。
但通过命令行方式创建实例时,DB2实例参数并没有被设置。所以DB2inst2实例的通讯协议没有定义,因此发生刚才的现象。
因此,在用户DB2inst1下,通过命令DB2set ,你可以看到如下信息:
DB2_INLIST_TO_NLJN=YES 
DB2_EVALUNCOMMITTED=yes 
DB2_RR_TO_RS=YES 
DB2COMM=tcpip (该属性是指明该DB2实例使用的通信协议,一个实例可以使用多个通信协议,多个通信协议之间使用逗号分开,如:TCPIP、IPX、APPC、NPIPE……)
DB2AUTOSTART=yes( 设置实例是否在系统启动是自动启动,在Windows系统中DB2的实例是作为服务形式启动的)
但是在用户db2inst2下使用 命令db2set,你将什么也看不到!
所以要手动设置参数:
在 db2inst2下:
db2set DB2COMM=tcpip   
db2set DB2AUTOSTART=yes 
然后给db2inst2实例指定端口(即在etc/services文件中添加的两条,之前先做过)
然后查看实例的配置文件:
命令: db2 get dbm config
返回的结果中发现SVCENAME的值是空的配置SVCENAME的值,即在services文件中为db2inst2实例指定的侦听端口(70000)的服务名:db2c_db2inst2
命令:db2 update dbm config using SVCENAME db2c_db2inst2
然后重启整个db2……
用客户端工具连接实例,成功!

要注意的是,用远程机器上的客户端连接时,要配置的信息:
用户标识:“db2inst2”
密码下:“password”
数据库名称: “gpending”
服务器 : “10.213.1.95”
端口号:“50000” (注意:这里填的不是70000)
(端口写为db2inst2分配的70000端口时,客户端连接时怎么也不成功,后来改成50000,发现就可以了,这可能就是编目的原因吧,我自己理解可能就是通过连接50000端口,即db2inst1,然后通过编目gpending 映射到db2inst2的gpending 表,然后用用户名和密码连接。)

至此,DB2实例db2inst2的配置成功完成!
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值