DB2实现高效迁移数据的5种方案总结

通过网络将大量数据从一台数据库服务器复制到另一台数据库服务器需要面临下面的挑战:
1.海量数据
2.时间限制,需要更快的数据传输速度和数据重新加载速度
3.需要跨数据库分区节点均匀地分布数据
所以选择正确的数据迁移工具和方法是在大型数据仓库环境中的不同系统之间高效迁移数据的关键。为了帮助您完成数据迁移任务,本文详细介绍了几种常用的数据迁移方案,以供大家参考学习。

实现方法

DB2从一个环境到另一个环境刷新大型数据集时,有很多方案可供参考借鉴。本文列举了如下5种方法,如下所示:
1.在本地数据库服务器上导出数据,传输数据文件,然后在目标数据库服务器上本地加载数据
2.从本地数据库服务器上导出数据,并将数据远程加载到目标数据库服务器中
3.从远程数据库服务器上导出数据,并在目标数据库服务器上本地加载数据
4.将数据导出到操作系统管道中,然后通过管道将数据导入或加载到目标远程数据库服务器中
5.在本地数据库服务器上并行导出数据(每部分位于各自的分区文件系统中),使用一个数据文件传输,然后在本地并行加载各个部分
下面通过示例详细讲解一下每种方法的实现步骤:

A.在本地数据库服务器上导出数据,传输数据文件,然后在目标数据库服务器上本地加载数据

1st.实现模型如下所示:

 
2nd.具体步骤如下:
1.在源数据库服务器上本地连接到 Source
 CONNECT TO SourceDB;
2.在源数据库服务器中的表上执行 DB2 导出
 EXPORT TO DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL MESSAGES DATAMARTS.SCENARIO_CALENDAR.MSG
 SELECT * FROM DATAMARTS.SCENARIO_CALENDAR;
3.压缩已导出的文件,从而缩短在服务器之间进行文件传输所需的时间
 gzip DATAMARTS.SCENARIO_CALENDAR F.DEL
4.使用 sftp 或 scp 将压缩后的文件从 SourceDB 服务器传输到 TargetDB 服务器
 cd  
 sftp username@
 put DATAMARTS.SCENARIO_CALENDAR.DEL.gz
 OR
 scp DATAMARTS.SCENARIO_CALENDAR.DEL.gz username@:/
5.在目标数据库服务器上解压缩传输完毕的文件
 gunzip DATAMARTS.SCENARIO_CALENDAR.DEL.gz
6.在目标数据库服务器上本地连接到 TargetDB
 CONNECT TO TargetDB;
7.执行加载或导入
 LOAD FROM DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL SAVECOUNT 10000 MESSAGES DATAMARTS.SCENARIO_CALENDAR.LOAD.MSG INSERT INTO
DATAMARTS.SCENARIO_CALENDAR;
8.如果选择使用加载命令,在操作结束时执行一次 SET INTEGRITY 命令
  SET INTEGRITY FOR DATAMARTS.SCENARIO_CALENDAR IMMEDIATE CHECKED;
9.执行 RUNSTATS,让统计数据保持最新
RUNSTATS ON TABLE DATAMARTS.SCENARIO_CALENDAR WITH DISTRIBUTION AND DETAILED INDEXES ALL;

B. 在本地数据库服务器上导出数据,传输数据文件,然后在目标数据库服务器上本地加载数据

1st. 实现模型如下所示:

 
2nd. 具体步骤:
1.在源数据库服务器中登记目标数据库。
CATALOG TCPIP NODE TargetND REMOTE TargetDBServer.ibm.com SERVER 50001;
CATALOG DATABASE TargetDB AT NODE TargetND;
2.在源数据库服务器上本地连接到 SourceDB。
 CONNECT TO SourceDB;
3.从源数据库服务器上的表执行 DB2 导出。
 EXPORT TO DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL MESSAGES DATAMARTS.SCENARIO_CALENDAR.msg
