Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


11.4.15 マルチチャンク表を再編成する方法(表全体を再編成する場合)

マルチチャンク表全体を再編成する方法を説明します。

重要

マルチチャンク表全体を再編成する場合(特にデータ件数が多い場合),再編成に時間が掛かるおそれがあります。このため,マルチチャンク表全体を再編成するのではなく,再編成が必要なチャンクだけを定期的に再編成することを推奨します。

マルチチャンク表全体の再編成は,次のどちらかの方法で行います。通常は,1.の方法でマルチチャンク表全体の再編成を実行してください。

  1. 表の再編成後もチャンクの構成を同じにする方法

    この方法の場合,再編成中の表を検索することができます(更新はできません)。また,チャンクの構成,状態,およびコメントを,再編成前の状態と同じにできます。

    ただし,再編成前と再編成後の両方のデータを一時的に保持する必要があるため,再編成対象の表を格納しているデータ用DBエリアにその分の空き容量が必要になります。空き容量が不足している場合は,この方法は実施できません。そのため,この方法を実施する場合は,adbdbstatusコマンドで,再編成を実行するチャンクのデータ容量と,表を格納しているデータ用DBエリアの空き容量を比較してください。adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスadbdbstatus(データベースの状態解析)を参照してください。

    この方法の再編成手順については,「(1) 表の再編成後もチャンクの構成を同じにしたい場合」を参照してください。

  2. 表の再編成後はデータを1つのチャンクにまとめる方法

    再編成対象の表を格納しているデータ用DBエリアの空き容量が不足しているために1.の方法が実施できない場合は,この方法で表の再編成を実行してください。この方法の場合,再編成中の表を検索,更新することはできません。また,表中の全データを1つのチャンクにまとめて再編成するため,チャンクの構成,状態,コメントが変わります。

    この方法の再編成手順については,「(2) 表の再編成後はデータを1つのチャンクにまとめてもよい場合」を参照してください。

    なお,カレントチャンクだけが再編成対象となる場合,カレントチャンクに格納されているデータ容量分の空き容量がデータ用DBエリアに必要になります。

〈この項の構成〉

(1) 表の再編成後もチャンクの構成を同じにしたい場合

ここで説明する方法で表を再編成した場合,チャンクの構成,状態,およびコメントを,再編成前の状態と同じにできます。チャンクIDは,表の再編成前とは異なるチャンクIDになります。

表の再編成手順を次に示します。

手順

  1. APやコマンドが再編成対象の表を更新できない状態にする

    次の操作を実行して,APやコマンドが再編成対象の表を更新できない状態にしてください。

    • HADBサーバマシン上で動作している,再編成対象の表を更新するコマンドやジョブ(定期的に実行しているadbimportコマンドやadbmergechunkコマンドなど)を停止してください。

    • HADBサーバにアクセスして再編成対象の表を更新するAPや,HADBサーバにアクセスして再編成対象の表を更新するコマンドをすべて停止してください。

    上記の操作を両方とも実行することを推奨します。

  2. 再編成対象の表の全チャンクの情報を取得する

    システム表STATUS_CHUNKS表をSQL文で検索し,再編成対象の表の全チャンクの情報を取得してください。次の情報を取得します。

    • CHUNK_ID(チャンクID)

    • CHUNK_COMMENT(チャンクに設定されたコメント)

    • CHUNK_STATUS(チャンクの状態)

    • CREATE_TIME(チャンクの作成日時)

    • SWAP_TIME(カレントチャンクが切り替わった日時)

    上記の情報を検索するSQL文の例については,「付録C.9 システム表の検索」の「(3) 表名から表内の全チャンクの情報を調べる場合」を参照してください。

    重要

    カレントチャンクを確認しておいてください。CREATE_TIME(チャンクの作成日時)が設定されていて,かつSWAP_TIME(カレントチャンクが切り替わった日時)がナル値のチャンクが,カレントチャンクです。

  3. チャンク単位に再編成を実行する

    再編成対象の表の全チャンクに対して,手順a.~手順d.を繰り返して,チャンク単位に再編成を実行してください。

    重要

    カレントチャンクは最後に再編成してください。

    1. チャンク単位にデータをエクスポートする

      -cオプションを指定したadbexportコマンドで,チャンク単位にデータをエクスポートしてください。チャンク単位にエクスポートする方法については,「11.4.5 チャンク単位にデータをエクスポートする方法」を参照してください。

    2. エクスポートしたデータを,待機状態のチャンクとしてバックグラウンドインポートする

      adbimportコマンドに次に示すオプションを指定して,手順a.でエクスポートしたデータをバックグラウンドインポートしてください。

      • -bオプション

      • --status waitオプション

        --status waitオプションを指定すると,待機状態のチャンクが作成されてデータが格納されます。

      • -mオプション

        手順2.で確認したチャンクに設定されたコメントを指定してください。

      待機状態のチャンクを作成するバックグラウンドインポートについては,「11.4.4 マルチチャンク表にインポートするデータを一時的に検索対象外にする方法(待機状態のチャンクの作成)」を参照してください。

      重要

      adbimportコマンドを実行する際,インポートオプションadb_import_rthd_numには,「11.4.14 マルチチャンク表を再編成する方法(チャンク単位で再編成する場合)」の「(3) インポートオプションの見積もり」に示す計算式を満たす値を指定してください。計算式を満たさない値を指定すると,データの格納効率が悪くなるおそれがあります。

    3. チャンクの状態を変更する

      手順2.で調べた再編成対象のチャンクの状態が待機状態だった場合,この手順は不要です。手順d.に進んでください。

      手順2.で調べた再編成対象のチャンクの状態が通常状態だった場合,-wオプションと-nオプションの両方を指定して,adbchgchunkstatusコマンドを実行してください。2種類のチャンクの状態を同時に変更します。

      • -wオプションには,手順a.でエクスポートしたデータを格納しているチャンク(再編成対象のチャンク)を指定します。このチャンクを通常状態から,待機状態に変更します。

      • -nオプションには,手順b.でバックグラウンドインポートした待機状態のチャンクを指定します。このチャンクを待機状態から,通常状態に変更します。

      チャンクの状態を変更する方法については,「11.4.12 チャンクの状態を変更する方法」を参照してください。

    4. 再編成対象のチャンクを削除する

      手順a.でエクスポートしたチャンクのデータを,PURGE CHUNK文で削除してください。なお,PURGE CHUNK文は,マルチチャンク表の検索と同時に実行できません。そのため,マルチチャンク表に対する操作が存在しないタイミングで,PURGE CHUNK文を実行してください。

      PURGE CHUNK文でチャンクを削除する方法については,「11.4.6 チャンク単位にデータを削除する方法」を参照してください。

  4. APやコマンドが再編成対象の表を更新できる状態にする

    すべてのチャンクに対して手順3.の作業が完了したあとに,次の方法でAPやコマンドが再編成対象の表を更新できる状態にしてください。

    • 手順1.で,HADBサーバマシン上で動作しているコマンドやジョブを停止した場合

      停止していたコマンドやジョブを開始してください。

    • 手順1.で,HADBサーバにアクセスするAPやコマンドを停止した場合

      停止していたAPやコマンドを開始してください。

