ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 31574|回复: 20

[精华] 满满的干货!浪潮高级数据库工程师常彦文:DB2迁移到K-DB最佳实践

[复制链接]
认证徽章
论坛徽章:
10
托尼托尼·乔巴
日期:2017-07-18 13:02:53秀才
日期:2017-07-11 13:54:02目光如炬
日期:2017-06-26 17:00:03蒙奇·D·路飞
日期:2017-03-09 11:24:29水瓶座
日期:2016-04-15 16:17:04秀才
日期:2016-03-24 09:10:242016猴年福章
日期:2016-01-27 14:16:27猴赛雷
日期:2016-01-27 14:16:27秀才
日期:2015-12-14 14:56:09秀才
日期:2017-09-18 17:32:11
发表于 2016-5-20 13:51 | 显示全部楼层 |阅读模式

本文主要讲解从 DB2 v9.7 PHSDB 库迁移到 K-DB11G 最佳实践,迁移数据库名为PHSDB,数据库架构为单机。首先在目标主机上安装 K-DB11g 软件,并创 PHSDB 库, 具体安装过程请参考管理手册。本次迁移范围包括数据库对象和数据两部分,以下分两部分别进行介绍。

注意:保证源库和目标数据库字符集一致。整个迁移流程如下:

001.jpg

第一部分  介绍数据库对象迁移

实际迁移中需要把 DB2 的一个 schema 分别对应 K-DB 一个用户,schema 和用户名称建议一致。首先进行 DB2 数据库对象种类分析、数据类型分析、数据量分析等,通 过 Sql develper 工具连接到 DB2 数据库进行数据对象分析,捕获源数据库对象,并在制 定目录中自动生成 K-DB 支持的建用户、表、主键、索引、约束外键、列默认值和标识列 语句的脚本;如果存在其他对象类型,需要人工参与修改。经分析源 PHSDB 库包括表、主键、索引、外键约束、序列、视图、函数、列默认值和标识列对象,脚本中把 DB2 schema PHS 映射成 K-DB PHS 用户,所有对象通过 PHS 用户创建,并授予 K-DB PHS 用户 CREATE  SESSION,  RESOURCE,  CREATE  VIEW,  CREATE  MATERIALIZED  VIEW,CREATE SYNONYM 系统权限,表空间使用 user 表空间,临时表空间使用 temp。

DB2 和 K-DB 数据类型转换格式如下:

002.jpg

注意:IBM DB2 完整性约束语句支持 ON DELETE and ON UPDATE写法,K-DB 仅支持 ON DELETE 完整性约束,工具已经完成自动装换。

具体 DB2 和 K-DB 约束对比如下:

003.jpg
004.jpg

在本次迁移过程中,所有外键约束语法只包括 ON UPDATE RESTRICT,ON DELETE RESTRICT 约束,通过工具已经自动转换全部符合 K-DB 约束语法。例如:

DB2 语句:

ALTER TABLE "PHS"."P_PACKAGE_GROUP"
ADD CONSTRAINT "FK2_P_PACKAGE_GROUP" FOREIGN KEY
(
"PACKAGEID"
)
REFERENCES "PHS"."P_PACKAGE"
(
"PACKAGEID"
)
ON UPDATE RESTRICT
ON DELETE RESTRICT
;

转换后 K-DB 语句:

ALTER TABLE P_PACKAGE_GROUP
ADD CONSTRAINT P_PG_PACK_FK FOREIGN KEY
(
PACKAGEID
)
REFERENCES P_PACKAGE
(
PACKAGEID
)
ENABLE
;

本例中列默认值转换语法如下,DB2 语句:

ALTER TABLE "PHS"."P_INSTANCE" ALTER COLUMN "PERSONID" SET WITH DEFAULT -1 ;
ALTER TABLE "PHS"."CHRONIC_TEMPLATE" ALTER COLUMN "MEDEVENT" SET        WITH DEFAULT 8 ;

转换后 K-DB 语句:

ALTER TABLE "PHS"."CHRONIC_TEMPLATE" MODIFY "MEDEVENT" DEFAULT 8 ;
ALTER TABLE "PHS"."P_INSTANCE" MODIFY "PERSONID" DEFAULT -1 ;

在 DB2 中存在自动递增标识列,K-DB 使用序列和触发器模仿 DB2 标识列,针对 DB2的每个带有标识列创建语句分别增加相对应创建序列和触发器语句。

源 PHSDB 数据库带有自增标识列语法如下:

CREATE        TABLE "PHS"."BATCH_TASK_RECORDS"
(

"ID"  INTEGER NOT  NULL        GENERATED  BY  DEFAULT AS IDENTITY (START WITH 41, INCREMENT BY 1, CACHE 20),
"STATUS" INTEGER ,
"JOBSTARTTIME" TIMESTAMP ,
"JOBENDTIME" TIMESTAMP        ,
"SDATE" TIMESTAMP        ,     
"EDATE" TIMESTAMP        ,
"TYPE" VARCHAR(50)
)
;

