课程:
- 1、db2 25000错误怎么解决
- 2、db2 error:204 是什么错误!
- 3、DB2 报错,错误码437, DB2版本9.7,STMTHEAP 值为automatic
- 4、db2安装不成功提示: DB29501E DB2 检测到不一致环境。请检查:“DB2INSTANCE: -2029059916”是什么原因
- 5、如何分析DB2的错误信息
- 6、db2 数据库报 -803 错误怎么解决?
db2 25000错误怎么解决
DB2相关问题及解决方法:
一、DB2中的代码页(codepage)问题。
DB2备份时发生过代码页错误的问题,修改代码页后备份正常,但创建数据库时又发生代码页的错误。这是DB2服务器使用的代码页配置和客户端使用的代码页配置不同造成的(注:DB2服务器的代码页配置是独立的,用代码页不同的客户端操作服务器就会产生错误。本机操作服务器称为本地客户端,操作系统使用的代码页有可能和DB2服务器的配置不同,和远程客户端一样会产生上面的问题)。代码页和系统使用的字符集有关,这也是windows下的数据库备份和Linux下的数据库备份不能相互恢复的原因(Windows的codepage为819,一般的国标库/GBK为1386)。可用db2set命令对服务器的代码页进行设置。(具体设置见后文)
locale命令查看本地字符集
二、TIANJIN数据库备份不能恢复的问题
TIANJIN数据库备份恢复时,在Linux系统下提示container被占用,这是由于TIANJIN数据库采用了系统以外的表空间引起的,不能采用常规方法进行恢复。
恢复步骤为:
db2 create db targetdb using codeset GBK territory zh_CN
(创建数据库供恢复)
db2 connect to tianjin
(连接到TIANJIN数据库)
db2 list tablespaces
(查看TIANJIN数据库使用的表空间)
db2 list tablespace containers for 3
(查看表空间3使用的容器)
…………
db2 list tablespace containers for 7
(查看表空间7使用的容器。)
(TIANJIN数据库用到了7个表空间,其中1、2为系统默认,其他为自己创建,若已知道数据库表空间,以上步骤可省略)
mkdir [directory]
(创建表空间用到的容器所在目录。需要多少容器,创建多少个目录,这个目录必须是DB2用户有权限的目录)
db2 connect reset
(释放所有连接)
db2 restore db sourcedb from /DB2Data/backupdata/ into targetdb redirect
(恢复数据库)
db2 "set tablespace containers for 3 using (path '/home/db2inst1/tt/1')"
(设置表空间的容器,path后是容器存放的路径)
db2 "set tablespace containers for 4 using (path '/home/db2inst1/tt/2',path '/home/db2inst1/tt/3')"
(表空间用了多个路径的情况)
…………
db2 "set tablespace containers for 7 using (path '/home/db2inst1/tt/6')"
db2 restore db tianjin continue
(完成数据库恢复)
连接数据库验证安装即可
三、不同操作系统中数据库的移动(db2move)
由于我们的系统中使用了多个用户、多个表空间,不能直接用db2move进行恢复,必须先生成相关表空间和表,再插入数据。
1、 生成ddl文件
db2look -d 数据库别名 -e -p -l -o 目标文件的名字-i 用户名 -w 密码
-d指定数据库,-o指定目标文件,-l表示生成表空间,-i指定用户名,-w指定密码。
如:db2look -d jsyrem -e -p -l -o jsyrem.ddl -i zgc3 -w zgc
注意:源数据库必须在本地客户端编目,生成的文件存放在当前目录下。
2、 生成db2move的导出文件
db2move数据库别名export -l 大对象存放目录(可省略) -u 用户名 -p 密码
如:db2move jsyrem export -l lob -u zgc3 -p zgc
注意:源数据库必须在本地客户端编目,大对象存放目录可以不用事先建立,由系统自动生成,生成的文件存放在当前目录下。
3、 新建目标数据库
4、 在目标数据库里创建表空间和表
db2 -tvf ddl文件名
例如:db2 -tvf jsyrem.ddl
注意:
①两个数据库里的代码页必须设置为一致
②执行命令前必须先修改ddl文件,设置里面的connection连接至目标数据库(文件里可能会有多处需要对连接进行设置)。
③执行命令前必须先修改ddl文件,设置表空间地址,为目标数据库建立表空间指定存放位置。这些目录可能需要事先建好。(目录1、2……n可以不用建,由系统自动生成)
④执行命令必须在生成的文件存放的目录下进行。
5、 导入数据
db2move 数据库名 import -io insert -l大对象存放目录
-io 指定导入方式,为create表示数据库中不存在该表时自动生成表,为replace表示替换原有内容,为insert表示仅仅插入数据;-l指定大对象存放目录。
db2move jsy2 import –u 用户名 –p 密码
注意:执行命令必须在生成的文件存放的目录下进行。
6、 其他:由于数据库表之间存在键关系,数据导入时可能会发生冲突,需要记下发生冲突的表,并修改db2move.lst文件,把这些表对应的行挪到文件的最后生成。
7、 可通过EXPORT文件和IMPORT文件查看数据导入导出时的系统信息,通过tablennn.msg文件查看某个表导入导出时的系统信息。
注意:以上操作针对的客户端是windows操作系统,linux系统下会发生错误。
数据库创建
首先建立文件夹
#mkdir /ecdsdbfs
授权给db2inst1访问ecdsdbfs文件夹的权限
#chown db2inst1:db2adm1 /ecdsdbfs
执行建库脚本:
#su – db2inst1
$db2 create database test on '/opt/ibm/data' using codeset utf-8 territory cn
注意:本数据库采用utf-8格式
1 连接到DB2 Server,打开DB2 Command,创建一个名为cogsam83的数据库,并为其建立缓存大小
create db cogsam83 alias cogsam83 using codeset UTF-8 territory CA
change db cogsam83 comment with 'Sample Data for Cognos 8.3'
connect to cogsam83
update db cfg using applheapsz 1024 deferred
update db cfg using locktimeout 240 deferred
connect reset
如果是在Linux上刚装完DB2即刻建立database,可能会遇到错误DB21019E An error occurred while accessing the directory "/root". 该错误原因为使用“su username”而非“su - username”在终端切换用户,前者相当于简单地同时登录有用户,而后者相当于注销后重新登录新用户,所以不会维持之前用户的ENV设置。
2 创建缓冲池和表空间
connect to cogsam83
create bufferpool cog04kbp immediate size 250 pagesize 4k
create bufferpool cog08kbp immediate size 250 pagesize 8k
create bufferpool cog16kbp immediate size 250 pagesize 16k
create regular tablespace cogsample pagesize 16k managed by automatic storage extentsize 16 prefetchsize 16 overhead 10.5 transferrate 0.33 bufferpool cog16kbp
comment on tablespace cogsample is 'Cognos Sample Data'
grant use of tablespace cogsample to public
connect reset
3 创建几个数据库模式(Database Schema)
connect to cogsam83
create schema gosl
comment on schema gosl is 'GO Sales'
create schema gosldw
comment on schema gosldw is 'GO Sales Data Warehouse'
create schema gohr
comment on schema gohr is 'GO Sales Human Resources'
create schema gort
comment on schema gort is 'GO Retailers'
create schema gomr
comment on schema gomr is 'GO Multilingual Retailers'
create schema godmt
comment on schema godmt is 'GO Data Manager Target'
#授予用户cognos数据库管理权限
grant dbadm on database to user cognos
connect reset
4 修改数据库配置页
connect to cogsam83
update dbm cfg using intra_parallel NO
update dbm cfg using federated NO
update dbm cfg using fed_noauth NO
update db cfg for cogsam83 using maxlocks 22
update db cfg for cogsam83 using locklist 50
update db cfg for cogsam83 using dft_degree 1
update db cfg for cogsam83 using avg_appls 1
update db cfg for cogsam83 using stmtheap 2048
update db cfg for cogsam83 using dft_queryopt 5
connect reset
5 编目数据库
catalog tcpip node dbnode remote dbhost server 50000
catalog database cogsam83 at node dbnode with 'Sample Data for Cogsam 8'
6 导入Samples内容到数据库中
适用于DB2的Samples文件在 Cognos安装目录/c8/webcontent/samples/datasources/db2 下,将GS_DB.tar解压出来,用DB2管理员帐号登录,使用DB2MOVE命令导入。
DB2MOVE dbname IMPORT -U username -P password
在Linux下使用DB2MOVE命令可能会出现错误提示Error opening report file. Terminating,该错误原因为当前用户对解压出的文件权限不够,设置所有解压的文件Permission为可写操作即可。
导入数据库后可以运行 Cognos安装目录/c8/webcontent/samples/datasources/db2下的gs_db_modify.bat(需要先更改gs_db_modify.sql第一行中的dbname, user, password为你自己的配置),在Linux下可以先删除gs_db_modify.log,然后在终端手动输入以下命令运行gs_db_modify.sql
DB2 -f gs_db_modify.sql -z gs_db_modify.log
四、联合数据对象的建立
联合数据对象提供将一个数据库里的用户和表映射到另一个数据库的功能。用户可通过对后者的访问达到访问前者的目的。
建立步骤:
1、 前期工作1:配置数据库实例名的参数,设置“管理”下的FEDERATED为“”;是
2、 前期工作2:源数据库编码到客户端
3、 在联合数据库对象中创建包装器。(DB2àDB2的映射包装器名选择DRDA,库名使用缺省的缺省db2drda.dll即可)
4、 创建服务器。(远程数据源的名称填写数据库编码的别名,DB2àDB2的映射服务器类型选择DB2/UDB,选择正确的版本号,用户标示和密码填写目标库的用户名密码,其余内容默认即可)
5、 建立用户映射。选择远程用户和本地用户进行映射。
6、 建立别名映射,即是表的映射。
五、DB2中的常用命令
1、 db2set命令
db2set:查看db2的常用设置
db2set –lr:查看db2的所有变量
db2set 变量名 = 变量值:设置db2中的变量。如:db2set db2codepage = GBK;db2set db2country = zh_CN。(这是最常用的两个设置,设置codepage为GBK国标库,country为zh_CN中国。设置后可解决数据库创建、备份时代码页错误的问题。设置完后用db2 terminate中止一下即可起作用)
2、 查看数据库配置
查看Database Manager配置:db2 get dbm cfg
查看某数据库配置:
两种方法:
第一、 db2 get db cfg for 数据库名。如db2 get db cfg for tianjin
第二、 先用connect命令连接上数据库,再用db2 get db cfg。如:
connect to tianjin(或:connect to tianjin user zgc3 using zgc)
db2 get db cfg
可以只查看其中某一项的配置,如查看territory
db2 get db cfg for tianjin|grep terr
修改数据库配置:db2 update db cfg using 参数 参数值
3、 数据库备份、数据库创建、数据库恢复
数据库备份:db2 backup database 数据库名 to 备份位置(DB2用户必须对备份位置有权限)。如:db2 backup database tianjin to /home/db2inst1/backup。注意: 备份数据库时应用db2 connect reset将所有连接去掉。
数据库创建:db2 create database数据库名。如:db2 create database dbname
用特定的字符集创建数据库:db2 create database 数据库名 using codeset [codeset] territory [terriroty]。如:db2 create database dbname using codeset GBK territory CN
数据库恢复几点说明:若文件夹中只有一个备份文件,可以不用写taken at。若数据库恢复中产生错误,可用restore database dbname continue/abort来对恢复进行继续和取消。
或者用控制台创建数据库时,第六步region处选择PRC(People’s Republic Of China)
4、 其他常用命令
db2move:在不同操作系统中移植数据库。但因存在外键约束,应对文件进行编辑。
db2level;查看DB2的修订版本
db2look:导出ddl?
db2 list table/tablespaces/db at……列出相应内容
(具体参看IBM红皮书)
5、 在客户端增加、查看结点和数据库编目
增加结点编目:db2 catalog tcpip node 结点名字 remote 结点所在ip地址 server 50000
查看结点编目:db2 list node directory
删除结点编目:db2 uncatalog node 结点别名
增加数据库编目:db2 catalog db 远程数据库名字 as 数据库别名 at node 结点名字
查看数据库编目:db2 list db directory
删除数据库编目:db2 uncatalog db数据库别名
6、 不同操作系统的倒库(db2move):
export:db2move dbname export
import:db2move dbname import(-io replace/create -u username –p password)
load:db2move dbname load
注意:执行export命令,生成的文件存放在当前目录下,dbname是catalog上的别名。import也是从当前目录读取文件。在将库import入一个新库时,应该先建立一个库,然后db2move 新库名称 import……。-io参数表示导入的库里的表覆盖/新建到新库里,-u、-p表示用于建库的用户名和密码。
7、 远程操作数据库
db2 attach to 数据库别名 user 用户名 using 密码
即可在本地操作远程数据库(create db、drop db等操作)
注意:要操作的数据库必须在本地编目
要取消attach可用命令db2 detach,或attach到其他数据库。
8、 将数据库操作的控制台信息存入文档
要执行的命令名控制台信息文件名
9、 DB2里的帮助
db2 ? 要查询的内容(如:db2 ? sql30082n)
或者直接输入命令(db2move)不带参数
10、 停止application
数据库操作过程中可能会发生错误,导致数据库不可用。此时可用force application命令停止这种操作。命令格式可以是db2 force application application号(停掉单个application)或db2 force application all(停掉所有application)两种形式。
11、 其他
六、对于系统优化的建议
1、 增加buffpage的配置
2、 增加sortheap的配置(一般4M以上)
3、 将锁定超时 locktimeout设置为on或yes
4、 恢复的日志保留
(具体设置参看IBM红皮书)
命令:
db2 connect to tianjin
db2 update db cfg using LOGRETAIN yes
db2 backup db tianjin //设置完LOGRETAIN后应备份数据库
/home/db2inst1/sqllib/bin //进入此目录下
db2empfa tianjin; //Multi-page file allocation enabled
db2 update db cfg for tianjin using BUFFPAGE 25000 // 或更多
db2 update db cfg for tianjin using LOCKLIST 1000;
db2 update db cfg for tianjin using LOCKTIMEOUT 15
db2 update db cfg for tianjin using SORTHEAP 1000 //或更多
db2 update db cfg for tianjin using LOGFILSIZ 10000
db2 alter bufferpool ibmdefaultbp size -1
db2 update dbm cfg using SHEAPTHRES 25000 //Max to half of the total mem.
七、在root窗口下启动DB2控制台
1、 以db2inst1登录:su – db2inst1(-表示登录同时读取db2inst1的环境变量)
2、 export DISPLAY=127.0.0.1:0.0
3、 xhost +
4、 db2cc
方法二。
-- *(1) 作为 root 用户登录。
-- *(2) 在命令行上,运行以下命令:xhost + localhost
-- *(3) 运行以下命令:su - db2inst1
-- *(4) 运行以下命令:db2cc
vnc 启动 vncserver 启动图形界面
八、数据导出
1、 EXPORT TO 'c:/UR_ENTERPRISE.del' OF DEL SELECT * FROM ZGC3.UR_ENTERPRISE
2、 EXPORT TO 'c:/UR_ENTERPRISE.ixf' OF ixf SELECT * FROM ZGC3.UR_ENTERPRISE
九、查看node
1、list node directory
2、删除node:? uncatalog
十、建序列
CREATE SEQUENCE "ZGC3 "."SP_SEQ_MO_wbk" AS INTEGER
MINVALUE 0 MAXVALUE 2147483647
START WITH 21 INCREMENT BY 1
CACHE 20 NO CYCLE NO ORDER;
十一授权
如果遇到DB2 License过期的问题,可以使用以下命令对DB2的License进行授权。
以管理员身份进入DB2环境,键入:db2licm -a [License目录中的db2ese.lic文件]
系统提示成功后,可通过 db2licm -l 显示授权信息
如果是,则激活方法如下:
1.cp /cdrom/db2/license/db2ese.lic /var/db2/db2ese.lic
2.su - db2inst1
3.db2licm -a /var/db2/db2ese.lic
db2 error:204 是什么错误!
SQL0204N "名称" 是一个未定义的名称。
解释:
此错误由以下之一引起:
o 未在数据库中定义由 "名称" 标识的对象。
o 在表上未定义由 "名称" 标识的数据分区。
o 正在使用某个数据类型。此错误可能是由于下
列原因而发生的:
- 如果 "名称"
是限定名称,则具有此名称的数据类型在数据
库中不存 在。
- 如果 "名称"
是非限定名称,则用户的函数路径不包含期望
的数据类 型所属于的模式。
- 该数据类型在创建时间戳记早于程序包绑定时
间的数据库中不存在(适用于静态语句)。
- 如果数据类型在 CREATE TYPE 语句的 UNDER
子句中,则该类型名可能与正定义的类型相同
,这 是无效的。
o 下列其中一项中正在引用某个函数:
- DROP FUNCTION 语句
- COMMENT ON FUNCTION 语句
- CREATE FUNCTION 语句的 SOURCE 子句
如果 "名称"
是限定名称,则函数不存在。如果
"名称"
是非限定名称,则当前函数路径的任何模式中
都不存 在
此名称的函数。注意,函数不能以
COALESCE、 NULLIF 或 VALUE
内置函数作为源函数。
o 在 CREATE SECURITY LABEL COMPONENT 语句中 UNDER
子句右边使用了名为“名称”的元素,但尚未
将该 元素定义为 ROOT
或者在其他某个元素下方(UNDER)。
o 下列其中一个标量函数指定了“名称”标识的
安全策略,但在数据库中未定义该安全策略。
- SECLABEL
- SECLABEL_TO_CHAR
- SECLABEL_BY_NAME
可为任何类型的数据库对象生成此返回码。
联合系统用户:在数据库中未定义由 "名称"
标识的对象,或者 "名称" 不是 DROP NICKNAME
语句中的昵称。
某些数据源不向 "名称"
提供适当的值。在这些情况下,消息标记将具有以下格
式: "OBJECT:数据源
TABLE/VIEW",指示指定数据源的实际值未知。
不能处理该语句。
用户响应:
确保在 SQL 语句中正确指定了对象名(包括任何必需
的限定符),并且它存在。
如果该名称表示一个数据分区,则查询目录表
SYSCAT.DATAPARTITIONS
以找到一个表的所有数据分区。对于 SOURCE
子句中缺少的数据类型或函数,可能是该对象不存
在,或该对象处于某模式中,但该模式不在您的函
数路径中。对于 CREATE SECURITY LABEL COMPONENT
语句来说,确保先将每个元素指定为 ROOT 或者 UNDER
子句中的子代,然后再在 UNDER
子句中将其指定为父代元素。对于标量函数
SECLABEL、SECLABEL_TO_CHAR 或 SECLABEL_BY_NAME
来说,确保对参数“安全策略名”指定了有效的安
全策略。
联合系统用户:如果该语句是 DROP
NICKNAME,则确保该对象实际上是一个昵称。该对象可
能不存在于联合数据库中或数据源上。验证联合数
据库对象(如果有)和数据源对象(如果有)的存
在情况。
sqlcode : -204
sqlstate : 42704
DB2 报错,错误码437, DB2版本9.7,STMTHEAP 值为automatic
你的问题看样子是堆不够大了。
在大多数情况下,STMTHEAP参数的缺省 AUTOMATIC 设置都是可接受的。设置为 AUTOMATIC 时,在编译的动态编程连接枚举阶段分配的总内存量存在内部限制。如果超过此限制,那么将使用贪婪连接枚举来编译语句,或者语句仅受剩余 appl_memory 和/或 instance_memory 的大小限制。如果应用程序正在接收 SQL0437W 警告,并且查询的运行时性能不可接受,那么您可能要考虑设置一个足够大的手动 stmtheap 值,以确保始终使用动态连接枚举。
希望能帮到你。
db2安装不成功提示: DB29501E DB2 检测到不一致环境。请检查:“DB2INSTANCE: -2029059916”是什么原因
这个是官方信息
当启动控制中心时,报错误DB29501E:
DB29501E DB2 检测到不一致的环境。请检查以下错误:"错误"
说明:
检测到操作环境中的错误。
用户响应:
此错误可能是由于不一致的 DB2 或操作系统环境引起的。尝试更正错误消息中标识的问题,并重新发出该命令。
解答
DB29501E DB2 检测到不一致的环境
这个错误发生的原因是环境变量DB2INSTANCE没有设置为一个有效值。在WINDOWS环境中,启动控制中心或JDBC Applet服务器服务时,需要DB2INSTANCE变量。
要避免DB29501E错误,确保环境变量DB2INSTANCE被设置为一个有效值。可以通过以下途径来设置此变量:
打开 控制面板-系统-高级-环境变量 窗口,在系统环境变量找到DB2INSTANCE,编辑并设定正确值也可以通过执行命令来设置,命令是
set db2instance=(实例名)
如:
set db2instance=DB2
请注意命令行设置只影响当前CMD或CLP窗口。命令db2 get instantce
可以得到当前命令窗口的 DB2INSTANCE 值
完全修改系统级的DB2INSTANCE环境变量的值必须使用前面所述的第一个方法。如果为了JDBC APPLET服务能成功启动,则需要重新启动机器。
如何分析DB2的错误信息
DB2数据库错误信息:
com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: TBSPACEID=2, TABLEID=640, COLNO=0
分析DB2报出的错误信息,主要从六个方面进行分析:
SQLCODE, SQLSTATE, SQLERRMC, TBSPACEID, TABLEID, COLNO
1、先从SQLCODE和SQLSTATE两方面的数字确认是什么原因(见网址:)
2、在根据TBSPACEID和TABLEID两方面确认是哪个表
SQL语句:select * from syscat.tables where tbspaceid="" and tableid=""
3、根据COLNO确认是哪个列出问题
SELECT * FROM SYSCAT.COLUMNS WHERE TABNAME= '*******' AND COLNO = “”
三步就可以精确确认错误的原因了
原理分析:在DB2 数据库中隐藏着一个内部表,专存储数据库的各个表。可以通过select * from syscat.tables进行查看。TBSPACEID, TABLEID, COLNO 都是表tables 中的字段。
=====================================================================
but,
我的DB2数据库错误信息:
com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -532, SQLSTATE: 23504, SQLERRMC: DE_ANOM_DETN.FK_TT_ANOM_TT_DETN_EVNT
根据SQLCODE和SQLERRMC可知:
-532 23504 删除操作违反了已指定的参照约束
可以判断出,应该是在删除级联表格时,发现参考的外键为空了,应该是提前删除了。
但是我的错误信息里面并没有上面提示的那么详细,上面的是SQLERRMC: TBSPACEID=2, TABLEID=640, COLNO=0 ,而我的是SQLERRMC: DE_ANOM_DETN.FK_TT_ANOM_TT_DETN_EVNT,由此可以推断出,SQLERRMC里面的信息就是定位错误的核心!!可是这个是什么呢??估计这个应该找数据库设计文档了。
最后没管这个问题,直接把DB2恢复(restore)一个镜像点了,然后mq(Qmanager)启动,was启动(前提是mq启动)。问题可能是执行顺序或者因为某个服务器节点未启动caused的,当这些服务器节点都正常启动之后,把数据库restore正常状态,然后就可以正常执行了。
db2 数据库报 -803 错误怎么解决?
解决方法如下:
alter table student alter ID restart with xxxx 。
xxxx可以自定义,为当前表中id的最大值加1即可。