SELECT * FROM DATAMARTS.SCENARIO_CALENDAR;
4.在目标数据库服务器上远程连接到 TargetDB。
CONNECT TO TargetDB user using ;
5.将数据从源数据库远程加载或导入目标数据库。
LOAD CLIENT FROM DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL SAVECOUNT 10000 MESSAGES
 DATAMARTS.SCENARIO_CALENDAR.LOAD.msg INSERT INTO DATAMARTS.SCENARIO_CALENDAR;
6.如果选择使用加载命令,在操作结束时执行一次 SET INTEGRITY 命令。
SET INTEGRITY FOR DATAMARTS.SCENARIO_CALENDAR IMMEDIATE CHECKED;
7.执行 RUNSTATS,让统计数据保持最新。
 RUNSTATS ON TABLE DATAMARTS.SCENARIO_CALENDAR WITH DISTRIBUTION AND DETAILED INDEXES ALL;

C. 在本地数据库服务器上导出数据,传输数据文件,然后在目标数据库服务器上本地加载数据

1st. 实现模型如下所示:

 
2nd. 具体步骤:
1.在目标数据库服务器中登记源数据库。
 CATALOG TCPIP NODE SourceND REMOTE SourceDBServer.ibm.com SERVER 50001;
CATALOG DATABASE SourceDB AT NODE SourceND;
2.从目标数据库服务器远程连接到源数据库。
CONNECT TO SourceDB user using ;
3.从表远程执行 DB2 导出。
EXPORT TO DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL MESSAGES
DATAMARTS.SCENARIO_CALENDAR.msg
        SELECT * FROM DATAMARTS.SCENARIO_CALENDAR;
4.在目标数据库服务器上本地连接到 TargetDB。
 CONNECT TO TargetDB user using ;
5.执行本地加载或导入。
 LOAD FROM DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL SAVECOUNT 10000 MESSAGES
     DATAMARTS.SCENARIO_CALENDAR.LOAD.msg INSERT INTO DATAMARTS.SCENARIO_CALENDAR;
6.如果选择使用加载命令,在操作结束时执行一次 SET INTEGRITY 命令。
 SET INTEGRITY FOR DATAMARTS.SCENARIO_CALENDAR IMMEDIATE CHECKED;
7.执行 RUNSTATS,让统计数据保持最新。
  RUNSTATS ON TABLE DATAMARTS.SCENARIO_CALENDAR WITH DISTRIBUTION
AND DETAILED INDEXES ALL;

D. 在本地数据库服务器上导出数据,传输数据文件,然后在目标数据库服务器上本地加载数据

1st. 实现模型如下所示:

 
2nd. 具体步骤:
1.在目标数据库服务器中登记源数据库:
CATALOG TCPIP NODE SourceND REMOTE SourceDBServer.ibm.com SERVER 50001;
CATALOG DATABASE SourceDB AT NODE SourceND;
2.在目标数据库服务器中创建一条操作系统管道。
 mkfifo datapipe
 ls ?ltr datapipe
 prw-r--r--  1 bculinux bcuigrp     0 2011-09-18 16:32 datapipe
3.从目标服务器远程连接到源数据库。
 CONNECT TO SourceDB user using ;
4.从源数据库导出数据,并将其写入操作系统管道(数据管道)的一端。在业务场景中,数据库管理团队会从 PROD 刷新 UAT。仅适用于 2011 年的 12904084 条记录。
 EXPORT TO datapipe OF DEL MODIFIED BY COLDEL, MESSAGES
     FACT_CUST_FPI_VALIDATION.EXP.msg SELECT * FROM DATAMARTS.F_CUST_FPI_VALIDATION
     WHERE REC_LOAD_DT > '2011-01-01-00.00.00.000000' WITH UR;
5.从目标服务器远程连接到源数据库。
CONNECT TO TargetDB user using ;
6.从操作系统管道的另一端将数据导入或加载到常规哈希范围分区的表中。
IMPORT FROM datapipe OF DEL MODIFIED BY COLDEL, MESSAGES
      FACT_CUST_FPI_VALIDATION.IMP.msg INSERT INTO
      DATAMARTS.FACT_CUST_FPI_VALIDATION;         
 LOAD FROM datapipe OF DEL MODIFIED BY COLDEL, MESSAGES
      FACT_CUST_FPI_VALIDATION.LD.msg INSERT INTO
      DATAMARTS.FACT_CUST_FPI_VALIDATION;