K-DB 转换后使用序列和触发器解决提供解决方案:

CREATE TABLE BATCH_TASK_RECORDS (
  ID NUMBER(10,0) NOT NULL,
  STATUS NUMBER(10,0),
  JOBSTARTTIME TIMESTAMP(9),
  JOBENDTIME TIMESTAMP(9),
  SDATE TIMESTAMP(9),
  EDATE TIMESTAMP(9),
  TYPE VARCHAR2(50 CHAR)
);

CREATE SEQUENCE        BATCH_TASK_RECORDS_ID_SEQ
  MINVALUE 1 MAXVALUE 999999999999999999999999 INCREMENT BY 1 NOCYCLE ;

CREATE        OR        REPLACE        TRIGGER        BATCH_TASK_RECORDS_ID_TRG        BEFORE        INSERT ON
BATCH_TASK_RECORDS
FOR EACH ROW
DECLARE
v_newVal NUMBER(12) := 0;
v_incval NUMBER(12) := 0;
BEGIN
  IF INSERTING AND :new.ID IS NULL THEN
    SELECT        BATCH_TASK_RECORDS_ID_SEQ.NEXTVAL INTO v_newVal FROM DUAL;

    -- If this is the first time this table have been inserted into (sequence == 1)
    IF v_newVal = 1 THEN
      --get the max indentity value from the table
      SELECT NVL(max(ID),0) INTO v_newVal FROM BATCH_TASK_RECORDS;
      v_newVal := v_newVal + 1;
      --set the sequence to that value
      LOOP
             EXIT WHEN v_incval>=v_newVal;
             SELECT BATCH_TASK_RECORDS_ID_SEQ.nextval INTO v_incval FROM dual;
      END LOOP;
    END IF;
--used to help get last identity value
db2_utilities.identity := v_newVal;
  -- assign the value from the sequence to emulate the identity column
  :new.ID := v_newVal;
  END IF;
END;

DB2 PHSDB 库中包括序列、视图、函数对象,无法通过 Sql developer 完成自动转换。利用 IBM IDMT 工具首先进行对象脚本卸载,脚本生成在用户指定目录结构中,由 于 DB2 和 K-DB 在 rownum 使用、取系统日期、空值转换、数据类型函数、数值转换函 数和子查询等语法使用上存在差异,需要人工把视图和函数改成 K-DB 支持的语法,具体 更改过程参照 K-DB 语法解释。

序列创建语句对比例子如下:

005.jpg

最后通过在 K-DB 数据库依次运行建表和修改后数据对象创建脚本,完成整个 PHSDB 数据对象的迁移。

第二部分  进行数据迁移

数据迁移脚本主要包括 Db2_data.sh 卸载数据脚本和 Import_kdb.sh 加载数据脚本。Db2_data.sh 进行 DB2 数据卸载,Import_kdb.sh 完成 K-DB 数据导入操作。

Db2_data.sh 卸载脚本语句如下:

db2 export to data/PHS_APPROLE.TXT of DEL modified by coldel"#" datesiso nochardel
"select \"ID\",'<EOFD>',\"ROLENAME\",'<EOFD>',\"DESCRIPTION\",'<EOFD>', '<EORD>'
from PHS.\"APPROLE\""
db2 export to data/PHS_UTS_CHRONIC_MED.TXT of DEL modified by coldel"#" datesiso
nochardel "                                                                                                                  select

\"MEDID\",'<EOFD>',\"MEDICATION\",'<EOFD>',\"SPECIFICATION\",'<EOFD>',\"SPELLING\",
'<EOFD>',\"MEDUNIT\",'<EOFD>', '<EORD>'        from PHS.\"UTS_CHRONIC_MED\""
……

Import_kdb.sh 导入数据脚本语句如下:

tbloader userid=$username/$password@$tnsname control=control/PHS.APPROLE.ctl
log=log/PHS.APPROLE.log
tbloader                                              userid=$username/$password@$tnsname

control=control/PHS.UTS_CHRONIC_MED.ctl log=log/PHS.UTS_CHRONIC_MED.log
tbloader                                             userid=$username/$password@$tnsname
control=control/PHS.PES_UPLOAD_JOB.ctl log=log/PHS.PES_UPLOAD_JOB.log
tbloader userid=$username/$password@$tnsname control=control/PHS.P_INST_DISEASE.ctl

利用 batch_ctl.sh 脚本批量生成 tbloader 使用的控制文件,该脚本是通过抓取目标数据库已经生成的表结构,利用 shell 语句封装成控制文件。

tbloader 控制文件内容如下:

# load data by tbloader
load data
infile 'PHS.APPROLE.dat'  
logfile 'log/PHS.APPROLE.log'
badfile 'log/PHS.APPROLE.bad'
append
into table PHS.APPROLE
fields terminated by '#<EOFD>#'
LINES TERMINATED BY '<EORD>\n'
(
ID ,
ROLENAME ,

DESCRIPTION
)

