DB2服务器迁移(V8.2-->DB2 V9.1)<Linux/Unix>
===========================
一: 预迁移任务
===========================
1、建立迁移备份目录
mkdir /tmp/migrant/
2、备份数据库(全量、脱机)
1)db2inst1登录
2)断开所有连接
db2 force application all
3)检查数据库目录,根据实际迁移数据库名称代替后续代码中的dbName
db2 list db directory
4)备份所有数据库
mkdir /tmp/migrant/dbbackup
db2 backup db dbName to /tmp/migrant/dbbackup
5)检查结果
ls /tmp/migrant/dbbackup/
3、备份配置信息
1)db2inst1登录
2)备份所有数据库配置信息(如果db2dump目录下文件比较多本过程会比较长)
mkdir /tmp/migrant/db2support/
db2support /tmp/migrant/db2support/ -d dbName -o dbName.zip
ls /tmp/migrant/db2support/
3)备份与每个数据库相关联的应用程序的所有程序包的信息
mkdir /tmp/migrant/db2package/
db2 connect to dbName
db2 list packages for schema db2inst1 show detail > /tmp/migrant/db2package/
ls /tmp/migrant/db2package/
4)备份数据库ddl
mkdir /tmp/migrant/db_ddl/
db2look -d dbName -e -o /tmp/migrant/db_ddl/dbName.ddl
ls /tmp/migrant/db_ddl/
5)备份所有外部例程
cd
cp -R sqllib/function /tmp/migrant/function_backup
4、增大表空间和日志文件大小(本部分可提前完成)
1)db2inst1登录
db2 connect to dbName
2)查看表空间使用情况
db2 list tablespaces show detail
3)增大系统目录表空间的大小(SYSCATSPACE)
SMS:确保 可用磁盘空间 >= 已使用的表空间大小(总页数×页大小),不够则需增加磁盘
DMS:确保 可用页数 >= 已使用页数,不够则增大表空间 db2 ALTER TABLESPACE SYSCATSPACE EXTEND (ALL number_of_pages)
4)增大临时目录表空间的大小(TEMPSPACE1)
SMS:确保 可用磁盘空间 >= 系统目录表空间大小×2
DMS:确保 总页数 >= 系统目录表空间大小×2,不够则增大表空间 db2 ALTER TABLESPACE TEMPSPACE1 EXTEND (ALL number_of_pages)
5)增大日志空间大小(注意日志所在磁盘确实有这么多空闲空间)
查看
db2 get db cfg for dbName | grep '(LOG[FPS]'
增大
db2 update db cfg for dbName using LOGSECOND LOGSECOND+LOGPRIMARY
或者无限日志
db2 update db cfg for dbName using LOGSECOND -1
5、提高诊断级别
1)归档原先的诊断日志
db2diag -A
2)提高诊断级别
db2 update dbm cfg using diaglevel 4
6、使DB2服务器脱机
1)停止DB2许可证服务
db2licd -end
db2 terminate
db2 force application all
db2stop
===========================
二: 迁移任务
===========================
1、安装数据库V9
1)root登录
2)插入db2V9.1光盘,运行 db2setup 命令,选择“安装新产品”
选项
3)基本使用默认值,不创建新实例
4)安装完成
2、验证数据库是否已准备好进行迁移
1)实例所有者db2inst1登录
2)停止实例
db2stop
3)验证所有数据库
mkdir /tmp/migrant/db2ckmig
/opt/ibm/db2/V9.1/bin/db2ckmig dbName -l /tmp/migrant/db2ckmig/db2ckmig.dbName.log
如果失败,则检查log文件,确定错误并修改,然后重复验证操作
4)检查任意log文件
cat db2ckmig.DBName.log
确保日志文件包含下列文本:Version of DB2CKMIG being run: VERSION 9
5)启动实例
db2start
*****************************************************
注意:如果无法通过(经测试,在V8.1 FixPak7下,db2ckmig会报无法连接数据库错误),则
1)方法一:将V8实例下的所有数据库先删除(必须先全量备份),再升级实例,最后通过备份恢复数据库
2)方法二:打上V8.1的补丁FixPak 14,或者显式指定DB2CODEPAGE。(未做测试)
db2set db2codepage=1383 -i db2inst1
db2 terminate
3、迁移实例
1)root登录
2)执行升级
/opt/ibm/db2/V9.1/instance/db2imigr -u db2fenc1 db2inst1
3)检查结果
db2inst1登录
db2start
db2level
4、迁移DAS
1)dasusr1登录
db2admin stop
2)执行升级
/opt/ibm/db2/V9.1/instance/dasmigr
3)检查结果
dasusr1登录
db2admin start
db2daslevel
db2inst1登录
db2 get admin cfg
5、安装v9fp10补丁(主要是为了不重建procedure,从FixPack6以上就修复了这个问题。安装补丁总该没错)
1)db2inst1登录
db2stop force
db2 terminate
2)root登录
3)FTP使用binary方式上传补丁到/tmp目录
4)解压缩文件,安装升级包
cd /tmp
tar zxvf /tmp/v9fp10_linux_
cd /tmp/ese/disk1
./installFixPack
根据提示输入安装目录:/opt/ibm/db2/V9.1
如果一切顺利,提示安装成功
5)更新实例和DAS
cd /opt/ibm/db2/V9.1/instance/
更新实例
./db2iupdt db2inst1
更新DAS
./dasupdt
6)检查结果
db2inst1登录
db2start
db2level
6、恢复/迁移数据库
1)db2inst1登录
db2start
2)两种方法(任选其一)
2.1、迁移数据库(简单做法,在某些情况下可能会出现Triggers/Views/Procedures没有成功迁移)
db2 migrate db dbName
2.2、恢复所有数据库
<;可选,某些环境下必须>db2 drop db dbName
db2 restore db dbName from /tmp/migrant/dbbackup/
完整范例:可能的报错信息(代码页不匹配)
[db2inst1@belle-node1 ~]$ db2 drop db toolsdb
DB20000I The DROP DATABASE command completed successfully.
[db2inst1@server]$
[db2inst1@server]$ db2 restore db toolsdb taken at 20111129002652
SQL1205N The code page "1381" and/or territory code "1" that has been
specified is not valid.
[db2inst1@server]$
[db2inst1@server]$ db2set db2codepage=819
[db2inst1@server]$ db2 terminate
DB20000I The TERMINATE command completed successfully.
[db2inst1@server]$
[db2inst1@server]$ db2 restore db toolsdb taken at 20111129002652
SQL2519N The database was restored but the restored database was not migrated
to the current release. Error "-1006" with tokens "3 j " is returned.
[db2inst1@server]$
[db2inst1@server]$ db2 migrate db toolsdb
SQL1006N The code page "22509734I" of the application does not match the code
page "22509737I" of the database.
[db2inst1@server]$
[db2inst1@server]$ db2set db2codepage=1386
[db2inst1@server]$ db2 terminate
DB20000I The TERMINATE command completed successfully.
[db2inst1@server]$
3)检查结果
db2 list db directory
验证表可正常查询
db2 connect to dbName
db2 select tableid,tabname from syscat.tables fetch first row only
7、重新绑定packages
1)使用db2inst1登录
db2start
2)重新绑定所有数据库
mkdir /tmp/migrant/db2rbind
db2rbind dbName -l /tmp/migrant/db2rbind/dbName.db2rbind.log all
绑定过程中如果有无法重新绑定的,不用理会
3)检查结果
验证存储过程能正常调用
db2 connect to dbName
db2 "call TL_GETNEWSHEETID(1,?)"
8、删除Triggers/Views/Procedures(根据db2look生成的脚本)
cat dbName.ddl | grep -i " trigger " | awk '{printf("db2 DROP TRIGGER "$3"\n")}' | sh
cat dbName.ddl | grep -i " trigger " | awk '{printf("db2 DROP VIEW "$3"\n")}' | sh
服务器数据库安装教程cat dbName.ddl | grep -i " trigger " | awk '{printf("db2 DROP PROCEDURE "$3"\n")}' | sh
9、重建Triggers/Views/Procedures(根据db2look生成的脚本)
从 dbName.ddl 拷贝出脚本,再执行
===========================
三 :迁移后任务
===========================
1、启动数据库
1)db2inst1登录
db2start
2、恢复诊断级别
db2 update dbm cfg using diaglevel 3
3、恢复日志空间大小
1)查看
db2 get db cfg for dbName | grep '(LOG[FPS]'
2)恢复
db2 update db cfg for dbName using LOGSECOND LOGSECOND-LOGPRIMARY
4、激活所有数据库
db2 activate db dbName
5、<;可选>检查配置参数和DB2注册变量值
1)查看dbm cfg
db2 get dbm cfg
2)查看db cfg
db2 get db cfg for dbName
3)查看db2注册变量
db2set -all
6、<;可选>索引类型的转换(type1-->type2)(应该是没有的)
方法一:
1)验证是否存在1类索引
cd
cd sqllib/db2dump/
db2 connect to dbName
db2 inspect check database results keep dbName.log
db2inspf dbName.log dbName.out
2)查看dbName.out文件内容
more dbName.out | grep -i "The index type is 1"
如果存在则转换索引
db2 reorg indexes all for table tabName convert
方法二:
1)查询索引是否为type2类型
db2 connect to dbName
db2 "select tabschema,tabname from
sysibmadm.admintabinfo where index_type<>2"
2)转换索引
db2 "select 'reorg indexes all for table '||rtrim(tabschema)||'.'||rtrim(tabname)||' convert on all dbpartitionnums;' from sysibmadm.admintabinfo where index_type<>2" > /tmp/migrant/convert.sql
db2 -tvf /tmp/migrant/convert.sql
7、<;可选>撤销PUBLIC用户上所有例程的execute特权(应该是没有的)
对所有数据库
1)生成脚本
mkdir /tmp/migrant/revoke
db2undgp -d dbName -o /tmp/migrant/voke
voke
2)执行脚本
db2 -tvf /tmp/migrant/voke
8、<;可选>备份数据库
db2 backup dbName to dbbakdir
9、<;可选>重新统计runstats、重组reorg
1)统计
db2 connect to dbName
db2 "select 'runstats on table db2inst1.'||rtrim(tabname)||' and indexes all;' from syscat.tables where tabschema='DB2INST1'" > /tmp/migrant/runstats.sql
db2 -tvf /tmp/migrant/runstats.sql
2)重组
db2 "select 'reorg table db2inst1.'||rtrim(tabname)||'' from syscat.tables where tabschema='DB2INST1'" > /tmp/migrant/reorg.sql
db2 -tvf /tmp/migrant/reorg.sql
db2 "select 'reorg indexes all for table db2inst1.'||rtrim(tabname)||' allow read access ' from syscat.tables where tabschema='DB2INST1'" > /tmp/migrant/reorg.sql
db2 -tvf /tmp/migrant/reorg.sql
10、<;可选>安装license
1)安装
cd /media/cdrom/db2/license/
db2licm -a xxx.lic
2)查看
db2licm -l
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论