db2相关问题及解决方法

时间:2022-01-14 06:58:03

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系统下会发生错误。

四、联合数据对象的建立

联合数据对象提供将一个数据库里的用户和表映射到另一个数据库的功能。用户可通过对后者的访问达到访问前者的目的。

建立步骤:

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 *)

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、  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;

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liu_xing_hui/archive/2008/11/20/3340522.aspx