Hitachi

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


11.20.4 ディクショナリ表およびシステム表の再編成と排他制御

ここでは,adbreorgsystemdataコマンドと排他制御の関係,およびadbreorgsystemdataコマンドの待ち状態について説明します。

〈この項の構成〉

(1) adbreorgsystemdataコマンドと排他制御の関係

adbreorgsystemdataコマンドを実行すると,HADBサーバは「2.10.5 確保される排他資源と排他制御モード」に従って,排他資源を確保します。

ただし,adbreorgsystemdataコマンドを,ディクショナリ表(実表)またはシステム表(実表)のどちらの表に対して実行するかによって確保される排他資源が異なります。

また,次に示すSQL文やコマンドを実行している場合,システム表(実表)に対してadbreorgsystemdataコマンドは待ち状態になります(KFAA80257-Iメッセージが出力されたあとで,再編成の処理が中断します)。実行しているSQL文やコマンドが終了したあとで,システム表(実表)に対するadbreorgsystemdataコマンドの処理が再開されます。

システム表(実表)に対するadbreorgsystemdataコマンドを待ち状態にするSQL文とコマンド
  • 検索系SQL(システム表(実表),またはアーカイブマルチチャンク表に実行する場合)

  • 更新系SQL(アーカイブマルチチャンク表に実行する場合)

  • adbexportコマンド(システム表(実表),またはアーカイブマルチチャンク表に実行する場合)

  • --shared-lockオプションを指定したadbdbstatusコマンド(システム表用DBエリアに実行する場合)

  • --shared-lockオプションを指定したadbdbstatusコマンド(adbreorgsystemdataコマンドの処理対象であるシステム表(実表)に実行する場合)

  • --shared-lockオプションを指定したadbdbstatusコマンド(adbreorgsystemdataコマンドの処理対象であるシステム表(実表)のインデクスに実行する場合)

注※

adbreorgsystemdataコマンドを,システム表(実表)のSTATUS_CHUNKS表に実行するときが該当します。STATUS_CHUNKS表以外のシステム表(実表)に対してadbreorgsystemdataコマンドを実行するときは,アーカイブマルチチャンク表に対象のSQL文とコマンドを実行していても,adbreorgsystemdataコマンドは待ち状態にはなりません。

SQL文やコマンドの終了を待たないで,システム表(実表)に対するadbreorgsystemdataコマンドの待ち状態を解消したい場合は,「11.20.4 ディクショナリ表およびシステム表の再編成と排他制御」の「(2) システム表に対するadbreorgsystemdataコマンドの待ち状態を解消する方法」を参照してください。

(2) システム表に対するadbreorgsystemdataコマンドの待ち状態を解消する方法

待ち状態の原因となっているSQL文やコマンドの終了を待たないで,システム表(実表)に対するadbreorgsystemdataコマンドの待ち状態を解消したい場合は,対象のSQL文やコマンドを終了する必要があります。

システム表(実表)に対するadbreorgsystemdataコマンドが待ち状態の原因となっているSQL文やコマンドを終了したい場合は,次に示す手順を実施してください。

手順

  1. adbls -d lockコマンドを実行する

    次の条件に該当する項目「CID」を確認してください。

    • 項目「RESOURCEID」に,adbreorgsystemdataコマンドの処理対象表の表IDが出力されている行

    adbreorgsystemdataコマンドの処理対象表であるシステム表(実表)の表IDについては,「付録C.1 システム表の概要」の「(1) システム表の一覧」を参照してください。

  2. adbls -d cnctコマンドを実行する

    次のどちらかの条件に該当する項目「CID」を確認してください。

    • 項目「CLIENT_TYPE」にcommandが出力されている行,かつ項目「CONNECT_TIME」に出力されている時刻が,前回実施したシステム表(実表)に対するadbreorgsystemdataコマンドで出力されたKFAA80256-Iメッセージの出力時刻よりも前である行

    • 項目「CLIENT_TYPE」にcommandが出力されていない行,かつ項目「SQL_ELAPSED_TIME」に出力されているマイクロ秒から求めたSQL文の経過時間が,前回実施したシステム表(実表)に対するadbreorgsystemdataコマンドで出力されたKFAA80256-Iメッセージの出力時刻よりも前である行

  3. adbcancelコマンドを実行する

    手順1.および手順2.の両方で確認した項目「CID」が,システム表(実表)に対するadbreorgsystemdataコマンドが待ち状態の原因となっているSQL文またはコマンドのコネクションIDです。adbcancelコマンドにコネクションIDを指定して実行すると,システム表(実表)に対するadbreorgsystemdataコマンドの待ち状態が解消されます。

各コマンドについては,マニュアルHADB コマンドリファレンスを参照してください。