IBM Support

[Db2] シフト JIS や EUC などのデータベースを Unicode データベースへ移行する方法

Question & Answer


Question

既存の非 Unicode データベースを Unicode (UTF-8) データベースに変更する方法を教えてください。

Answer

データベースで使用されるコード・セットと照合シーケンスは、データベース作成時に指定されたロケール、コード・セット、および照合シーケンスに基づくため、データベースを再作成する必要があります。
以下のステップは、既存の非 Unicode データベースを Unicode データベースに変換する方法を例示しています。
注:db2move の使用方法自体は以下のページもご参照ください。

[手順]
  1. db2move コマンドを使用して既存データベースのデータをエクスポート
    cd <export-dir>
    export DB2CODEPAGE=943 ※
    db2 terminate
    db2move SAMPLE export
    ここで、<export-dir> はデータのエクスポート先のディレクトリーであり、SAMPLE は既存のデータベース名です。
    ※ Windows の場合は export の代わりに set を使用します。
  2. db2look コマンドを使用して既存のデータベースの DDL スクリプトを生成
    db2look -d sample -e -a -o unidb.ddl -l -x -f
    ここで SAMPLE は既存のデータベース名であり、unidb.ddl は生成される DDL スクリプトのファイル名です。
    -l オプションはユーザー定義表スペース、データベース・パーティション・グループ、およびバッファー・プール用の DDL を生成、-x オプションは許可 DDL を生成、-f オプションはデータベース構成パラメーター用の更新コマンドを生成します。
  3. Unicode データベースを作成
    既存のデータベースのコードページ、テリトリーおよび照合 (COLLATE) は、get db cfg for <dbname> コマンドで確認します。
    db2 create database unidb to <path> using codeset UTF-8 territory JP [ collate using identity ]
    ここで unidb は Unicode データベースの名前です。 <path> はデータベース・ディレクトリーを作成するパスを指定します。また、collate using identity は既存のデータベースの照合順序が IDENTITY の場合に指定します。
    既存のデータベースの照合順序が UNIQUE (言語対応型照合) の場合は以下の Technote を参照してください。
    [Db2] 言語対応型の照合をもつ Unicode データベースを作成する方法
     
  4. unidb.ddl スクリプトの編集
    1. データベース名のすべてのオカレンスを新しい Unicode データベース名に変更します。
      CONNECT TO UNIDB
    2. 表の文字カラムの列の長さを増やします。非ASCII 文字を Unicode に変換すると 3 バイトから 4 バイトに展開されるため、文字列のバイト数が増大します。 この増大に見合うように文字カラムの長さを増やすことが推奨されています。例えばいわゆる半角カナはシフト JIS では 1 バイトですが、UTF-8 では 3 バイトです。
    3. 既存のデータベースを保持するには、unidb.ddl ファイル内で表スペースのファイル名の指定も変更する必要があります。 そうしない場合は、既存のデータベースをドロップし、同じ表スペース・ファイルを使用することができます。 既存のデータベースをドロップするには次のコマンドを実行します。
      db2 drop database <既存のデータベース>
  5. 編集した DDL スクリプトを実行して、データベース構造を再作成
    db2 -tvf unidb.ddl
  6. db2move コマンドを使用して、データを新しい Unicode データベースにインポート
    cd <export-dir>
    export DB2CODEPAGE=943 ※
    db2 terminate
    db2move unidb import
    ここで、<export-dir> はデータのエクスポート先のディレクトリーであり、UNIDB は Unicode データベース名です。 ※ Windows の場合は export の代わりに set を使用します。
  7. データベース構成パラメーターの変更
    データベース構成パラメーターを移行する場合は、オリジナルと同じ値になるように update db cfg を実行してください。
    データベースのパスを変更する他の方法については、リダイレクト・リストア操作の実行 をご参照ください。
     
運用上の考慮点
  • 文字の互換性
    Unicode はシフト JIS に比べ、より大きな文字集合を持つため、シフト JIS から Unicode へ変換する場合は、文字化けなどの問題は発生しません。
    ただし、Unicode データベースからデータを取り出して Unicode コード・ページを使用しないアプリケーションに渡すと、アプリケーション側のコード・ページで定義されていない文字は 0x3F や 0xFCFC などの文字に置き換えられます。
  • ソート順
    COLLATE USING にて照合順序を指定しない場合、あるいは SYSTEM を指定した場合、以前の非 Unicode SYSTEM 照合の順序付け動作をエミュレートする照合順序を使用します。 これにより、現行のデータベース順序付けを維持しつつ、既存の非 Unicode データベースを Unicode に移行することが可能になります。
    ただし照合順序が IDENTITY の場合、文字列は単純にコード・ポイント値に基づき各ストリングの文字が比較されるため、コード・ページの変更により順番が変わります。

関連情報
[Db2] パスポート・アドバンテージによく寄せられる質問
[Db2] IMPORT/EXPORT における文字化けの回避方法
非 Unicode データベースを Unicode に変換する
db2move - データベース移動ツール・コマンド
db2look - Db2 統計および DDL 抽出ツール・コマンド
照合シーケンス
Unicode データベースのデータ・タイプ
データの移動に関する Unicode のための考慮事項
リダイレクト・リストア操作の実行


お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlEAAU","label":"Data Movement-\u003Edb2move"}],"ARM Case Number":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"All Version(s)"}]

Document Information

Modified date:
24 August 2023

UID

swg21615934