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
linux安装数据库60005/tcp  DB2_DB2inst2_2 60006/tcp  DB2_DB2inst2_END 60007/tcp  )  在⾥⾯添加两条: DB2c_D
B2inst2 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的配置成功完成!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。