Linux下db2start的错误
时间:2009-04-22 来源:幻想与你同在
之前花了不少时间配置好了DB2,然后,想建立的样本数据库sample的时候,提示文件系统的空间不够,然后把实例用户文件夹下面的sqllib使用ln –s命令挂到一个有空间的文件系统中,创建样本数据库成功。。。然后。。。
中午吃完饭回来,继续研究,发现,想用db2start启动实例的时候,启动不了,出现如下错误:
SQL1220N The database manager shared memory set cannot be allocated.SQL1032N No start database manager command was issued. SQLSTATE=57019
提示共享内存不够。。
还有一个很奇怪的问题:
第一次入去,用db2admin启动admin server就成功,停止admin server也成功,但是,接着想用db2inst1启动实例的时候,出现错误提示,然后,再用db2admin启动或者停止admin sserver的时候,就会出现这个错误:DB2ADMIN processing complete, SQLCODE = 4404。。。 然后,不断的Google,试了网上的很多解决办法:
1. 用实例用户运行“db2ftok”命令,生成.ftok文件
2. 查看license是否过期
3. 增大shmall的参数
最后,还是那样,弄了很久。。昏死。。。
然后,晚上,突发奇想,按照IBM红宝书《Up and Running with DB2 on Linux》上面的介绍,修改了如下内核参数:
kernel.shmmax=1073741824
kernel.shmall=3774873
kernel.sem=250 256000 32 1024
kernel.msgmni=1024
kernel.msgmax=65536
kernel.msgmnb=65536 然后,惊奇地发现,终于没有出现上面那个错误了,但是,出现了一个更加奇怪的错误: SQL1042C An unexpected system error occurred. 彻底崩溃。。。囧囧有神啊。。。
没事,重新再来,查看了下,
在实例用户目录下的sqllib/db2dump/db2diag.log文件中看到如下的内容
MESSAGE : ECF=0x90000520 Failed to obtain the install path
CALLED : DB2 Common, Fault Monitor Facility, fmGetInstPath
RETCODE : ECF=0x90000521 No proper access permisions to the install path
难道真的是昨天挂载了sqllib路径导致的错误??
最后,决定。。。drop掉实例用户,重新建过一个
按照网上的方法: “以root身份执行 $DB2HOME/instance/db2idrop -f 实例名,注意一定要加-f,否则不会删除实例下面sqllib文件。如果不幸忘了,执行db2icrt,会报sqllib文件存在的错误,即使先删掉这个文件也不行,执行一下db2icrt,就会生成一部分sqllib,进入死胡同,呵呵,这个是由于用实例用户登录造成的,也许有个db2profile文件在登录时搞怪,该怎么办呢?看我的吧!用一个非实例的用户登录,su成root,然后再删掉sqllib,试试再db2icrt,问题解决了:)” 创建一个DB2 instance.使用db2icrt命令:
a. 以root用户运行
b. 输入以下命令:
/opt/IBM/db2/V8.1/instance/db2icrt [-a AuthType] -u FencedID InstNme
其中:
- AuthType表示 instance authentication的类型,默认为SERVER,其他类型包括CLIENT, DCS, SERVER_ENCRYPT, or DCS_ENCRYPT.
- FencedID 表示DB2 fenced用户的名字.
- InstNme 表示要创建的instance的名字.
示例如下:
./db2icrt -u db2fenc1 db2inst1
对DB2实例创建一个TCP/IP连接
a. 更新/etc/services文件,指定DB2服务器监听client请求的服务名称和端口号,比如加以下一行到/etc/services
db2c_db2inst1 50001/tcp # DB2 connection service port
其中:
• db2c_db2inst1 表示连接的服务名
• 50001 表示服务端口号
• tcp 表示TCP/IP 协议
这里的服务名称和端口号必须在系统中是唯一的。
b. 在服务器中更新database manager的配置文件:
i. 以DB2实例用户登陆.
ii.设置DB2实例环境:
. INSTHOME/sqllib/db2profile
iii. 在DBM配置文件中更新SVCENAME参数.必须指定服务名称或端口号.
示例如下:
db2 update dbm cfg using SVCENAME db2c_db2inst1
可以使用以下命令检查SVCENAME:
db2 get dbm cfg | grep SVC
c. 设置tcpip为DB2COMM注册参数.以DB2实例用户输入以下命令:
db2set DB2COMM=tcpip
d. 重启DB2:
db2stop
db2start 成功建了一个实例用户,然后,启动实例的时候,出现了如下错误: sql5043N SUPPORT FOR ONE OR MORE COMMUNICATIONS PROTOCOLS FAILED TO START SECCESSFULLY,HOWEVER CORE DATABASE MANAGER FUNTIONALITY STARTED SECCESSFULLY 查看了db2daig.log有如下信息 2009-04-22-22.58.58.976102+480 I9668A411 LEVEL: Error
PID : 3447 TID : 2199111099328PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000
FUNCTION: DB2 UDB, common communication, sqlcctcpconnmgr, probe:5
MESSAGE : DIA3201E The service name "db2c_db2inst2" specified in the database
manager configuration file cannot be found in the TCP/IP services
file. 查看了一下,原来是/ect/services文件里面的参数填错了。。我太粗心了。。囧。。 最后最后。。。终于启动成功了。。历时一天整。。回到了原点,没事,继续努力,接着下来试试是不是改了sqllib路径的问题,呵呵 db2inst1@suse01:/etc> db2stop
04/22/2009 23:06:41 0 0 SQL1064N DB2STOP processing was successful.
SQL1064N DB2STOP processing was successful.
db2inst1@suse01:/etc> db2start
04/22/2009 23:06:49 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
SQL1220N The database manager shared memory set cannot be allocated.SQL1032N No start database manager command was issued. SQLSTATE=57019
提示共享内存不够。。
还有一个很奇怪的问题:
第一次入去,用db2admin启动admin server就成功,停止admin server也成功,但是,接着想用db2inst1启动实例的时候,出现错误提示,然后,再用db2admin启动或者停止admin sserver的时候,就会出现这个错误:DB2ADMIN processing complete, SQLCODE = 4404。。。 然后,不断的Google,试了网上的很多解决办法:
1. 用实例用户运行“db2ftok”命令,生成.ftok文件
2. 查看license是否过期
3. 增大shmall的参数
最后,还是那样,弄了很久。。昏死。。。
然后,晚上,突发奇想,按照IBM红宝书《Up and Running with DB2 on Linux》上面的介绍,修改了如下内核参数:
kernel.shmmax=1073741824
kernel.shmall=3774873
kernel.sem=250 256000 32 1024
kernel.msgmni=1024
kernel.msgmax=65536
kernel.msgmnb=65536 然后,惊奇地发现,终于没有出现上面那个错误了,但是,出现了一个更加奇怪的错误: SQL1042C An unexpected system error occurred. 彻底崩溃。。。囧囧有神啊。。。
没事,重新再来,查看了下,
在实例用户目录下的sqllib/db2dump/db2diag.log文件中看到如下的内容
MESSAGE : ECF=0x90000520 Failed to obtain the install path
CALLED : DB2 Common, Fault Monitor Facility, fmGetInstPath
RETCODE : ECF=0x90000521 No proper access permisions to the install path
难道真的是昨天挂载了sqllib路径导致的错误??
最后,决定。。。drop掉实例用户,重新建过一个
按照网上的方法: “以root身份执行 $DB2HOME/instance/db2idrop -f 实例名,注意一定要加-f,否则不会删除实例下面sqllib文件。如果不幸忘了,执行db2icrt,会报sqllib文件存在的错误,即使先删掉这个文件也不行,执行一下db2icrt,就会生成一部分sqllib,进入死胡同,呵呵,这个是由于用实例用户登录造成的,也许有个db2profile文件在登录时搞怪,该怎么办呢?看我的吧!用一个非实例的用户登录,su成root,然后再删掉sqllib,试试再db2icrt,问题解决了:)” 创建一个DB2 instance.使用db2icrt命令:
a. 以root用户运行
b. 输入以下命令:
/opt/IBM/db2/V8.1/instance/db2icrt [-a AuthType] -u FencedID InstNme
其中:
- AuthType表示 instance authentication的类型,默认为SERVER,其他类型包括CLIENT, DCS, SERVER_ENCRYPT, or DCS_ENCRYPT.
- FencedID 表示DB2 fenced用户的名字.
- InstNme 表示要创建的instance的名字.
示例如下:
./db2icrt -u db2fenc1 db2inst1
对DB2实例创建一个TCP/IP连接
a. 更新/etc/services文件,指定DB2服务器监听client请求的服务名称和端口号,比如加以下一行到/etc/services
db2c_db2inst1 50001/tcp # DB2 connection service port
其中:
• db2c_db2inst1 表示连接的服务名
• 50001 表示服务端口号
• tcp 表示TCP/IP 协议
这里的服务名称和端口号必须在系统中是唯一的。
b. 在服务器中更新database manager的配置文件:
i. 以DB2实例用户登陆.
ii.设置DB2实例环境:
. INSTHOME/sqllib/db2profile
iii. 在DBM配置文件中更新SVCENAME参数.必须指定服务名称或端口号.
示例如下:
db2 update dbm cfg using SVCENAME db2c_db2inst1
可以使用以下命令检查SVCENAME:
db2 get dbm cfg | grep SVC
c. 设置tcpip为DB2COMM注册参数.以DB2实例用户输入以下命令:
db2set DB2COMM=tcpip
d. 重启DB2:
db2stop
db2start 成功建了一个实例用户,然后,启动实例的时候,出现了如下错误: sql5043N SUPPORT FOR ONE OR MORE COMMUNICATIONS PROTOCOLS FAILED TO START SECCESSFULLY,HOWEVER CORE DATABASE MANAGER FUNTIONALITY STARTED SECCESSFULLY 查看了db2daig.log有如下信息 2009-04-22-22.58.58.976102+480 I9668A411 LEVEL: Error
PID : 3447 TID : 2199111099328PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000
FUNCTION: DB2 UDB, common communication, sqlcctcpconnmgr, probe:5
MESSAGE : DIA3201E The service name "db2c_db2inst2" specified in the database
manager configuration file cannot be found in the TCP/IP services
file. 查看了一下,原来是/ect/services文件里面的参数填错了。。我太粗心了。。囧。。 最后最后。。。终于启动成功了。。历时一天整。。回到了原点,没事,继续努力,接着下来试试是不是改了sqllib路径的问题,呵呵 db2inst1@suse01:/etc> db2stop
04/22/2009 23:06:41 0 0 SQL1064N DB2STOP processing was successful.
SQL1064N DB2STOP processing was successful.
db2inst1@suse01:/etc> db2start
04/22/2009 23:06:49 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
相关阅读 更多 +