10.2.2 データベースを再編成する場合

データベースを再編成する方法について説明します。

<この項の構成>
(1) ajsembdbrorgコマンドでデータベースを再編成する
(2) スクリプトを使用してデータベースを再編成する

(1) ajsembdbrorgコマンドでデータベースを再編成する

データベースを手動で再編成する手順を次に示します。

なお,各手順に記載したコマンドの詳細については,マニュアル「JP1/Automatic Job Management System 3 コマンドリファレンス1 2. コマンド ajsembdbrorg」およびマニュアル「JP1/Automatic Job Management System 3 コマンドリファレンス2 2. セットアップコマンド」を参照してください。

  1. JP1/AJS3のスケジューラーサービスを終了する。
    jajs_spmd_stopコマンドまたはajsstopコマンドを使って,該当するJP1/AJS3のスケジューラーサービスを終了します。再編成対象の組み込みDBで情報が管理されているスケジューラーサービスをすべて終了してください。スケジューラーサービスと組み込みDBの関連づけについては,ajsembdbidlistコマンドで確認できます。
    コマンドの形式(jajs_spmd_stopコマンドの場合)
    jajs_spmd_stop [-h 論理ホスト名] -n jajs_schd -F スケジューラーサービス名
    コマンドの使用例
    jajs_spmd_stop -n jajs_schd -F AJSROOT2
    コマンドの形式(ajsstopコマンドの場合)
    ajsstop -F スケジューラーサービス名
    コマンドの使用例
    ajsstop -F AJSROOT2
  2. JP1/AJS3のエージェント管理を終了する。
    jajs_hstd_stopコマンドを使って,エージェント管理を終了します。
    コマンドの形式
    ・Windowsの場合
     jajs_hstd_stop [-h 論理ホスト名] -n agentm
    ・UNIXの場合
     jajs_hstd_stop [-h 論理ホスト名] -n ajsagtmd
    コマンドの使用例
    ・Windowsの場合
     jajs_hstd_stop -n agentm
    ・UNIXの場合
     jajs_hstd_stop -n ajsagtmd
  3. 接続しているJP1/AJS3 - Viewおよびコマンドをすべて停止する。
    JP1/AJS3 - Viewおよびスケジューラーのコマンドが動作していないことを確認してください。JP1/AJS3 Console Viewからの接続も切断してください。
  4. ajsembdbreclaimコマンドを使用して,空きセグメントの回収を行う。
    空きセグメントが少ない状態で再編成を実施すると,作業領域が不足して,再編成に失敗する場合があります。これを避けるため,事前に空きセグメントを回収することを推奨します。
    コマンドの使用例
    • Windowsの場合
      JP1/AJS3 - Managerのインストール先フォルダ¥tools¥ajsembdbreclaim -m manager
    • UNIXの場合
      /opt/jp1ajs2/tools/ajsembdbreclaim -m manager
  5. ajsembdbrorgコマンドを使ってデータベースを再編成する。
    コマンドの使用例
    • Windowsの場合
      ajsembdbrorg -k unld -F AJSROOT2 -d C:¥tmp
      ajsembdbrorg -k reld -F AJSROOT2 -d C:¥tmp
    • UNIXの場合
      ajsembdbrorg -k unld -F AJSROOT2 -d /tmp
      ajsembdbrorg -k reld -F AJSROOT2 -d /tmp
    エージェント管理データベースを再編成する場合
    • Windowsの場合
      ajsembdbrorg -k unld -agent -d C:¥tmp
      ajsembdbrorg -k reld -agent -d C:¥tmp
    • UNIXの場合
      ajsembdbrorg -k unld -agent -d /tmp
      ajsembdbrorg -k reld -agent -d /tmp
    -dオプションに指定するディレクトリに必要な容量を確保してください。
    -k unldで取得したデータを使用して,-k reldを実行するため,-dで指定するディレクトリは,-k unld,reldで同じディレクトリを指定してください。
    -k unldでエラーが発生した場合,作成されたファイルを使用して-k reldを実行しないでください。データベースの内容が不正になるおそれがあります。
  6. JP1/AJS3のエージェント管理を起動する。
    jajs_hstdコマンドを使って,エージェント管理を起動します。
    コマンドの形式
    ・Windowsの場合
     jajs_hstd [-h 論理ホスト名] -n agentm
    ・UNIXの場合
     jajs_hstd [-h 論理ホスト名] -n ajsagtmd
    コマンドの使用例
    ・Windowsの場合
     jajs_hstd -n agentm
    ・UNIXの場合
     jajs_hstd -n ajsagtmd
  7. JP1/AJS3のスケジューラーサービスを起動する。
    jajs_spmdコマンドまたはajsstartコマンドを使って,該当するJP1/AJS3のスケジューラーサービスを起動します。また,関連するサービスも起動してください。
    コマンドの形式(jajs_spmdコマンドの場合)
    jajs_spmd [-h 論理ホスト名] -n jajs_schd -F スケジューラーサービス名
    コマンドの使用例
    jajs_spmd -n jajs_schd -F AJSROOT2
    コマンドの形式(ajsstartコマンドの場合)
    ajsstart -F スケジューラーサービス名
    コマンドの使用例
    ajsstart -F AJSROOT2

