PREPARATION
受験対策

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

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

例題

3.19

2つのクライアント(AとBとします)が同じテーブルTを更新するためにロックを取得しようとしています。
以下の記述から正しいものを2つ選択しなさい。

  1. クライアントAは行Xを更新するために行ロックを取得した。
    クライアントBも同じ行Xを更新したいが、行ロックを取得できないのでクライアントAの処理が終わるまで待たされる。
  2. クライアントAは行Xを更新するために行ロックを取得した。
    クライアントBはこれと異なる行Yを更新したいが、YがたまたまXと同じデータブロックにあったので、行ロックは取得できず、クライアントAの処理が終わるまで待たされた。

  3. クライアントAはテーブルTの50%の行を更新するために、それらの行のロックを取得したところ、ロックエスカレーションが発生して自動的にテーブルロックに移行した。
    このためクライアントBは同じテーブルTのどの行も更新できなくなった。
  4. クライアントAはテーブルTのすべての行を独占的に更新するため
         LOCK TABLE T;
    により、ACCESS EXCLUSIVEモードでのロックを取得した。
    このロックが解放されるまで、クライアントBはテーブルTを更新できないが、SELECTだけなら実行できる。

  5. クライアントAはテーブルTの行Xを更新するためにロックを取得した。
    クライアントBは同じテーブルTのテーブルロックを取得するために
         LOCK TABLE T;
    を実行したが、これはAが取得した行ロックが解放されるまで待たされる。

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2012年10月11日

解答と解説

データベースでは、複数のクライアントによるデータの同時更新を制御するためロックの機能があります。更新に先立ち、データのロックを取得しますが、ロックが取得できないときはロックが取得できるまで待つことになります(コマンドの種類によってはロック解放を待たずにエラーとして終了します)。
通常のUPDATE/DELETE/INSERTによる更新では、行単位でデータがロックされます。データベースの種類によっては、ロックの最小単位がページ単位だったり、あるいは多数の行のロックを取得すると、ロックエスカレーションを起こしてページロックやテーブルロックに移行してしまうものもありますが、PostgreSQLの行ロックには行数制限などはありません。つまり、他人がロックしているのと同じ行は更新できませんが別の行であれば更新できます。
行ロックとは別に、テーブルロックの機能もあります。テーブルロックには様々なモードがあり、モードの種類によって、他の種類のロックと共存できたりできなかったりしますが、デフォルトのACCESS EXCLUSIVEモードでのロックでは、他のクライアントからは参照のみのSELECTも含め、一切、アクセスできなくなります。逆に、他のクライアントが1行でもデータをロックしていると、ACCESS EXCLUSIVEモードでのテーブルロックは取得できません。

従って、正解は A と E です。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors