设为首页 收藏本站
查看: 678|回复: 0

[经验分享] DB2 迁移script

[复制链接]

尚未签到

发表于 2016-11-13 08:51:29 | 显示全部楼层 |阅读模式
--=======================================
-- DB2 migrations version:  GAL 5.0.0
--=======================================
--**********************************************clear procedure*********************************
--clear procedures that have exist
create procedure clear_proc(IN v_procedureName VARCHAR(100), OUT v_excuteInfo VARCHAR(100))
begin
--execute part
declare proc_count INTEGER default 0;
declare statement VARCHAR(100);
select count(procname) into proc_count from syscat.procedures where procname=UPPER(v_procedureName);
--judge whether exist or not
if(proc_count>0) then
set statement='drop procedure '||UPPER(v_procedureName);
execute immediate statement;
set v_excuteInfo='drop procedure '||UPPER(v_procedureName)||' successfully';
end if;
end@
--**********************************************migration procedure begin*********************************
--insert data into mapper table
create procedure insert_auditmapper_data(IN listenerName VARCHAR(255), OUT v_mapperId INTEGER, OUT v_insertRows INTEGER)
begin
--execute part
insert into GAL_AUDIT_MESSAGE_MAPPER (MAPPER_NAME, MAPPER_DESCRIPTION, CREATED_BY, CREATION_DATE) values(substr(listenerName||'_Mapper',1,255), substr('create a mapper for Listener: '||listenerName,1,255), 0, current timestamp);
GET DIAGNOSTICS v_insertRows = ROW_COUNT;
if(v_insertRows>0) then
select max(MAPPER_ID) into v_mapperId from GAL_AUDIT_MESSAGE_MAPPER;
end if;
end@
--insert data into the relation of mapper and listener table
create procedure insert_xrefmapperlistener_data(IN mapperId INTEGER, IN listenerId INTEGER, OUT v_insertRows INTEGER)
begin
--execute part
insert into GAL_XREF_MAPPER_LISTENER (MAPPER_ID, LISTENER_ID, CREATED_BY, CREATION_DATE) values(mapperId, listenerId, 0, current timestamp);
GET DIAGNOSTICS v_insertRows = ROW_COUNT;
end@
--insert mapper id, Mapper Selector for GAL_PUBLIC_KEY_FIELD table
create procedure update_publickeyfield_data(IN listenerId INTEGER, IN mapperId INTEGER, IN listenerName VARCHAR(255), OUT v_uptRows INTEGER, OUT v_insertRows INTEGER)
begin
declare v_pkf_id INTEGER;
--execute part
--insert mapper id
update GAL_PUBLIC_KEY_FIELD set mapper_id=mapperId where listener_id=listenerId;
GET DIAGNOSTICS v_uptRows = ROW_COUNT;
--insert Mapper Selector
SELECT COALESCE(MAX(PUBLIC_KEY_FIELD_ID),0)+1 into v_pkf_id from GAL_PUBLIC_KEY_FIELD;
insert into GAL_PUBLIC_KEY_FIELD (PUBLIC_KEY_FIELD_ID, MAPPER_ID, FIELD_NAME_DESCRIPTION, CONSTANT_VALUE, IS_XML_FIELD, FIELD_TYPE, CREATED_BY, CREATION_DATE, DEFAULT_VALUE)
values(v_pkf_id, mapperId, substr('Mapper Selector for '||listenerName,1,255), substr('Mapper Selector for '||listenerName,1,255), 'N', 'Mapper Selector', 0, current timestamp, 'N');
GET DIAGNOSTICS v_insertRows = ROW_COUNT;
end@
--insert data base on GAL_LISTENER TABLE
create procedure migrate_data(OUT output_migration_start VARCHAR(100), OUT output_listeners_amount VARCHAR(100), OUT output_mapper_affectRows VARCHAR(100), OUT output_xref_affectRows VARCHAR(100), OUT output_u_pkf_amount VARCHAR(100), OUT output_i_pkf_amount VARCHAR(100), OUT output_affectRows VARCHAR(100), OUT output_migration_end VARCHAR(100))
begin
--define v_mapperId var
declare v_mapperId INTEGER default 0;
declare u_pkf_affectRows INTEGER default 0;
declare v_listeners_amount INTEGER default 0;
declare mapper_affectRows INTEGER default 0;
declare xref_affectRows INTEGER default 0;
declare u_pkf_amount INTEGER default 0;
declare i_pkf_amount INTEGER default 0;
declare affectRows INTEGER default 0;
--execute part
set output_migration_start='migration data begin...';
--get the listener rows amount
select count(distinct listener_id) into v_listeners_amount from GAL_LISTENER;
set output_listeners_amount='the GAL_LISTENER table rows amount: '||CHAR(v_listeners_amount);
FOR  pkf_loop AS
select distinct listener_id, listener_name from GAL_LISTENER
DO
set affectRows=0;
--insert data into mapper table
call insert_auditmapper_data(pkf_loop.listener_name, v_mapperId, affectRows);
if(affectRows>0) then
--sum the affect rows
set mapper_affectRows=mapper_affectRows+affectRows;
set affectRows=0;
--insert data into the relation of mapper and listener table
call insert_xrefmapperlistener_data(v_mapperId, pkf_loop.listener_id, affectRows);
--sum the affect rows
set xref_affectRows=xref_affectRows+affectRows;
set affectRows=0;
set u_pkf_affectRows=0;
--insert mapper id for GAL_PUBLIC_KEY_FIELD table
call update_publickeyfield_data(pkf_loop.listener_id, v_mapperId, pkf_loop.listener_name, u_pkf_affectRows, affectRows);
--sum the affect rows
set u_pkf_amount=u_pkf_amount+u_pkf_affectRows;
set i_pkf_amount=i_pkf_amount+affectRows;
end if;
set affectRows=mapper_affectRows+xref_affectRows+u_pkf_amount+i_pkf_amount;
set output_mapper_affectRows='Below are the execute result: insert GAL_AUDIT_MESSAGE_MAPPER table rows amount: '||CHAR(mapper_affectRows);
set output_xref_affectRows='insert GAL_XREF_MAPPER_LISTENER table rows amount: '||CHAR(xref_affectRows);
set output_u_pkf_amount='update GAL_PUBLIC_KEY_FIELD table rows amount: '||CHAR(u_pkf_amount);
set output_i_pkf_amount='insert GAL_PUBLIC_KEY_FIELD table rows amount: '||CHAR(i_pkf_amount);
set output_affectRows='affect rows amount: '||CHAR(affectRows);
set output_migration_end='migration data end.';
END FOR;
end@

