- PR -

DB2 データベース移行方法に関する質問

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/01/20
投稿数: 3
投稿日時: 2005-01-20 17:30
お世話になります。

DB2の開発経験がほとんどなく
調査、実験では思うような結果が
得られないためこちらで質問させてください。

テーブル定義の変更に伴い、
変更後のテーブルが作られている新DBへ
データの移行が必要となりました。

環境
OS:Linux
DB:DB2 v8.1

上記作業における検討中の方針を記述します。

@アプリケーションのコード内部に
スキーマ名(A_schemaとする)が固定で書かれて
いることから、スキーマ名を変更することが
できないということでDBを別に作成する。(新DB)

A旧DBよりdb2moveでスキーマ単位でテーブルデータを
exportし新DBに別スキーマ名(B_schemaとする)でimportする。※1

Bテーブル定義の変更はSQLで吸収し、
「insert into B_schema.テーブル名 (a,b,c) select a,b,c from A_schema.テーブル名〜」
という形式でデータの移行を行う。
(変更されたテーブルは約60個あります。)

そこで質問なのですが、※1でA_schemaのexportしたテーブルを
B_schemaとしてimportする方法はないでしょうか。

上記が不可能な場合の対応方法、またはもっと効率の良い方法など
ございましたらご教示頂けないでしょうか。

以上、宜しくお願い致します。
ishi
会議室デビュー日: 2004/07/16
投稿数: 17
投稿日時: 2005-01-21 12:08

普通にスキーマ名を指定してimportコマンドを実行すれば問題ないと思いますが。

db2 "import from tab1.ixf of ixf replace into NEW_SCHEMA.TABNAME"

あと別スキーマにテーブルを作成したいからといって特に新しくDBを作成する必要は無いと思いますよ。
次のように新しいスキーマでテーブルを作成できます。

db2 "create table NEW_SCHEMA.TABNAME like OLD_SCHEMA.TABNAME"
未記入
会議室デビュー日: 2005/01/20
投稿数: 3
投稿日時: 2005-01-21 13:42
ishi様

ご回答有難う御座います。
教えて頂いた方法で試してみようと思います。

>あと別スキーマにテーブルを作成したいからといって
>特に新しくDBを作成する必要は無いと思いますよ。
説明が悪くて申し訳ありません。
スキーマ名を変更せずにテーブル定義を変更したいので
新しいDBを作成しなければいけないと思っています。
(定義変更前の状態も残しておきたい。)
単純にスキーマ名を変更する方法はないのでしょうか。

以上、宜しくお願い致します。
ishi
会議室デビュー日: 2004/07/16
投稿数: 17
投稿日時: 2005-01-21 18:21
>単純にスキーマ名を変更する方法はないのでしょうか。

コマンド一発では無理だと思います。
RENAME でも ALTER TABLEでも出来ないようです。

スキーマ名ではなくテーブル名で管理するのは駄目ですか?
こちらは簡単です。

db2 "rename table TABNAME to BACKUP_TABNAME"
db2 "create TABNAME …"
db2 "insert into TABNAME (…) select … from BACKUP_TABNAME"
未記入
会議室デビュー日: 2005/01/20
投稿数: 3
投稿日時: 2005-01-24 13:47
ishi様

ご連絡遅れまして申し訳ありません。

db2moveでExportした際作成される
db2move.lstファイルのスキーマ部分を変更することにより
ishi様から教えて頂いた下記の処理が複数テーブル分
まとめて出来ました。

db2 "import from tab1.ixf of ixf replace into NEW_SCHEMA.TABNAME"

さまざまなアドバイス有難う御座いました。
1

スキルアップ/キャリアアップ(JOB@IT)