0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowsからLinuxへDb2を移行する

Last updated at Posted at 2021-10-21

はじめに

データベースを異なるプラットフォームで移行する場合、文字コードなどの考慮事項があります。それらを踏まえて移行方法を検討しました。

内容

以下の前提でIBM Db2の移行方法を説明、検討します。

  • サーバーをWindowsからLinuxへ変更
  • Db2をバージョンアップ
  • データを移行

移行する環境

移行元DBサーバー 移行先DBサーバー
OS Windows Server 2008 R2 Ubuntu 20.04 LTS
DBMS IBM Db2 V10.1 IBM Db2 V11.5
文字コード(OS) Shift JIS UTF-8
文字コード(DB) Shift JIS Shift JIS

移行する方法

移行するやり方は3つあります。

移行方法 特徴 Windows-Linux
バックアップ/リストア データベース単位にファイルに出力 不可
エクスポート/ロード テーブル単位にファイル出力 可能
カーソルを用いたロード 移行元DBに接続してselect/load 可能
バックアップ/リストア

backupコマンドでデータベース単位にバックアップし、作成したバックアップファイルを元にrestoreコマンドで復元します。データのバージョンアップはDb2が行います。最も簡単な方法ですが、プラットフォームの互換性、Db2のバージョン間の互換性を考慮する必要があります。詳細はIBMのウェブサイトをご覧ください。

[Db2] バックアップ・イメージの互換性

エクスポート/ロード

exportコマンドでテーブル単位にファイルを出力、それを元に移行先のテーブルへloadコマンドで挿入します。もっとも可搬性が高く、DBMSを変更する際にも用いられる方法です。ファイルを出力、読み込む際に以下に注意を払う必要があります。

  • 32KBを超えるレコード長
  • ラージオブジェクト(LOB)
  • 文字コード

エクスポート/ロードはQiitaもご覧ください。
Db2:データベースをExportで全部移行してくれ
Db2:データベースをLoadで全部移行してくれ

カーソルを用いたロード

移行先のデータベースに接続したうえで移行元のデータベースをカーソルで定義、そのカーソルでselectしたレコードをloadします。ファイル出力をしないので作業用ファイルスペースを用意する必要がありません。移行元DBサーバーと移行先DBサーバーとが同じ場所でなくオンプレミスとクラウドといった場合、移行に時間がかかる可能性があります。

カーソルを用いたロード
connect to NEWDB ;
declare mycurs cursor database OLDDB user user1 using pwd1 for select two,one,three from abc.table1 ;
load from mycurs of cursor insert into abc.table1 ;

LOADコマンドの詳細はIBMのウェブサイトをご覧ください。
LOADコマンド

どの方法を選ぶか

今回はWindowsからLinuxへの移行なのでバックアップ/リストアは使えません。データベースの文字コードはShift JISのままで変更なしですが**OSがShift JISからUTF-8に変わります。**エクスポート/ロードで移行する場合、文字コードに対する対応、環境設定の変更が必要な場合があります。

OS(Linux)がUTF-8でDBがShift JISの場合、CSVファイルをそのままインポートすると文字化けします。コードページをShift-JISに変更してからインポートします。

1.DB2CODEPAGEをShift-JISに設定
export DB2CODEPAGE=943
2.データベースを切断
db2 terminate
3.データベースを再接続してコードページを反映
db2 connect to mydb
4.Shift-JISのcsvをインポート
db2 import from file.csv of del insert into table1

カーソルを用いたロードで移行する場合、ファイルを介さずデータベース間でのやり取りのため、文字コードに対する対応は不要になります。

移行方法 メリット デメリット
バックアップ/リストア 最も単純で簡単 Windows-Linuxは不可
エクスポート/ロード 可搬性に優れる 文字コードの考慮が必要
カーソルを用いたロード 文字コードの考慮が不要 リモート接続だと遅い

エクスポート/ロードはケアレスミスで簡単に文字化けしそうです。正直、文字化けトラブルは泥沼なので係わりたくありません。今回のケースですとファイル出力も不要なカーソルを用いたロードで移行することにしました。

おわりに

データベースの移行は前提条件によって選択する方法が変わります。今回は同じDBMSなのでカーソルを用いたロードを選択しましたが、DBMSを変更するならエクスポート/ロードを選択するか異種DBMS間を接続するアダプターを介しての移行になるかと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?