`
qtlkw
  • 浏览: 307309 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

DB2 迁移script

    博客分类:
  • DB2
阅读更多
--=======================================
-- 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.
分享到:
评论

相关推荐

    db2导出数据库

    在DB2数据库管理系统中,进行数据迁移或备份是一项常见的任务。本文将详细介绍几种常用的DB2数据库导出方法及其应用场景,帮助用户根据自身需求选择最适合的操作方式。 #### 二、DB2数据库目录管理 在开始介绍具体...

    db2使用14个经典小技巧

    11. **数据库迁移**:低版本DB2数据迁移到高版本,先备份低版本数据库,然后在高版本中恢复,并执行 `db2 migrate database`。 12. **访问包含引号的表名或模式**:在命令行中,用双引号包围包含空格或特殊字符的...

    AIX和WINDOWS下DB2数据库互导

    本文主要介绍如何在AIX和Windows操作系统下实现DB2数据库的互导,以便在不同平台之间迁移和同步数据。以下是详细的操作步骤和关键知识点: 1. **目的**: - 解决AIX系统上的DB2数据库备份无法在Windows系统下还原...

    db2常用命令

    - `db2ctf <script_file>`:假设`<script_file>`包含了多个SQL语句,此命令将依次执行这些语句。 **说明:** - 批量执行SQL脚本可以简化复杂的数据库操作。 #### 十五、生成统计信息命令脚本 **命令:** - `db2...

    WebSphere培训教程(完整版)

    新加入的DB2UniversalDatabase5.2 支持,使开发者能够设计更强大有效的应用。WebSphere应用服务器标准版V1.1已经面世。包 括Servlet运行时引擎(RuntimeEngine),高性能的数据库连接程序(提供预联接,会话和状态管理...

    ssis中实现ebcdic 到 ascii的转换控件

    在某些情况下,可能需要在实际加载到SSIS之前先对数据进行预处理,例如使用DB2提供的函数进行转换,然后再通过SSIS进行数据迁移。 5. 后处理转换: 另一种策略是在数据加载到目标系统后,通过目标系统的功能进行...

    EMC symmetric存储BCV Split简单错误一例.docx

    在上述场景中,数据库环境由两台服务器DB1和DB2组成,采用MC/SG(Multi-Path Connection/Single-Point-of-Management,多路径连接/单点管理)双机配置,DB1为主用,DB2为备用。DB1挂载了9个EMC分区,这些分区被用于3...

    powerbuilder6.5安装程式

    8. **Script语言**:PowerBuilder的脚本语言基于PBL(PowerBuilder Library)文件,包含Sybase特有的语法,如ISQL语句用于执行SQL操作,以及内置函数和过程。 9. **调试与测试**:开发过程中,利用PowerBuilder的...

    java系统设计师java系统设计师.doc

    14. **数据库技术支持工程师**:需有深厚的数据库知识,能够进行性能调优、备份恢复和数据迁移,熟悉多种数据库系统如SQL Server、DB2、Oracle。 这些职位要求涵盖了软件开发的全生命周期,从系统设计、编码、测试...

    Oracle数据库学习指南

    26. 比较SQL Server与Oracle、DB2 27. 多个数据库时,如何设置默认数据库 28. 各种数据类型的比较 29. 漫谈oracle中的空值 30. 没有备份、只有归档日志,如何恢复数据文件 31. 哪些初始化参数最影响Oracle系统...

    SAP ADM225

    - **克隆与迁移**:支持快速复制整个系统环境到另一台服务器,这对于灾难恢复计划至关重要。 - **环境同步**:确保开发、测试和生产环境之间的一致性,减少因环境差异导致的问题。 ##### 变更管理 - **变更跟踪与...

Global site tag (gtag.js) - Google Analytics