一个客户重启LINUX服务器后,db2实例可以启动,但是无法成功连接,通过检查db2diag.log,出现了下面的错误。这种错误通常是由于其他db2进程例如db2cos没有释放加在控制文件上的锁导致的。常规的解决办法是使用db2_kill杀掉其他进程,以及用ipclean清理IPC资源。我都试了,甚至也试了重启机器,这个问题都无法解决。
2012-11-06-13.43.03.157979+480 I49705715E481 LEVEL: Error
PID : 910 TID : 47931096820032PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : YXDB
APPHDL : 0-19 APPID: 10.137.249.101.2938.121106054304
AUTHID : DB2INST1
EDUID : 31 EDUNAME: db2agent (YXDB) 0
FUNCTION: DB2 UDB, base sys utilities, sqle_GetRelDBLockForInstance, probe:25
MESSAGE : /arch/db2log/db2inst1/NODE0000/SQL00001/SQLINSLK
2012-11-06-13.43.03.157979+480 I49706197E572 LEVEL: Severe
PID : 910 TID : 47931096820032PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : YXDB
APPHDL : 0-19 APPID: 10.137.249.101.2938.121106054304
AUTHID : DB2INST1
EDUID : 31 EDUNAME: db2agent (YXDB) 0
FUNCTION: DB2 UDB, base sys utilities, sqeLocalDatabase::FirstConnect, probe:5
RETCODE : ZRC=0x870F0016=-2029060074=SQLO_SHAR "File sharing violation."
DIA8519C A file sharing violation has occurred, filename was "".
后来,注意到,客户所使用数据库的DB PATH是在/arch/db2log 这个NFS文件系统挂载上的,所以尝试着用db2relocatedb命令将DB PATH从/arch/db2log移动到盘阵/data1/dbpath,最终解决了这个问题。
步骤如下:
1,检查原来的建库语句:
create database yxdb automatic storage yes on /data1, /data2, /data3 dbpath on /arch/db2log ALIAS yxdb2 using codeset UTF-8 territory CN pagesize 32 k
2,复制/arch/db2log下所有文件到新的路径/data1/dbpath
cp -rf /arch/db2log/* /data1/dbpath
3,编辑移动文件rel.cfg,内容如下:
DB_NAME=yxdb
DB_PATH=/arch/db2log,/data1/dbpath
INSTANCE=db2inst1
4,使用db2relocatedb命令修改DB PATH
db2relocatedb -f rel.cfg
Files and control structures were changed successfully.
Database was catalogued successfully.
DBT1000I The tool completed successfully.
5,成功连接
db2 connect to yxdb
Database Connection Information
Database server = DB2/LINUX 9.7.6
SQL authorization ID = DB2INST1
Local database alias = yxdb
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25714482/viewspace-748508/
,如需转载,请注明出处,否则将追究法律责任。