重要

再編成中の表に対して,更新系SQLまたは表を更新するコマンド(adbimportコマンドやadbmergechunkコマンドなど)を実行しないでください。実行した場合,SQL文やコマンドで更新した内容が,再編成後に失われるおそれがあります。

(2) 表の再編成後はデータを1つのチャンクにまとめてもよい場合

ここで説明する方法で表を再編成した場合,再編成後のチャンクは1つになるため,チャンクの構成,状態,コメント,チャンクIDが変わります。

表の再編成手順を次に示します。

手順

  1. APやコマンドが再編成対象の表にアクセスできない状態にする

    次の操作を実行して,APやコマンドが再編成対象の表にアクセスできない状態にしてください。

    • adbchgsrvmodeコマンドに--offlineオプションを指定して,HADBサーバの稼働モードをオフラインモードに変更してください。さらに,HADBサーバマシン上で動作している,対象表を更新するコマンドやジョブ(定期的に実行しているadbimportコマンドやadbmergechunkコマンドなど)を停止してください。

    • HADBサーバにアクセスするAPやコマンドをすべて停止してください。

    上記の操作を両方とも実行することを推奨します。

  2. 表のデータをエクスポートする

    adbexportコマンドの-nオプションに再編成対象の表を指定して,表のデータをエクスポートしてください。

    adbexportコマンドについては,マニュアルHADB コマンドリファレンスadbexport(データのエクスポート)を参照してください。

  3. エクスポートしたデータを作成モードでインポートする

    adbimportコマンドに-dオプションを指定して,手順2.でエクスポートしたデータをインポートしてください。-dオプションを指定すると,作成モードでインポートされます。表の既存データをすべて削除してから,手順2.でエクスポートしたデータがインポートされます。

    adbimportコマンドについては,マニュアルHADB コマンドリファレンスadbimport(データのインポート)を参照してください。

    重要

    adbimportコマンドを実行する際,インポートオプションadb_import_rthd_numには,「11.4.14 マルチチャンク表を再編成する方法(チャンク単位で再編成する場合)」の「(3) インポートオプションの見積もり」に示す計算式を満たす値を指定してください。計算式を満たさない値を指定すると,データの格納効率が悪くなるおそれがあります。

  4. APやコマンドが再編成対象の表にアクセスできる状態にする

    次の方法で,APやコマンドが再編成対象の表にアクセスできる状態にしてください。

    • 手順1.で,HADBサーバの稼働モードをオフラインモードに変更した場合

      adbchgsrvmodeコマンドに--normalオプションを指定して,HADBサーバの稼働モードを通常モードに変更してください。また,HADBサーバマシン上で動作しているコマンドやジョブを停止した場合は,停止していたコマンドやジョブを開始してください。

    • 手順1.で,HADBサーバにアクセスするAPやコマンドを停止した場合

      停止していたAPやコマンドを開始してください。