今回は、Silverの「開発/SQL - トランザクション概念」からの出題です。
ユーザBのクライアントが異常な状態になっているので、強制終了させる。
ユーザBは、通常のUPDATEの代わりにUPDATE FORCEを使うべきだった。
ユーザAが COMMIT; を実行すれば、自動的にユーザBのUPDATEが実行される。
ユーザAが ROLLBACK; を実行すれば、自動的にユーザBのUPDATEが実行される。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2014年3月20日
データベースのデータを更新するときは、「更新対象データの行ロックを取得→対象データを更新→COMMITを実行することで更新を確定し、ロックを解放」というのが基本的な流れになります。
UPDATE文を実行した時は、行ロックが自動的、暗黙的に取得されます。また、トランザクション機能を利用していない場合、PostgreSQLではUPDATE文の実行後に、やはり自動的、暗黙的にCOMMITが実行されます。
COMMITの代わりにROLLBACKを実行すると、更新が取り消され、データが元の状態に戻り、さらにロックが解放されます。
例題の場合、ユーザBのUPDATE文は、ユーザAがロックを解放するまで、ロック待ち状態になりますが、これ自体は、特に異常な状態になっているわけではありません。また、Cのような構文はありません。
従って、正解はDとEです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.