(2) スクリプトを使用してデータベースを再編成する

組み込みDBをスクリプトで一括してデータベースを再編成する手順を次に示します。ここでは手順の説明に続いて,使用例を示します。なお,各手順に記載したコマンドの詳細については,マニュアル「JP1/Automatic Job Management System 3 コマンドリファレンス1 2. コマンド」およびマニュアル「JP1/Automatic Job Management System 3 コマンドリファレンス2 2. セットアップコマンド」を参照してください。

補足事項
処理内容としては,「(1) ajsembdbrorgコマンドでデータベースを再編成する」で説明している再編成と同等であるため,(1)の方法で作業をすることを推奨します。

(a) 再編成の手順

再編成の手順は,次のとおりです。

  1. 組み込みDBのコマンドを実行するために必要な環境変数を設定する。
    設定する環境変数を次の表に示します。

    表10-1 設定が必要な環境変数

    設定する環境変数説明
    PDDIR組み込みDB運用ディレクトリ名を指定します。
    PDCONFPATHWindowsの場合,組み込みDB運用ディレクトリ¥confを,UNIXの場合,組み込みDB運用ディレクトリ/confを指定します。組み込みDBの定義ファイルを格納するディレクトリです。
    PDUXPLDIRWindowsの場合だけ,組み込みDB作業ディレクトリ名を指定します。
    PDUSER組み込みDB管理者(スケジューラーデータベースのテーブルの所有者)のユーザーおよびパスワード(ユーザー/パスワード)を指定します。
    (例)
    PDUSER="root"/"root"
    PDLANGANYを指定します。
    JP1_HOSTNAMEクラスタで運用している場合に,論理ホスト名を指定します。
    PATHWindowsの場合,組み込みDB運用ディレクトリ¥binを,UNIXの場合,組み込みDB運用ディレクトリ/binを指定します。組み込みDBのコマンドを格納するディレクトリです。
    SHLIB_PATHUNIXの場合だけ,組み込みDB運用ディレクトリ/libを指定します。
    注※
    Solaris,Linuxの場合は,LD_LIBRARY_PATHに,AIXの場合は,LIBPATHになります。
    Windowsの場合の環境変数設定例

    x:¥> set PDDIR=c:¥Program Files¥HITACHI¥JP1AJS2¥embdb¥_JF0
    x:¥> set PDCONFPATH=%PDDIR%¥conf
    x:¥> set PDUXPLDIR=%PDDIR%¥uxpldir

    x:¥> set PDUSER="root"/"root"
    x:¥> set PDLANG=ANY
    x:¥> set JP1_HOSTNAME=lhost1
    x:¥> set PATH=%PATH%;%PDDIR%¥bin

    UNIX(HP-UX)の場合の環境変数設定例

    # PDDIR=/opt/jp1ajs2/embdb/_JF0
    # PDCONFPATH=$PDDIR/conf
    # PDUSER='"root"/"root"'
    # PDLANG=ANY
    # SHLIB_PATH=$PDDIR/lib
    # PATH=$PATH:$PDDIR/bin

    # export PDDIR PDCONFPATH PDUSER SHLIB_PATH PATH

  2. JP1/AJS3のスケジューラーサービスを終了する。
    jajs_spmd_stopコマンドまたはajsstopコマンドを使って,該当するJP1/AJS3のスケジューラーサービスを終了します。再編成するRDエリアを使用しているすべてのスケジューラーサービスを終了してください。
    コマンドの形式(jajs_spmd_stopコマンドの場合)
    jajs_spmd_stop [-h 論理ホスト名] -n jajs_schd -F スケジューラーサービス名
    コマンドの使用例
    jajs_spmd_stop -n jajs_schd -F AJSROOT2
    コマンドの形式(ajsstopコマンドの場合)
    ajsstop -F スケジューラーサービス名
    コマンドの使用例
    ajsstop -F AJSROOT2
  3. JP1/AJS3のエージェント管理を終了する。
    jajs_hstd_stopコマンドを使って,エージェント管理を終了します。
    コマンドの形式
    ・Windowsの場合
     jajs_hstd_stop [-h 論理ホスト名] -n agentm
    ・UNIXの場合
     jajs_hstd_stop [-h 論理ホスト名] -n ajsagtmd
    コマンドの使用例
    ・Windowsの場合
     jajs_hstd_stop -n agentm
    ・UNIXの場合
     jajs_hstd_stop -n ajsagtmd
  4. 接続しているJP1/AJS3 - Viewおよびコマンドをすべて停止する。
    JP1/AJS3 - Viewおよびスケジューラーのコマンドが動作していないことを確認してください。JP1/AJS3 Console Viewからの接続も切断してください。
  5. ajsembdbreclaimコマンドを使用して,空きセグメントの回収を行う。
    空きセグメントが少ない状態で再編成を実施すると,作業領域が不足して,再編成に失敗する場合があります。これを避けるため,事前に空きセグメントを回収することを推奨します。
    コマンドの使用例
    • Windowsの場合
      JP1/AJS3 - Managerのインストール先フォルダ¥tools¥ajsembdbreclaim -m manager
    • UNIXの場合
      /opt/jp1ajs2/tools/ajsembdbreclaim -m manager
  6. 次に示すスクリプトを実行する。
    再編成スクリプトはサンプルが提供されています。作業ディレクトリにコピーして使用してください。
    Windowsの場合
    JP1/AJS3のインストール先フォルダ¥tools¥ajsembdbcond-sample.bat
    UNIXの場合
    /opt/jp1ajs2/tools/ajsembdbcond-sample
    ajsembdbcondスクリプトについては,「(b) 再編成スクリプトの形式」を参照してください。
    スクリプトの使用例
    ajsembdbcond
    (サンプルスクリプトを,ajsembdbcondに名称変更した場合)
  7. JP1/AJS3のエージェント管理を起動する。
    jajs_hstdコマンドを使って,エージェント管理を起動します。
    コマンドの形式
    ・Windowsの場合
     jajs_hstd [-h 論理ホスト名] -n agentm
    ・UNIXの場合
     jajs_hstd [-h 論理ホスト名] -n ajsagtmd
    コマンドの使用例
    ・Windowsの場合
     jajs_hstd -n agentm
    ・UNIXの場合
     jajs_hstd -n ajsagtmd
  8. JP1/AJS3のスケジューラーサービスを起動する。
    jajs_spmdコマンドまたはajsstartコマンドを使って,該当するJP1/AJS3のスケジューラーサービスを起動します。
    コマンドの形式(jajs_spmdコマンドの場合)
    jajs_spmd [-h 論理ホスト名] -n jajs_schd -F スケジューラーサービス名
    コマンドの使用例
    jajs_spmd -n jajs_schd -F AJSROOT2
    コマンドの形式(ajsstartコマンドの場合)
    ajsstart -F スケジューラーサービス名
    コマンドの使用例
    ajsstart -F AJSROOT2

