11.18.4 システム表の再編成と排他制御
ここでは,adbreorgsystemdataコマンドと排他制御の関係,およびadbreorgsystemdataコマンドの待ち状態について説明します。
(1) adbreorgsystemdataコマンドと排他制御の関係
adbreorgsystemdataコマンドを実行すると,HADBサーバは「2.10.5 確保される排他資源と排他制御モード」に従って,排他資源を確保します。
adbreorgsystemdataコマンドの実行中は,排他資源の「システム表用DBエリア」を占有モード(EX)で確保します。そのため,adbimportコマンドやadbmergechunkコマンドなどは実行できません。
また,次に示す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.18.4 システム表の再編成と排他制御」の「(2) adbreorgsystemdataコマンドの待ち状態を解消する方法」を参照してください。
(2) adbreorgsystemdataコマンドの待ち状態を解消する方法
待ち状態の原因となっているSQL文やコマンドの終了を待たないで,adbreorgsystemdataコマンドの待ち状態を解消したい場合は,対象のSQL文やコマンドを終了する必要があります。
adbreorgsystemdataコマンドが待ち状態の原因となっているSQL文やコマンドを終了したい場合は,次に示す手順を実施してください。
手順
-
adbls -d lockコマンドを実行する
次の条件に該当する項目「CID」を確認してください。
-
項目「RESOURCEID」に,adbreorgsystemdataコマンドの処理対象表の表IDが出力されている行
adbreorgsystemdataコマンドの処理対象表であるシステム表(実表)の表IDについては,「付録C.1 システム表の概要」の「(1) システム表の一覧」を参照してください。
-
-
adbls -d cnctコマンドを実行する
次のどちらかの条件に該当する項目「CID」を確認してください。
-
項目「CLIENT_TYPE」にcommandが出力されている行,かつ項目「CONNECT_TIME」に出力されている時刻が,前回実施したadbreorgsystemdataコマンドで出力されたKFAA80256-Iメッセージの出力時刻よりも前である行
-
項目「CLIENT_TYPE」にcommandが出力されていない行,かつ項目「SQL_ELAPSED_TIME」に出力されているマイクロ秒から求めたSQL文の経過時間が,前回実施したadbreorgsystemdataコマンドで出力されたKFAA80256-Iメッセージの出力時刻よりも前である行
-
-
adbcancelコマンドを実行する
手順1.および手順2.の両方で確認した項目「CID」が,adbreorgsystemdataコマンドが待ち状態の原因となっているSQL文またはコマンドのコネクションIDです。adbcancelコマンドにコネクションIDを指定して実行すると,adbreorgsystemdataコマンドの待ち状態が解消されます。
各コマンドについては,マニュアルHADB コマンドリファレンスを参照してください。