查看: 15582|回复: 14

[精华] Linux 下的 DB2数据库的迁移

[复制链接]
论坛徽章:
42
ITPUB元老
日期:2005-09-09 13:45:35马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14优秀写手
日期:2013-12-18 09:29:09ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32版主3段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-02-13 15:13:362012新春纪念徽章
日期:2012-02-13 15:13:36
跳转到指定楼层
1#
发表于 2006-4-26 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前言:

DB2 Universal Database™(DB2 UDB) 有一对非常有用的工具,可以帮助您实现这种跨平台的备份与恢复功能。 db2move 工具利用了 DB2 的数据移动工具(export 和 import 或 load)来移动数据库表。然而,由于数据库的内容远远不止于用户表,因此您需要使用其他方法在不同的数据库之间迁移其他数据库对象,例如约束、触发器、索引、序列、表空间、缓冲池等。这就是 db2look工具出现的原因。使用这个工具,您可以在源数据库中捕获到定义这些对象使用的数据定义语言(DDL),并在目标数据库中使用这些数据定义语言重新创建这些对象。



1、 环境说明:

迁移的DB2 数据库的名字叫 sample , SCHEMA也是oatest ,用户名是 oatest


2、 导出步骤:

1) 建立新目录,如果是在 linux 下要注意目录的权限问题,目录应该可以被 db2inst1 用户写访问

[db2inst1@devsvr2 db2inst1]$ pwd

/home/db2inst1

[db2inst1@devsvr2 db2inst1]$ mkdir oatest0303

[db2inst1@devsvr2 db2inst1]$ ls

db2inst1 db2test Desktop oatest0303 sqllib



2) 进入该目录

[db2inst1@devsvr2 db2inst1]$ cd oatest0303/

[db2inst1@devsvr2 oatest0303]$





3) 用数据库抽取工具 db2look 导出数据库结构

主要命令

db2look -d sample -e -z oatest -l -o oatest.sql

[db2inst1@devsvr2 oatest0303]$ db2look -d sample -e -z oatest -l -o oatest.sql

-- 未指定用户标识,db2look 试图使用环境变量 USER

-- USER 是: DB2INST1

-- 指定的模式为: OATEST

-- 创建表的 DDL


-- 联合部分的模式名被忽略

-- 输出被发送到文件: oatest.sql



脚本中包括建立 bufferpool 以及tablespace的 DDL 语句


4) 用 db2move 工具导出数据库数据

主要命令

db2move sample export

[db2inst1@devsvr2 oatest0303]$ db2move sample export


***** DB2MOVE *****


Action: EXPORT


Start time: Sun Mar 5 11:00:52 2006



Connecting to database SAMPLE ... successful! Server: DB2 Common Server V8.2.0


EXPORT: 0 rows from table "OATEST "."ATTACHFILE"

EXPORT: 0 rows from table "OATEST "."BASE"

……





5) 打包压缩该目录 oatest0303/

主要命令:

tar zcvf oatest0303.tar.gz oatest0303/

[db2inst1@devsvr2 oatest0303]$ cd ..

[db2inst1@devsvr2 db2inst1]$ tar zcvf oatest0303.tar.gz oatest0303/


oatest0303/

oatest0303/oatest.sql

oatest0303/EXPORT.out

oatest0303/db2move.lst

oatest0303/tab1.msg

oatest0303/tab1.ixf

……





3、 导入步骤

1) 解压

主要命令:

tar zxfv oatest0303.tar.gz

[db2inst1@devsvr2 db2inst1]$ tar zxfv oatest0303.tar.gz

oatest0303/

oatest0303/oatest.sql

oatest0303/EXPORT.out

oatest0303/db2move.lst

……





2) 建立新数据库 db2 create db sample

主要命令:

db2 create db sample

[db2inst1@devsvr2 db2inst1]$ db2 create db sample

DB20000I CREATE DATABASE 命令成功完成。





3) 执行 oatest.sql 脚本建立数据库

主要命令:

db2 -tvf oatest.sql

[db2inst1@devsvr2 db2inst1]$ cd oatest0303