怎么样调用:
--=======================================
-- DB2 migrations version:  GAL 5.0.0
--=======================================
create procedure callMigrateData(OUT var1 VARCHAR(100), OUT var2 VARCHAR(100), OUT var3 VARCHAR(100), OUT var4 VARCHAR(100), OUT var5 VARCHAR(100), OUT var6 VARCHAR(100), OUT var7 VARCHAR(100), OUT var8 VARCHAR(100), OUT var9 VARCHAR(100), OUT var10 VARCHAR(100), OUT var11 VARCHAR(100), OUT var12 VARCHAR(100))
begin
declare v_diagnostics INTEGER default -1;
--migrate data
call migrate_data(var1,var2,var3,var4,var5,var6,var7,var8);
GET DIAGNOSTICS v_diagnostics = DB2_RETURN_STATUS;
if(v_diagnostics=0) then
--=============================
-- Update  DATABASE VERSION
--=============================
UPDATE GAL_SETTINGS SET SETTING_VALUE = '5.0.0' WHERE SETTING_NAME = 'DATABASE VERSION';
--drop listener_id field
execute immediate 'alter table GAL_PUBLIC_KEY_FIELD drop column listener_id';
--reorganize table
call sysproc.admin_cmd ( 'reorg table GAL_LISTENER' );
--drop procedures
call clear_proc('insert_auditmapper_data', var9);
call clear_proc('insert_xrefmapperlistener_data', var10);
call clear_proc('update_publickeyfield_data', var11);
call clear_proc('migrate_data', var12);
execute immediate 'drop procedure clear_proc';
end if;
end@
call callMigrateData(?,?,?,?,?,?,?,?,?,?,?,?)@
drop procedure callMigrateData@
--reorganize table
call sysproc.admin_cmd ( 'reorg table GAL_PUBLIC_KEY_FIELD' )@

怎么样执行:
(1)Run db2 "Command Window"
(2)Execute "db2 -tvf C:\424_TO_425\V9\424_to_500_first_execute.sql" command.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-299516-1-1.html 上篇帖子: db2日期函数 下篇帖子: eclipse插件DB2驱动
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表