`
mgoann
  • 浏览: 253977 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

DB2数据库常见问题汇总)

    博客分类:
  • 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".

根据原因码确定具体原因,原因码如下:


由于死锁而导致事务已回滚。


68 
由于锁定超时而导致事务已回滚。


72 
因为存在与事务中所涉及的 DB2 Data Links Manager 有关的错误,所以事务已回滚。


常见原因码为268。应用程序已回滚至上一次 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.dN为当前系统运行级别,使用runlevelwho –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: "SOCKETS".  Location

where the error was detected: "10.71.122.196".  Communication function

detecting the error: "connect".  Protocol specific error code(s): "111", "*",

"*".  SQLSTATE=08001

Administrator>db2 attach to L194 user db2inst1

输入 db2inst1 的当前密码:


SQL30081N 
检测到通信错误。正在使用的通信协议:"TCP/IP"。正在使用的通信API


"SOCKETS"
。检测到错误的位置:"10.71.100.191"。检测到错误的通信函数:"connect"


协议特定的错误代码:"10061""*""*"
  SQLSTATE=08001

解答:


1
  检查网络工作状态是否良好;


2
  通过db2 get dbm cfg | grep SVCENAME查看服务端口号,确认编目时使用的这个服务名称或端口号;并确定服务器端和客户端在etc/services文件中对服务名称、端口号和协议的配置一致;


3
  确定编目时使用的通信协议或etc/services文件中配置的通信协议跟服务器设置的一致(通过db2set DB2COMM查看服务器使用的通信协议);


4
  前面没问题,再去看看日志/sqllib/db2dump/db2diag.log是否有异常提示信息,根据提示解决问题。

 

1.15    不能分配应用程序支持层
内存不足(系统中可用的调页空间量或交换空间量或系统中可用的物理内存量),可能会导致问题,并提示如下错误信息:


SQL1221N  The Application Support Layer heap cannot be allocated.  SQLSTATE=57011

解答:确认有足够的内存资源可用于满足数据库管理器和系统上正在运行其它程序的需求。通过db2 update dbm cfg using ASLHEAPSZ 40(单位为4KB)适当增大应用程序支持层堆大小,或在适当的地方,停止使用该系统的其它程序。注意修改管理器的配置后,一定要重新启动实例,修改才能生效。

1.16    如何查看数据库占用内存情况
解答:1
db2pd –memsets

1.17    如何查看DB2的进程
解答:使用db2_ps 可以确定db2是否正常启动。

1.18    如何将数据库运行的环境收集起来
解答:使用db2support ./ –d 数据库名 –s 将数据库环境及系统环境收集起来打成包,对于数据库管理器出现严重错误的情况,可以将此包发送给IBM的技术支援分析。

1.19    如何扩大表空间的容量
解答:给表空间增加新的容器:alter tablespace <tablespacename> add (device ‘/dev/raw/raw110’ 页数);我们可以通过list tablespaces show detail查看表空间大小是否增大了或通过list tablespace containers for 表空间ID可以查看到该表空间使用的裸设备。

1.20    数据库实例用户无法访问裸设备
当数据库实例用户没有权限访问创建数据库所用的裸设备时,数据库将无法使用,并会提示:
The system attempted to write to a read-only file.  SQLSTATE=55009

解答:修改裸设备的归属属性:chown db2inst1:db2grp1 /dev/raw/rawXX为裸设备id)。

1.21    如何让数据库支持中文字符集
解答:在服务器端修改数据库字符集以支持中文字符集:db2set db2codepage=1208

1.22    如何查看节点目录和数据库目录的信息
解答:使用db2 list node directory 可以查看到所有节点编目信息,使用db2 list db directory 可以查看到所有数据库的编目信息。

1.23    db2 select * from …类似这样含有特殊字符的语句在Linux/Unix平台下,执行总是提示错误,无法执行
解答:由于sql语句含有特殊字符,所以需要将sql语句加上双引号。但在db2命令行下则不需要加。

 

1.24    如何获取当前时间
解答:使用db2 "select current time  from sysibm.sysdummy1" 可以查看到当前的时间。


      2
db2mtrk –i –d –v

      3
db2 get snapshot for all on 数据库名
| more +/ Memory usage for database

      4
db2 update db cfg using DFT_MON_BUFPOOL on永久打开Buffer pool监视开关,或通过db2 update monitor switches using bufferpools on 数据库名临时打开某个数据库对Buffer pool监视的开关(通过db2 get monitor switches查看临时开关),然后使用定期执行db2 get snapshot for bufferpools on 数据库名,并观察Buffer pool data logical readsBuffer pool data physical readsBuffer pool index logical readsBuffer pool index physical reads字段来确定系统的数据与索引的页面命中率。

1.25    如何统计某个模式的对象数,并避免在删除数据库对象时误删除其他模式的对象
解答:可以在select语句的where字句中增加对模式的限制:select * from tabname where tabschema = ‘大写的模式名(前提是之前要对对象设置模式:set schema = ‘大写的模式名),在删除某个模式的对象时,可以使用,类似此例的方法:drop procedure db2inst1.procname

1.26    如何在命令行下查看错误代码的说明
解答:使用db2 ? sqlcode 可以查看到相应错误码的说明。如db2 ? sql01450n


1.27   
如何在一个存储过程中调用另一个存储过程

解答:在需要调用的地方,使用类似此例的方法及可:CALL xp_VerifyTables(i,nTableType,nVerifyTableResult,sError); 其中xp_VerifyTables为要调用的存储过程名,其参数在调用之前一定要声明,最好都进行初始化。


1.28   
如果查询结果的字段比较少,如何将每条纪录的列在同一行,以增强可读性

解答:使用substr(col,exp1,exp2)对查询结果的各字段进行处理,如:db2 "select substr(procschema,1,15),substr(procname,1,25),create_time,valid from syscat.procedures"exp1为输出字段col显示的起始位置,exp2col显示的长度。

1.29    如果认为某个错误不必理会,如何屏蔽它,不进行捕捉它
解答:对全局使用,可以在db2安装目录下的cfg/db2cli.ini文件里添加如下:
 

IgnoreWarnList = "'sqlstate1', 'sqlstate2', ..."
,或使用命令db2 update cli cfg for section 段名 using "'sqlstate1', 'sqlstate2', ...";对某个应用,如在存储过程中,使用DECLARE CONTINUE HANDLER FOR SQLSTATE ‘01504’这种方式,跳过这种错误。


1.30   
常用的几中数据类型的精确度和长度为多少

解答:


SMALLINT -32768~32767(
精度为5的两字节的整型)


INTEGER  -2147483648~2147483647(
精度为104字节的整型)


BIGINT   -9223372036854775808~9223372036854775807(
精度为198字节整型)


REAL     -3.402E+38~-1.175E-37
1.175E-37~3.402E+38(单精度浮点数


是一个实数的32位近似值)


DOUBLE/FLOAT  (
双精度浮点数是一个实数的64位近似值)


DECIMAL/NUMERIC 
(小数点的位置是由该DECIMAL数的精度和规模决定,规模


是该数的小数部分个数,其不能为负数和大于精度;最大精度为31


CHAR
字符串的长度是有序字节数;长度一分配好就固定了,其长度从1~254


VARCHAR
有三种变长字符串:


  VARCHAR 32672
字节长


  LONG VARCHAR 32700
字节长


  CLOB      2G
字节长(2147483647字节长)

1.31    使用EXECUTE执行SQL语句时需要注意些什么
解答:EXECUTE IMMEDIATE host-variable中的host-variable必须是小于最大语句的长度65535的字符串;如果SQL语句值需要执行一次或不频繁,可以使用EXECUTE IMMEDIATE;如果SQL语句需要重复地执行,应该使用PREPAREEXECUTE语句,使用EXECUTE语句可以用参数标志;注意EXECUTE语句不能和SELECTVALUES语句一起使用。PREPARE跟游标一起使用,就不需要EXECUTE语句。


1.32   
通常如何使用GET DIAGNOSTICS语句

解答:使用GET DIAGNOSTICS 变量 = ROW_COUNT语句可以获取最后一次执行INSERTUPDATEDELETE之后的记录数;DB2 SQL PL 支持GET DIAGNOSTICS语句获取SQL语句执行的信息,它可以用来返回CONDITION HANDLER的错误信息;GET DIAGNOSTICS EXCEPTION 1 变量 = MESSAGE_TEXT;但这样就不能再获取行数了。注意:GET DIAGNOSTICS语句是不支持SELECTSELECT INTO语句的。


1.33   
如何查看DB2的日志

解答:在$HOME/sqllib/db2dump目录下,以c开头的目录为核心文件所在的目录(如:c56772.010),目录名以字母“c”开头,后跟受影响进程的进程标识(pid)号,扩展名是数据库分区号;没有字符开头的文件转储文件,它是在发生错误时创建的,它包含将有助于诊断问题(例如,内部控制块)的其它信息;db2diag.log为诊断日志,db2inst1.nfy纪录管理日志。

1.34    无法删除数据库
如果当前数据库仍在被使用,删除时将无法删除,并提示:


SQL1035N  The database is currently in use.  SQLSTATE=57019

解答:先将所有与数据库的连接断连:db2 connect reset(db2 terminate),并将数据库离线(offline)db2 deactivate db 数据库名,然后再删除数据库。


1.35   
查询数据库系统表中的对象失败

比如我们要从系统存储过程表中查询我们创建的某个存储过程的信息,如下所示:

SELECT count(*) FROM syscat.procedures where procname = sObjectName

如果sObjectName为小写的字符串,执行该查询语句将返回:


0 record(s) selected

解答:由于我们创建的对象,会在系统表中保存相关信息,而对象名在系统表中会变成大写,所以我们要从系统表中指定查询我们创建的对象时一定要使用大写,可以使用upper()来改为大写。


1.36    
DB2数据库中如何将整型转换为字符型

解答:在oracle中有一个to_char()的函数可以将整型转换为字符型,在DB2中也存在相似的函数char()来转换。


1.37   
在对某个对象操作时,其名称由几部分连接而成,这样有时无法操作成功

解答:由于对象名由几部分组成,这样在连接组合时,各部分之间可能存在空白带,导致对象名和数据库实际的不一致,从而无法进行访问操作。因此,需要在连接之前,使用ltrimrtrim将各部分的左右空白带去掉。

 

1.38    在多处使用同一个游标时,第一次使用后,第二次使用就发生错误,这是怎么回事呢?
解答:可能是前面使用完游标后,没有将游标关闭,下次接着再使用该游标时,发现该游标已打开,在使用中,将发生错误。应在每次使用完游标后,将其关闭。


1.39   
SuSe9下执行raw命令将裸设备和逻辑卷挂接时裸设备的归属属性会发生改变。

执行含有raw命令的脚本时,原归属于db2inst1.db2grp1的裸设备,变为归属属性为root.disk,在raw命令后加上修改归属命令chown无法执行。


解答:执行raw命令后归属属性会变为root.disk,但在刚执行raw命令后无法接着执行chown命令,因此,我们在raw命令后加上sleep 2语句,再执行chown命令即可。

分享到:
评论

相关推荐

    DB2数据库错误信息全面汇总

    ### DB2数据库错误信息全面汇总 #### 知识点概览 本文档旨在全面解析DB2数据库中的各类错误信息,涵盖了SQLCODE与SQLSTATE及其对应的错误描述。通过这些信息可以帮助DB2用户快速定位并解决问题。 #### 一、SQLCODE...

    db2 常见错误 吐血总结

    ### DB2常见错误详解 #### 一、错误42704:数据库名称未定义 **错误信息**: ``` SQL0204N "SYSTEM_1386_US" is an undefined name. SQLSTATE=42704 ``` **原因分析**: 此错误表明尝试创建一个已经存在的数据库...

    IBM-DB2数据库指令大全

    每个参数都有其特定的用途和影响范围,正确配置可以显著提升DB2数据库的运行效率和响应速度。 在使用这些指令时,建议先了解每个参数的含义和作用,以及它们如何相互影响。在生产环境中,务必谨慎操作,确保变更...

    DB2数据库使用经验积累

    ### DB2数据库使用经验积累 #### 一、前言与背景 本文档总结了一系列关于IBM DB2数据库的使用经验和技巧,这些经验主要来源于在首都国际机场和海口梅兰国际机场系统开发项目中的实践经验。项目的运行环境包括IBM ...

    DB2通用数据库自学教程

    在探讨DB2数据库自学教程之前,我们首先需要理解SQL(Structured Query Language)的地位与作用。SQL作为第三代编程语言,其核心功能在于处理结构化数据,尤其是在关系型数据库管理系统的上下文中。它提供了一种统一...

    DB2(DataBase2DataBase)数据库常见报错信息整理(汇总).rar

    1、DB2(DataBase2DataBase)开发常遇到一些错误,汇总了几百个常见的错误信息,用以查错使用。 2、可以按需检索,检索错误码或者关键字都可以。 3、资源内容列举: 关键字:SQL0084 SQLCODE -84 说明: SQL statement...

    DB2网上资源汇总

    DB2是一种广泛使用的商业关系型数据库管理系统,由IBM公司...综上所述,这个资源包为DB2的使用者提供了一系列实用的技术指导,涵盖了数据库管理、性能优化、问题排查等多个方面,对于深入理解和操作DB2数据库大有裨益。

    DB2到GreenPlum/PostgreSQL的转换指南

    - **数据库迁移工具**:如IBM DB2 Migration Toolkit,它可以自动检测并报告DB2数据库中的对象,并提供转换建议。 - **脚本转换工具**:这些工具可以分析现有的DB2 SQL脚本,并尝试将其转换为适用于GreenPlum或...

    IBM DB2通用数据库商业智能教程

    【IBM DB2通用数据库商业智能教程】 IBM DB2通用数据库是一款强大的关系型数据库管理系统,广泛应用于企业级的数据存储和管理。...同时,了解DB2的高级特性和最佳实践,有助于在实际工作中解决复杂的数据问题。

    DB2常用傻瓜问题1000问_部分.doc

    这篇文档主要针对DB2初学者,汇总了一些常见问题和基础知识。以下将详细解释文档中提到的关键点: 1. **DB2产品级别**:DB2提供多种版本以适应不同规模和需求的用户,包括企业版(ENTERPRISE EDITION)、工作组版...

    DB2 错误信息汇总

    DB2 错误信息汇总是数据库管理员和开发者在处理DB2数据库时的重要参考资料,它能够帮助快速定位并解决SQL语句执行过程中遇到的问题。DB2的错误信息通常由`sqlcode`和`sqlstate`组成,这两部分提供了关于错误性质和...

    DB2错误信息.txt

    DB2常见错误代码中文对照 DB2数据库错误信息全面汇总

    DB2认证730&731资料汇总

    通过731认证的考生应该能够有效地管理和优化大型、复杂的DB2数据库环境,确保数据的安全性和可靠性。 在准备这两个认证的过程中,考生通常会接触到以下关键知识点: 1. **DB2架构**:理解DB2的数据存储结构,包括...

    DB2 技巧.doc

    DB2技巧文档主要涵盖了数据导入导出、性能调整、字符集、参数调整以及常见问题的解决方案,这些都是DB2数据库管理中的关键环节。 一、数据的导入导出 数据的导入导出是数据库管理中的基础操作,DB2提供了多种工具如...

    常用数据库背景介绍总汇

    本文将概述五个常见的数据库系统及其历史发展。 1. **IBM 的 DB2** - IBM作为数据库领域的先驱,早在1977年就完成了System R的研究,这是一个关系数据库模型的原型。随后在1980年代,IBM推出了DB2,旨在提供简单、...

    db2connect

    在使用DB2时,"db2connect"是一个基础且重要的命令,它用于连接到一个特定的DB2数据库实例。在数据库管理中,正确地执行`db2 connect to bidb`这样的命令是确保能正常访问和操作数据库的第一步。 在数据仓库环境中...

    db2常用45条语句

    以上SQL语句展示了DB2数据库操作中的基本查询、连接、聚合、日期处理、子查询以及存在量词等技巧,这些都是DB2数据库管理员和开发人员日常工作中常见的操作。掌握这些语句能够帮助你更有效地管理和分析数据。在实际...

    常见主流数据库的分类与详细比较.docx

    常见的数据库主要分为以下几类: 1. 关系型数据库(Relational Database Management System, RDBMS) - IBM的DB2:DB2是IBM开发的关系型数据库产品,广泛应用在企业级环境中。它支持多种操作系统平台,从PC到UNIX...

Global site tag (gtag.js) - Google Analytics