E. 在本地数据库服务器上导出数据,传输数据文件,然后在目标数据库服务器上本地加载数据

1st. 实现模型如下所示:

 
2nd. 具体步骤:
1.创建从管理节点导出目录到所有数据节点的软链接。在这个例子中,导出目录为 $HOME/db2backup/exports。
ln -s /db2fs/bculinux/NODE0001 NODE1
ln -s /db2fs/bculinux/NODE0002 NODE2
ln -s /db2fs/bculinux/NODE0040 NODE40
3.下列清单显示了创建软链接之后得到的文件。
ls ?ltr
lrwxrwxrwx 1 bculinux bcuigrp  24 2011-04-13 19:25 NODE1 -> /db2fs/bculinux/NODE0001
lrwxrwxrwx 1 bculinux bcuigrp  24 2011-04-13 19:25 NODE2 -> /db2fs/bculinux/NODE0002
lrwxrwxrwx 1 bculinux bcuigrp  24 2011-04-13 19:28 NODE40 -> /db2fs/bculinux/NODE0040
4.在每个物理数据节点服务器中,创建类似下面的目录结构。
mkdir ?p /db2fs/bculinux/NODE0001/exports/datamarts
mkdir ?p /db2fs/bculinux/NODE0002/exports/datamarts
mkdir ?p /db2fs/bculinux/NODE0040/exports/datamarts
5.对于需要导出的表,请从 SYSCAT.COLUMNS 找到哈希分区列。
 db2 "SELECT SUBSTR(COLNAME,1,20) COLNAME, PARTKEYSEQ FROM
       SYSCAT.COLUMNS WHERE TABNAME=''F_CUST_PROFTBLTY_TMP' AND
       TABSCHEMA='DATAMARTS'"
6.在这个表中,我们找到了两个哈希分区列。我们选择其中一个哈系列,以便在各自分区中导出数据。
使用 DB2 EXPORT 命令跨所有分区并行导出数据,如以下清单所示。
 db2_all "\"|| db2 \"EXPORT TO
$HOME/db2backup/exports/NODE##/exports/datamarts/
     DATAMARTS.F_CUST_PROFTBLTY_TMP.del OF DEL SELECT * FROM
     DATAMARTS.F_CUST_PROFTBLTY_TMP WHERE DBPARTITIONNUM
(BUSS_UNIT_KEY)=##\""
此命令将每个分区数据导出到各自的分区节点。
7.使用 scp 执行从每个源数据库服务器节点到目标数据库服务器的文件复制。
 scp -p  @:
8.并行的LOAD把每个分区数据加载到各自的分区节点。
 db2_all "<<-0<<\" db2 -v \"LOAD FROM db2backup/exports/NODE##/exports/datamarts
    DATAMARTS.F_CUST_PROFTBLTY_TMP.del OF DEL INSERT INTO
    DATAMARTS.F_CUST_PROFTBLTY_TMP NONRECOVERABLE \""

如何我们掌握了上面所讲的五种方案,那么迁移DB2数据库就是小菜了。

时间: 2024-09-16 16:17:59

DB2实现高效迁移数据的5种方案总结的相关文章

【DB2学习】迁移数据之EXPROT

db2 => connect to sample    数据库连接信息  数据库服务器         = DB2/NT 9.5.0  SQL 授权标识         = YANG  本地数据库别名       = SAMPLE db2 => export to d:\employee.ixf of ixf messages d:\employee.msg select * from a dministrator.employee导出的行数:42 db2 => export to d:

在SQL Server中迁移数据的几种方法_MsSql