最后运行 Import_kdb.sh 脚本进行数据加载 , 确认脚本执行完成后,使用gather_data.sh 脚本进行数据校验分析,确认迁移数据成功,至此本次迁移完成。

注意:由于约束会造成部分数据导入不成功,我们在执行数据加载前分别执行 Pro_load.sh 和 Modify_null.sh 两个脚本,把外键约束禁用和冗许字段为空;执行 Import_data.sh 迁移数据后 , 再执 行 Post_load.sh 和 Modify_not_null.sh 启用约束,脚本分别放到 Import_kdb.sh 脚本初始和结尾中。





论坛徽章:
133
秀才
日期:2015-11-12 17:43:40秀才
日期:2016-02-18 09:15:13秀才
日期:2016-02-18 09:21:30秀才
日期:2016-02-18 09:23:46秀才
日期:2016-02-18 09:24:302016猴年福章
日期:2016-02-18 09:31:30秀才
日期:2016-02-18 09:39:10秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:08:02秀才
日期:2016-02-18 10:08:14
发表于 2016-5-20 17:17 | 显示全部楼层
大力推国货!

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
发表于 2016-5-20 21:31 | 显示全部楼层
什么时候提供linux版测试

使用道具 举报

回复
论坛徽章:
69
山治
日期:2017-09-11 19:15:33处女座
日期:2015-11-27 12:27:01秀才
日期:2015-11-23 10:17:19秀才
日期:2015-11-23 09:57:36金牛座
日期:2016-04-01 18:05:22秀才
日期:2015-11-11 10:22:49摩羯座
日期:2015-08-20 16:22:52秀才
日期:2015-08-31 13:02:54秀才
日期:2015-12-25 15:31:10巨蟹座
日期:2015-11-04 12:43:04
发表于 2016-5-22 11:57 | 显示全部楼层
〇〇 发表于 2016-5-20 21:31
什么时候提供linux版测试

你别问浪潮要了,TMAX的协议限制他提供LINUX版本,直接去找TMAX要吧。
什么国货,明明是韩国货

使用道具 举报

回复
认证徽章
论坛徽章:
58
生肖徽章2007版:马
日期:2009-11-06 23:12:33授权会员
日期:2013-01-10 14:38:59ITPUB元老
日期:2013-01-10 14:38:472013年新春福章
日期:2013-02-25 14:51:24马自达
日期:2013-08-07 10:54:45红旗
日期:2013-08-09 13:48:48劳斯莱斯
日期:2013-09-12 15:56:37优秀写手
日期:2013-12-18 09:29:13Jeep
日期:2014-01-14 10:53:432014年新春福章
日期:2014-02-18 16:43:09
发表于 2016-5-23 08:47 | 显示全部楼层

使用道具 举报

回复
论坛徽章:
7
秀才
日期:2016-01-25 14:55:31秀才
日期:2016-02-18 09:24:182016猴年福章
日期:2016-02-18 09:31:30秀才
日期:2016-02-18 09:39:10秀才
日期:2016-02-18 10:08:02秀才
日期:2016-04-21 14:11:59秀才
日期:2016-06-23 14:15:06
发表于 2016-5-23 11:26 | 显示全部楼层
、路过看看,有没有干货

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
发表于 2016-5-25 13:28 | 显示全部楼层
理想很丰满,现实很骨感。

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2016-5-26 14:16 | 显示全部楼层
就是韩国货。。。

使用道具 举报

回复
论坛徽章:
69
秀才
日期:2017-09-18 17:31:19探花
日期:2017-02-20 09:42:18榜眼
日期:2017-02-20 09:42:18状元
日期:2017-02-20 09:42:182017金鸡报晓
日期:2017-02-08 14:09:13秀才
日期:2016-12-21 16:55:07秀才
日期:2016-02-18 10:08:14秀才
日期:2016-02-18 10:08:02秀才
日期:2016-02-18 10:07:49秀才
日期:2016-02-18 09:39:10
发表于 2016-5-26 22:51 | 显示全部楼层
异构数据库的迁移,数据的迁移都是小case,感觉应用程序的修改才是大工作量。

使用道具 举报

回复
论坛徽章:
30
2010新春纪念徽章
日期:2010-03-01 11:08:34喜羊羊
日期:2015-03-16 11:00:26秀才
日期:2015-10-26 09:55:08秀才
日期:2015-11-23 10:17:19秀才
日期:2015-12-25 15:31:10秀才
日期:2015-11-30 09:13:06秀才
日期:2015-12-14 15:02:13秀才
日期:2015-12-14 15:09:38秀才
日期:2016-01-05 09:35:58秀才
日期:2016-01-25 15:02:04
发表于 2016-6-17 15:06 | 显示全部楼层
然并卵……

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票8.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月30日前

活动链接>>
TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表