[db2inst1@devsvr2 oatest0303]$ db2 -tvf oatest.sql

……





4) 执行 db2move 导入数据

主要命令:

db2move sample load

[db2inst1@devsvr2 oatest0303]$ db2move sample load

……

* LOAD: table "OATEST "."UM_USER"

-Rows read: 1529

-Loaded: 1529

-Rejected: 0

-Deleted: 0

-Committed: 1529



Disconnecting from database ... successful!


End time: Sun Mar 5 10:24:22 2006




5) 检查一致性

主要命令:

db2 set integrity for oatest.UM_USER immediate checked

[db2inst1@devsvr2 oatest0303]$ db2 connect to sample


数据库连接信息


数据库服务器 = DB2/LINUX 8.2.0

SQL 授权标识 = DB2INST1

本地数据库别名 = SAMPLE


[db2inst1@devsvr2 oatest0303]$ db2 "select count(*) from
oatest.um_user"


1

-----------

SQL0668N 由于表 "OATEST.UM_USER" 上的原因码 "1",所以不允许操作。

SQLSTATE=57016

[db2inst1@devsvr2 oatest0303]$ db2 set integrity for oatest.UM_USER
immediate checked

DB20000I SQL 命令成功完成。

[db2inst1@devsvr2 oatest0303]$ db2 "select count(*) from
oatest.um_user"


1

-----------

1529


1 条记录已选择。






利用 sql 语句得到要检查的表的执行语句

主要命令:

db2 "select 'db2 set integrity for oatest.'||TABNAME||' immediate checked' from syscat.tables where TABSCHEMA='OATEST' and STATUS='C'"

[db2inst1@devsvr2 oatest0303]$ db2 "select 'db2 set
integrity for oatest.'||TABNAME||' immediate checked'
from syscat.tables where TABSCHEMA='OATEST' and STATUS='C'"

1

-----------------------------------------------------------------
db2 set integrity for oatest.CAL_AUTH immediate checked

……

db2 set integrity for oatest.UM_USER immediate checked


81 条记录已选择。



执行这 81 条语句,语句有可能报错

主要命令:

db2 set integrity for oatest. CAL_AUTH immediate checked

[db2inst1@devsvr2 oatest0303]$ db2 set integrity for oatest.CAL_AUTH immediate checked

DB20000I SQL 命令成功完成。

[db2inst1@devsvr2 oatest0303]$ db2 set integrity for oatest.UM_USER immediate checked

DB20000I SQL 命令成功完成。

…………




如果报错,再反复执行这些语句直到下面的语句结果返回 0 条记录




[db2inst1@devsvr2 oatest0303]$ db2 "select 'db2 set integrity
for oatest.'||TABNAME||' immediate checked' from syscat.tables
where TABSCHEMA='OATEST' and STATUS='C'"


1

---------------------------------------------------------------

0 条记录已选择。




6) 在操作系统中建立用户


[root@devsvr2 root]# useradd oatest

[root@devsvr2 root]# passwd oatest

Changing password for user oatest.

New password:

BAD PASSWORD: it is too short

Retype new password:

passwd: all authentication tokens updated successfully.



7) 给 oatest 用户授权

主要命令:

db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT ON DATABASE TO USER OATEST


db2 GRANT CREATEIN,DROPIN,ALTERIN ON SCHEMA OATEST TO USER OATEST

[db2inst1@devsvr2 db2inst1]$ db2 connect to sample


数据库连接信息


数据库服务器 = DB2/LINUX 8.2.0

SQL 授权标识 = DB2INST1

本地数据库别名 = SAMPLE


[db2inst1@devsvr2 db2inst1]$ db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,
IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT ON DATABASE TO USER OATEST;

DB20000I SQL 命令成功完成。

[db2inst1@devsvr2 db2inst1]$ db2 GRANT CREATEIN,DROPIN,ALTERIN ON SCHEMA OATEST TO USER OATEST

DB20000I SQL 命令成功完成。

[db2inst1@devsvr2 db2inst1]$ db2 connect to sample user oatest using oatest


数据库连接信息


数据库服务器 = DB2/LINUX 8.2.0

