DB2数据库常见问题汇总
1.1 创建存储过程时需要注意变量声明的顺序
创建存储过程时,声明变量顺序不符合规范将提示:
SQL0104N An unexpected token "<variable declaration>" was found following "".
Expected tokens may include: "<SQL statement>". LINE NUMBER=11.
SQLSTATE=42601
解答:声明变量、游标以及条件处理要有序进行;普通变量声明在先,其次到游标的声明,最后才能声明condition handler。
1.11 因为死锁或超时,所以当前事务已回滚。
当前事务因死锁或超时而回滚,将提示:
SQL0911N The current transaction has been rolled back because of a deadlock or timeout. Reason code "2".
根据原因码确定具体原因,原因码如下:
2 由于死锁而导致事务已回滚。
68 由于锁定超时而导致事务已回滚。
72 因为存在与事务中所涉及的 DB2 Data Links Manager 有关的错误,所以事务已回滚。
常见原因码为2、68。应用程序已回滚至上一次 COMMIT。
解答:为了帮助避免死锁或锁定超时,对长时间运行的应用程序或有可能遇到死锁的应用程序频繁发出 COMMIT 操作(若有可能的话)。并适当地增大锁超时时间:db2 update db cfg using LOCKTIMEOUT 60(此处60秒为例)。
1.12 在客户端查询数据库中文信息会产生乱码
解答:在服务器端或客户端将编码类型设置为1208以支持中文:db2set DB2CODEPAGE=1208。
1.13 重启动机器后,用于创建表空间的裸设备与逻辑卷挂接失效,数据库无法使用,提示:SQL0290N Table space access is not allowed. SQLSTATE=55039
解答:按原来的对应关系重新将裸设备和逻辑卷挂接起来;或创建一个机器重启时自动执行的脚本,将该脚本放在/etc/init.d目录下,并在/etc/init.d/rcN.d(N为当前系统运行级别,使用runlevel或who –r获得,不同系统命令不同)目录下建一个硬连接。
1.14 编目时确保使用正确的服务端口号
若在编目时使用的服务端口号与通过db2 get dbm cfg | grep SVCENAME查看到不一致,那在连接节点或数据库时,将出现如下提示信息:
db2inst1@osta1:~> db2 connect to l2cache
SQL30081N A communication error has been detected. Communication protocol
being used: "TCP/IP". Communication API being used: