| 導購 | 订阅 | 在线投稿
分享
 
 
 

在Linux平台下進行DB2數據庫的遷移

來源:互聯網  2008-06-01 03:27:30  評論

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||' immediatechecked' 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 GRANTDBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,

IMPLICIT_SCHEMA,LOAD,CREAT

E_EXTERNAL_ROUTINE,QUIESCE_CONNECTON 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 的語句。

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||' immediatechecked' 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 GRANTDBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE, IMPLICIT_SCHEMA,LOAD,CREAT E_EXTERNAL_ROUTINE,QUIESCE_CONNECTON 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 的語句。
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有