PREPARATION
受験対策

Silverの例題解説「開発/SQL - トランザクション概念」

今回は、Silverの「開発/SQL - トランザクション概念」からの出題です。

例題

3.39

あるユーザAが、次のトランザクションでテーブルtestを更新中である。
START TRANSACTION;
UPDATE test SET val = 123 WHERE id = 1;

別のユーザBが同じテーブルを更新しようとして
UPDATE test SET val = 456 WHERE id = 1;
を実行したところ、応答が返ってこなかった。
この状態に関する正しい説明を2つ選びなさい。

  1. データベースが異常な状態になっているので、再起動して復旧させる。
  2. ユーザBのクライアントが異常な状態になっているので、強制終了させる。

  3. ユーザBは、通常のUPDATEの代わりにUPDATE FORCEを使うべきだった。

  4. ユーザAが COMMIT; を実行すれば、自動的にユーザBのUPDATEが実行される。

  5. ユーザ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事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

LPI-Japan
Platinum Sponsors

関連資格