(b) 再編成スクリプトの形式

再編成スクリプトを使うと,組み込みDBのテーブルおよびインデクスを再編成できます。

形式
ajsembdbcond-sample[-u ユーザー名 -p パスワード
引数
-u ユーザー名
テーブルの再編成を実行するユーザー名(テーブル所有ユーザー)を指定します。ユーザー名を省略した場合,スクリプト内部で指定されているユーザー名で再編成されます。
-p パスワード
テーブルの再編成を実行するユーザーのパスワードを指定します。パスワードを省略した場合,スクリプト内部で指定されているユーザーのパスワードで再編成されます。
補足事項
ユーザー名やパスワードを指定する場合は,次のように指定してください。
Windowsの場合:"root"
UNIXの場合:¥"root¥"
" "で囲むことで,大文字,小文字が区別されます。

(c) 再編成スクリプトのカスタマイズ

再編成スクリプトのカスタマイズについて説明します。スクリプトファイルは,元のスクリプトファイルを作業ディレクトリにコピーしたあと,編集してから使用してください。構築された組み込みDB環境ごとに,スクリプトファイルを用意してください。カスタマイズできる項目を次に示します。

CUSTOM_PDDIR=組み込みDB運用ディレクトリ
組み込みDB運用ディレクトリ名を指定します。
環境変数PDDIRが設定済みの場合は,環境変数PDDIRでの設定を優先します。
また,環境変数PDDIRが設定されていない場合で,スクリプトファイル内でCUSTOM_PDDIRを指定しないときは,テーブルの再編成が実行されません。
CUSTOM_PDCONFPATH=組み込みDBシステム定義ファイル格納ディレクトリ
組み込みDBシステム定義ファイル格納ディレクトリ名を指定します。
環境変数PDCONFPATHが設定済みの場合は,環境変数PDCONFPATHの設定を優先します。
環境変数PDCONFPATHが設定されていない場合で,スクリプトファイル内でCUSTOM_PDCONFPATHを指定しないときは,テーブルの再編成が実行されません。
CUSTOM_PDUXPLDIR=組み込みDB作業ディレクトリ
Windowsの場合だけ指定が必要です。組み込みDB作業ディレクトリ名を指定します。
環境変数PDUXPLDIRが設定済みの場合は,環境変数PDUXPLDIRの設定が優先されます。
また,環境変数PDUXPLDIRが設定されていない場合で,スクリプトファイル内でCUSTOM_PDUXPLDIRを指定しないときは,テーブルの再編成が実行されません。
CUSTOM_EMBDB_USER=テーブル所有者名
再編成コマンドを実行するユーザー名を指定します。
テーブルの所有者ユーザーを指定してください。
CUSTOM_EMBDB_USERにユーザー名を指定していても,スクリプトの引数でユーザー名を指定した場合は,スクリプトの引数の値が優先されます。
CUSTOM_EMBDB_PASS=テーブル所有者名のパスワード
再編成コマンドを実行するユーザーのパスワードを指定します。
CUSTOM_TABLE_LIST=テーブル名
再編成するテーブルのリストをスペースの区切りで指定します。
指定しない場合は,テーブルの再編成が実行されません。
CUSTOM_TABLE_RDAREA=テーブル格納RDエリア
再編成するテーブルを格納しているRDエリアを指定します。
指定しない場合は,テーブルの再編成が実行されません。
CUSTOM_INDEX_RDAREA=インデクス格納RDエリア
再編成するテーブルのインデクスを格納しているRDエリアを指定します。
指定しない場合は,テーブルの再編成が実行されません。
CUSTOM_TEMP_DIR=一時ファイル格納ディレクトリ
再編成コマンドの制御ファイルやデータベースからアンロードしたデータファイルなどを格納するフォルダ名をフルパスで指定します。
指定しない場合,Windowsは「C:¥TEMP」が,UNIXは「/tmp」が仮定されます。
複数の組み込みDB環境を構築している場合や,複数のスケジューラーサービスを構築している場合は,スクリプトの同時実行などによるデータ消失を避けるために,これらの間で使用する一時ファイル格納ディレクトリが重複しないように指定してください。
CUSTOM_LOG_FILE=ログ出力ファイル
スクリプトの実行結果のログを出力するファイルをフルパスで指定します。ログの出力先ファイル名を指定した場合,ログファイルは無限に増えるファイルとなるので,必要に応じて削除してください。
指定しない場合は,標準出力にログが出力されます。
補足事項
  • スクリプトを実行できるユーザー
    スクリプト内で使用するコマンドは,組み込みDBシステム管理者だけが実行できます。OS上の組み込みDBシステム管理者ユーザーでスクリプトを実行してください。
  • ユーザー名やパスワードを指定する場合は,次のように指定してください。
    Windowsの場合:"root"
    UNIXの場合:¥"root¥"
    " "で囲むことで,大文字,小文字が区別されます。
  • エラー発生時の対処方法
    テーブルの再編成中,アンロードしたデータのリロード処理に失敗すると,データベース上のテーブルやインデクスが空になっている場合があります。その場合には,アンロードデータから手動でリロード処理を実行する必要があります。
    また,再編成中にエラーが発生すると,RDエリアは閉塞されたままになるので,回復処理を実行したあと,閉塞を解除してください。
    リロード中にエラーが発生した場合のテーブルを次の表に示します。

    表10-2 エラー発生時(リロード中)のテーブルの状態と回復方法

    エラー発生直前のメッセージRDエリア内のテーブルの状態回復方法
    なし再編成実行前の状態該当テーブルの再編成を再実行
    KFPL00721-Iテーブル削除済み該当テーブルのリロードを再実行
    KFPL00712-I
    KFPL00732-I
    テーブル作成未完該当テーブルのリロードを再実行
    KFPL00714-I
    KFPL00734-I
    テーブル作成終了該当テーブルのリロードを再実行
    KFPL00715-Iインデクス作成未完該当テーブルのリロードを再実行
    KFPL00716-Iインデクス作成終了不要

    (例)リロードを再実行する場合
    データのリロードに失敗した場合,スクリプトの次のパラメーターに指定したフォルダにアンロードしたデータファイルが格納されています。
    CUSTOM_TEMP_DIR
    指定していない場合,Windowsは「C:¥TEMP」が,UNIXは「/tmp」が仮定されます。
    このフォルダには次のファイルが作成されます。
    rorg_ctrl:再編成に必要なコントロールファイル
    08-10-01以前のバージョンの場合
    unldfile:表データ
    08-10-02以降のバージョンの場合
    unldfile_テーブル名:表データ
    このフォルダに作成されたファイルを使用してリロードを実行してください。
    UNITテーブルのリロード時に失敗した場合,再編成の再実行コマンドは次のとおりになります。
    コマンドの実行例
    Windowsの場合:pdrorg -k reld -t AJSUNIT C:¥tmp¥rorg_ctrl
    UNIXの場合:pdrorg -k reld -t AJSUNIT /tmp/rorg_ctrl

    表10-2を参考にして,どの表でのリロードが失敗しているかを特定してください。