DB2导库全过程

一直使用的都是Oracle,突然需要导一份DB2的库,本着数据库都差不多的思想倒腾了一番。倒腾的脑仁疼,特此整理了一下DB2导库的全过程供参考。
准备条件:Linux环境,DB2软件已经安装,Linux中存在db2用户(不是db2数据库用户),我的用户是db2iv97/123qwe以此说明。

登陆DB2用户

我是从oracle用户切换过来的,使用su - db2iv97根据提示输入密码即可

创建数据库

这里类似创建Oracle实例,在db2中没有用户的概念,一个数据库中可以有多个对象,db2使用的用户是Linux用户组中的用户,一个用户只能同时使用一个数据库,以前没搞过db2这个理解的转换都让人很费解…

db2 CREATE DATABASE XDGL ON '/home/db2iv97/xdgl' USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM PAGESIZE 16 K;

XDGL 是数据库名称,后边跟的路径,编码格式需要根据数据文件的实际情况进行替换,我这里用的GBK,如果要创建自增长数据库则可以在“XDGL”与“ON”之间添加AUTOMATIC STORAGE yes

db2 CREATE DATABASE XDGL AUTOMATIC STORAGE yes
 ON '/home/db2iv97/xdgl' USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM PAGESIZE 16 K;

连接数据库

创建完成后就可以进行连接了

db2 connect to XDGL user db2iv97 using 123qwe;

更新数据库配置

这是防止数据库日志满了之后数据库爆掉

db2 update db cfg for XDGL using LOGFILSIZ 50000   ---更改 日志文件大小
db2 update db cfg for XDGL using LOGPRIMARY 20     ---更改 主日志文件的数目
db2 update db cfg for XDGL using LOGSECOND 10      ---更改 辅助日志文件的数目 

创建缓冲池

有两种方式,自增长或者指定大小。我认为创建自增长就够用了,创建完成什么参数都不用改,省事。我先创建的指定大小缓冲池,在修改参数时一直报错,最后又修改成自增长的了。

创建自增长缓冲池
db2 create bufferpool BP16K all nodes size -1 pagesize 16k
创建指定大小的缓冲池 【16KB页大小,65536=1G】
db2 create bufferpool BP16K all nodes size 655360 pagesize 16k

创建指定大小缓冲池可以进行修改,修改缓冲池大小(这个地方也让人醉了,不应该是1024是1G吗,怎么就变成65536了)

db2 alter BUFFERPOOL BP16K immediate size 655360

修改表空间

查看和删除表空间的命令

db2 list tablespaces
db2 drop tablespace userspace1
创建表空间

需要根据实际情况修改表空间名称、大小、位置、页大小 等参数

db2 "CREATE REGULAR TABLESPACE DATASPACE1  IN DATABASE PARTITION 
GROUP IBMDEFAULTGROUP PAGESIZE 16384 MANAGED BY DATABASE 
USING (file '/home/db2iv97/xdgl/datafile/DATASPACE1'  786432) EXTENTSIZE 32 
PREFETCHSIZE AUTOMATIC BUFFERPOOL BP16K OVERHEAD 12.670000 
TRANSFERRATE 0.180000 DROPPED TABLE RECOVERY ON"

其实也不需要过多修改,表空间名字、路径和大小修改一下就行了;创建表空间时也可以使用自动扩展表空间在EXTENTSIZE 32 前添加AUTORESIZE YES即可,添加后为如下命令

db2 "CREATE REGULAR TABLESPACE DATASPACE1  IN DATABASE PARTITION 
GROUP IBMDEFAULTGROUP PAGESIZE 16384 MANAGED BY DATABASE 
USING (file '/home/db2iv97/xdgl/datafile/DATASPACE1'  786432) AUTORESIZE YES EXTENTSIZE 32 
PREFETCHSIZE AUTOMATIC BUFFERPOOL BP16K OVERHEAD 12.670000 
TRANSFERRATE 0.180000 DROPPED TABLE RECOVERY ON"
配置表空间使用的缓冲
db2 alter tablespace DATASPACE1  bufferpool BP16K
修改表空间大小
db2 "alter tablespace DATASPACE1  resize (file '/cms/DB2/db2inst1/NODE0000/UAT/DATASPACE1'  1310720) "

带不带双引号其实都一样

导入数据结构(DDL)

需要进入数据结构目录(与ddl同级)

db2 -td@ -vf db2look.ddl

db2look就是默认的db2导出的文件名,你可以事先打开这个ddl文件看一下里边导出时使用的数据库名称和对象名称,创建一样的更方便哦。
有些库我导入时报DB221007E End of file reached while reading the command这种错,把命令修改为db2 -tvf db2look.ddl即可
还有一个小技巧就是导入时可以把日志存入文件使用db2 -td@ -vf db2look.ddl >db2look.log即可把导入时的日志信息自动存入db2look.log中

导数据

需要导出数据所在目录,数据目录里边应该全是ixf、msg文件,还有一个lst文件就是控制整个数据导入的文件,也需要先打开这个lst文件进行修改,修改成和你创建的数据库及对象相匹配的格式,其实ddl和lst就是一对,ddl修改的地方lst也相应的修改就行了,所以我才在上面说创建的时候和文件中一致跟方便,虽然只是体力劳动如果表或者对象很多也让人很烦的。

db2move XDGL load

导入完成应该会生成一个LOAD.out的文件,就是导入日志了,如果该创建的都创建了应该是不会报错的。

注意事项

导库完成后使用的数据库用户就是db2iv97,但是如果数据结构中有新的对象你会发现使用db2iv97登陆后并没有表结构,我说过一个数据库中可以存在多个对象的,导入的表结构都在对象下边,因此在连接的时候地址后边就需要加对象名称jdbc:db2://172.22.1.122:60008/creditdb:currentSchema=CREDITDB;currentSchema区分大小写,对象名称要全大写

补一个

在db2导出的文件中你会发现先,每张表都是一个数据文件,这样就有一个好处就是在导库时如果单张表出错,或者在使用过程中不小心删除了一张表那么就不用整库重新导入了,把单张表导入就可以了。如果表结构也没有了可以在ddl文件里找到,复制出来单独执行就OK了,导入ixf数据文件分三步

  1. 登陆db2用户
    就是su - db2iv97 了
  2. 连接db2数据库
db2 connect to XDGL 
  1. 执行导入命令
db2 import from tab429.ixf of ixf insert into creditdb.REPORT_ITEM

在lst中可以找到需要导入的表对应的数据文件的名称,如我导的这张表在lst中对应的就是tab429了,tab429.ixf为数据文件名、 REPORT_ITEM为要导入的表名,如果对象不一样记得要添加对象creditdb。执行完会有提示这个数据文件中数据条数,导入成功条数,失败条数等等。

我只想说这DB2完全就和Oracle是两种东西啊,真是太恶心了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值