1.通过工具"DTS"的设计器进行导入或者导出 DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不 多,如果只是进行SQL Server数据库中部分表的移动,用这种方法最好,当然,也可以进行全部表的移动.在SQL Server Enterprise Manager中,展开服务器左边的+,选择数据库,右击,选择All tasks/Import Data...(或All tasks/Export Data...),进入向导模式,按提示一步一步走就行了,里面分得很

在SQL Server中迁移数据的几种方法

1.通过工具"DTS"的设计器进行导入或者导出 DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不 多,如果只是进行SQL Server数据库中部分表的移动,用这种方法最好,当然,也可以进行全部表的移动.在SQL Server Enterprise Manager中,展开服务器左边的+,选择数据库,右击,选择All tasks/Import Data...(或All tasks/Export Data...),进入向导模式,按提示一步一步走就行了,里面分得很

【译】Asp.Net 导出 Excel 数据的9种方案

原文 http://www.cnblogs.com/garydot/archive/2012/06/04/excel-export.html 简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website table 等多钟格式的文档.它具备自动识别行号,字符,格式化数字等功能,例如:如果你在Excel 单元格中输入数字 "123456789012" 会自动转化为"1.23457E+11". 背景介绍 正因为E

Apache CarbonData:大数据生态一种新的高性能数据格式

Apache CarbonData是一种新的高性能数据存储格式,针对当前大数据领域分析场景需求各异而导致的存储冗余问题,CarbonData提供了一种新的融合数据存储方案,以一份数据同时支持"任意维度组合的过滤查询.快速扫描.详单查询等"多种应用场景,并通过多级索引.字典编码.列存等特性提升了IO扫描和计算性能,实现百亿数据级秒级响应.CarbonData是由华为开源贡献到Apache基金会的大数据项目,致力于推动大数据开源生态技术的发展. 随着数据与日俱增,业务驱动下的数据分析灵活性

PostgreSQL不同模式(SCHEMA)之间迁移数据

操作目的:   PostgreSQL数据库在不同模式之间迁移数据,可用于在异机数据迁移的场景.   今天网友问到一个问题,是在数据迁移的场景中,想把源库的数据迁移到不同的schema下面,比如从schema gaoqiang,迁移到schema mayday.   schema(模式)这种概念在Oracle中,可以把用户认为就是schema,比如用户gaoqiang的模式就是gaoqiang:在其他数据库中 不一定是一一严格对应的,具有一定的灵活性.在PostgreSQL数据库中,模式和用户可以

db2-sybase和oracle、DB2哪个处理的数据最大??

问题描述 sybase和oracle.DB2哪个处理的数据最大?? 这三种数据库分别有哪些各自的优势,使其在市场上并存的?请简单说说各种的优缺点,和应用于哪些方面? 解决方案 oracle和db2做大型数据库比较牛,sybase做中小型的数据库 目前oracle比较常用,数据优化做的比较好,db2和sybase数据库逐渐淡出,sqlserver在中小型数据库上是比较好的选择 解决方案二: DB2/Sybase/Oracle的比较

AMH 国内领先的云主机面板安装和迁移数据

安装请使用纯净系统. AMH已经升级到5.3了,并支持多版本PHP了!     安装AMH前请选择好安装版本,4.3免费版  支持目前 CentOS.Ubuntu.Debian 以下版本 CentOS 6 x64 CentOS 6 i386 CentOS 5 x64 CentOS 5 i386 Ubuntu 12 x64 ubuntu 12 i386 Debian 6 x64 (squeeze) Debian 6 i386 (squeeze)    AMH5.3 极速安装支持的系统 支持目前 C

迁移数据时oracle字符集的转换迁移数据时oracle字符集的转换

按照oracle官方文档所说,数据库字符集在创建后原则上不能更改.因此,在设计和安装之初考虑使用哪一种字符集十分重要.对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行.但是由于每家软件公司使用的字符集一样,迁移数据时肯定是会遇到字符集转换的问题.比如最常遇到是英文字符集转换成中文,中文的转换成英文.而且在迁移数据时都是上百GB的dmp文件啊.在迁移数据过程中我使用过两种方法一是修改dmp文件的字符集一是修改数据库的字符集.修改dmp文件字符集,d