关于db2数据库迁移:
一、原数据库所做操作:
- 获取表结构:db2look -d 数据库名 -u user -e -o dbname.sql
- 导出表数据:db2move 数据库名 export
- ftp到目标数据库
二、目标数据库操作:
- 创建group:mkgroup db2grp1
- 在/home目录创建db2inst1用户文件夹:mkdir db2inst1
- 在/home目录创建db2fenc1用户文件夹:mkdir db2fenc1
- 创建用户:useradd -g db2grp1 -d /home/db2inst1 db2inst1
- 创建用户:useradd -g db2grp1 -d /home/db2ifenc1 db2fenc1
- 在/home目录下执行:ls -lrt,查看新建的两个用户是否还在system群组下,不在db2grp1群组下的话执行:
chown -R db2inst1:db2grp1 db2inst1
chown -R db2fenc1:db2fgrp1 db2fenc1
- 创建裸设备,用于放置表空间和索引空间:
mklv -t raw -y dbdat4k_lv rootvg 20
mklv -t raw -y dbidx4k_lv rootvg 10
mklv -t raw -y dbdat8k_lv rootvg 20
mklv -t raw -y dbidx8k_lv rootvg 10
- 对数据库实例用户授权使用裸设备:
cd /dev
chown -R db2inst1:db2grp1 rdbdat4k_lv rdbidx4k_lv rdbdat8k_lv rdbidx8k_lv
- 创建db2实例
cd /opt/IBM/db2/V9.5/instance
./db2icrt -u db2fenc1 db2inst1
注:创建过程中出现两次错误,第一次是因为用户db2inst1和db2fenc1不在db2grp1群组下,在system下;第二次错误看日志 报磁盘空间不足;
- 创建实例成功后,进入用户模式db2inst1:su - db2inst1
- 执行db2start报license错误:
license文件一般在/tmp目录:cd /tmp
查找license文件所在目录,并进入那个目录:find . -name db2ese_c.cli
添加license:db2licm -a db2ese_c.cli
- license添加成功后,启动db2:db2start
- 创建数据库:db2 create db dbname using codeset utf-8 territory cn
- 创建bufferpool:db2 CREATE BUFFERPOOL BP_4K 1000 PAGESIZE 4K
- 创建表空间和索引空间
db2 "CREATE TABLESPACE DMS_DAT4K PAGESIZE 4096 MANAGED BY DATABASE USING (DEVICE '/dev/rdbdat4k_lv ' 100000) BUFFERPOOL BP_4K"
...其它类似
- 连接数据库并设置密码:db2 connect to 数据库名 user 用户名 using new <new password> confirm <new password again>
- 设置db2set:
对比按照原数据库设置:
db2set DB2COMM=tcpip
....等等
- 对用户进行授权:db2 grant dbadm on database to user 用户名
- 导入表结构:db2 -tvf dbname.sql
注:dbname.sql是原数据库导出的表结构文件;在原数据库创建了表空间,迁移的数据没有创建表空间,使用默认空间的情况 下,需要将dbname.sql中建表语句最后的那一句使用表空间的语句删除掉,用vi的替换命令全文件用空格替换 (:%s/表空间语句/ /g);
- 查看导入表结构是否成功:db2 list tables
- 导入表数据:db2move 数据库名 import -u 用户名 -p 密码 (在表数据的文件夹下执行,如果失败将文件拷贝到/home/db2inst1/目录下,然后运行)
- 查看当前db2实例分配的端口范围:cat /etc/services (看最底下db2inst1相关的:如端口是从60010~60014)
- 查看dbm远程端口是否配置:db2 get dbm cfg | grep SVCENAME
- 配置dbm端口:db2 update dbm cfg using SVCENAME 60010
- 关闭数据库:db2stop force
- 启动数据库:db2start
- 查看端口是否在监听:netstat -an | grep 60010
三、重建远程客户端编目
- 查看当前节点编目:db2 list node directory
- 删除当前节点的编目:db2 uncatalog node nodename (nodename为查看的数据库编目节点)
- 创建新的节点编目,连接新的数据库IP和端口: db2 catalog tcpip node nodeName remote IP server 60010(nodeName 与删除的节点名一致)
- 查看数据库编目:db2 list db directory
- 删除数据库编目:db2 uncatalog db dbAlisName
- 新建数据库编目关联node:db2 catalog db dbName as dbAlisName at node nodeName (创建的最好与删除的dbName、dbAlisName 一致)
- db2 connect to dbname user 用户名 using 密码
- 大功告成了
四、本篇幅没有将AIX上安装db2,以及表空间和bufferpools的设置,以及一些db2参数的配置,如db cfg和dbm cfg