db2 问题ERROR报告和解决方法
(2011-08-23 13:22:42)
标签:
db2error端口协议模式schemait |
分类: JAVA |
一:
com.ibm.db2.jcc.b.gm:
at
解决方法:
1、首先检查连接的db2服务器的防火墙有没有关闭,需要关闭防火墙才能连接远程数据库。
2、如果使用jcc.jar的Driver的话,需要使用db2set DB2COMM=TCPIP,才可以使用jdbc type v4 来连接。
3、检查DB2的服务是否都已经启动,尤其是提供远程连接的服务。
4、检查数据库名称是否正确
5、检查监听的端口有没有出错。检查端口有很多种方法:1:
这里补充db2端口的更多信息:
C:\WINDOWS\SYSTEM32\DRIVERS\ETC\services文件中与DB2相关的比如有如下这些:
DB2_DB2
DB2_DB2_1
DB2_DB2_2
DB2_DB2_END
DB2_DB2CTLSV_1
DB2_DB2CTLSV_2
DB2_DB2CTLSV_END
db2c_DB2CTLSV
其中下面几个是在安装是选择了partition才有的,一共有两个实例
实例一:db2c_DB2
DB2_DB2 60000/tcp
DB2_DB2_1 60001/tcp
DB2_DB2_2 60002/tcp
DB2_DB2_END 60003/tcp
实例二:db2c_DB2CTLSV
DB2_DB2CTLSV
60004/tcp
DB2_DB2CTLSV_1 60005/tcp
DB2_DB2CTLSV_2 60006/tcp
DB2_DB2CTLSV_END 60007/tcp
真正用于应用程序和编目数据库的端口号是db2c_DB2 50000/tcp 和db2c_DB2CTLSV 50001/tcp
一般在安装DB2的时候,默认安装都是建两个实例的,DB2和DB2CTLSV,所以,就对应两个端口:50000/tcp和50001/tcp。
其他端口是在安装选择分区方式时才会有的,这些端口时分区间的通讯使用
补充db2set DB2COMM=TCPIP之外的其他命令:
db2set -g
DB2COMM=TCPIP
db2set
db2set -all
DB2
sqlstate
原因有两个:1、没有设置访问用的Schema。2、使用的Schema和实际要访问的数据库表Schema不相符。
通常情况下可以通过currentSchema来设置连接Connection所用的当前模式,也可以不设置currentSchema,通过在sql语句中显式指明表的模式,如:select * from DB2ADMIN.TEST。
如果这两种方式都不采用,DB2会默认使用用户名作为访问数据库表的Schema,比如user为db2admin的时候不使用上述两种方式之一指定schema就会出现这个错误,不过前提是访问表的schema不是DB2ADMIN,如果是DB2ADMIn,应该是没有问题的。
补充关于db2的schema的相关知识。
另外,一般在执行SQL语句等db2命令时,除了密码以外是不用区分大小写的,这是因为db2会自动给你转换成大写。而且表名等object的名字也是以大写保存在数据库中的,不管你创建的时候是大写还是小写。但是特别注意的是使用com.ibm.db2.jcc.DB2Driver驱动连接数据库,在指定缺省模式名的情况下,模式名不会自动转换。就是说如果提供的是小写的模式名,那么以后的select,updata等数据库操作,没有显式指定模式名的情况下都将失败。当然是也可以建小写schema名的schema的。
三:
DB2
这个原因通常是指语法错误,仔细查看sql语句是否有错误。通常db2中的delete语句拒绝使用符号*,即是:delete
from tablename where ....而不是delete * frome tablename where
...
四:
DB2
EST,
这个错误是权限问题引起的。通过table的特权选项查看使用的用户的权限,并给予正确的授权,至少允许select、update、insert和delete。SQLERRMC=DB2ADMIN;SELECT;DB2ADMIN.TEST,
五:
[jcc][t4][10120][10898][3.58.82]
这个原因很明显,使用一个一个已经关闭的ResultSet去获取对象,结果肯定是null。查看是否将使用的ResultSet的变量名写错了。