SQL 授权标识 =OATSET

本地数据库别名 = SAMPLE


[db2inst1@devsvr2 db2inst1]$ db2 "select count(*) from um_user"


1

-----------

1529


1 条记录已选择。




4、 重要说明

1)在 db2 中的 bufferpool 是和内存有关系的,所以你应该根据你的机器内存情况来建立 bufferpool

2) tablespace 的路径也是和你的应用有关,如果是双机环境应该把表空间建立在共享存储中,你可以根据实际情况来修改上文所说到的 oatest.sql 中的建立 bufferpool 以及 tablespace 的语句。




http://macrozeng.itpub.net/post/71/58248
论坛徽章:
0
2#
发表于 2006-4-26 10:32 | 只看该作者
支持!

使用道具 举报

回复
论坛徽章:
42
ITPUB元老
日期:2005-09-09 13:45:35马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14优秀写手
日期:2013-12-18 09:29:09ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32版主3段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-02-13 15:13:362012新春纪念徽章
日期:2012-02-13 15:13:36
3#
 楼主| 发表于 2006-4-26 10:38 | 只看该作者
呵呵,上个月做的一个实验,然后就写下来,今天贴给大家看看

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
4#
发表于 2006-4-27 05:27 | 只看该作者
hehe good

使用道具 举报

回复
论坛徽章:
0
5#
发表于 2006-4-27 22:32 | 只看该作者
讲得很详细,顶

使用道具 举报

回复
论坛徽章:
58
世界杯纪念徽章
日期:2006-07-20 13:19:202008新春纪念徽章
日期:2008-02-13 12:43:03ITPUB元老
日期:2008-08-27 16:09:20奥运纪念徽章
日期:2008-09-04 11:35:05体育版块博采纪念徽章
日期:2008-10-06 11:55:58八级虎吧徽章
日期:2008-12-13 03:53:202009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:猪
日期:2009-01-15 20:53:57
6#
发表于 2006-4-28 10:26 | 只看该作者
感謝!
樓主有否做過加固(Hardening)措施,有的話可否分享一下!

使用道具 举报

回复
论坛徽章:
3
数据库板块每日发贴之星
日期:2008-01-10 01:04:53每日论坛发贴之星
日期:2008-03-30 01:01:55设计板块每日发贴之星
日期:2008-03-31 01:02:13
7#
发表于 2006-4-30 13:23 | 只看该作者

认真读完这个贴子后。

认真读完这个贴子后,我有几个问题:
1、建立用户是否要提前到dbmove之前作?
2、建立数据库后是否要修改一些参数?

使用道具 举报

回复
论坛徽章:
0
8#
发表于 2006-5-6 16:47 | 只看该作者
如果都是Linux系统是不是也可以考虑用备份的方式呢

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
9#
发表于 2006-5-6 23:28 | 只看该作者
if the CPU type is not compatible it backup/restore will not work (even both of them are running linux)

使用道具 举报

回复
论坛徽章:
42
ITPUB元老
日期:2005-09-09 13:45:35马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14优秀写手
日期:2013-12-18 09:29:09ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32版主3段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-02-13 15:13:362012新春纪念徽章
日期:2012-02-13 15:13:36
10#
 楼主| 发表于 2006-8-31 15:20 | 只看该作者

Re: 认真读完这个贴子后。

最初由 jiangjh62 发布
[B]认真读完这个贴子后,我有几个问题:
1、建立用户是否要提前到dbmove之前作?
2、建立数据库后是否要修改一些参数? [/B]


这两个问题都提得很好

1、建立用户放在 dbmove 前面或者后面做都没有关系,在脚本中建立 schema 是和用户没有直接关联的,后来建立这个用户并利用下面的语句把 SCHEMA OATEST 和 USER OATEST 关联起来的

db2 GRANT CREATEIN,DROPIN,ALTERIN ON SCHEMA OATEST TO USER OATEST

2、建立好了数据库当然还修改参数,但是这个属于调优的内容,所以没有在这边详述。

另外,这个迁移方法其实是可以跨平台的,但是需要对导出的脚本做一些修改

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表