Oracle University 講師が ORACLE MASTER 取得を目指している方に向けて試験トピックを解説するブログ連載講座。「ORACLE MASTER Silver SQL 2019」資格取得に向けた試験トピックについて解説します。

————————————————-

今回はORACLE MASTER Silver SQLの試験トピック「DML文を使用した表の管理 – データベース・トランザクションの管理 -」に関連する問題をご紹介いたします。ORACLE MASTER Silver SQL(Exam Number: 1Z0-071-JPN)の詳細につきましては以下URLをご参考ください。

Oracle Database SQL Exam Number: 1Z0-071

URL: https://education.oracle.com/ja/oracle-database-sql/pexam_1Z0-071

————————————————-

今回は、データベース・トランザクションの管理に関する問題を解いていきましょう。リレーショナル・データベースにおいてトランザクションという概念は非常に重要です。ORACLE MASTER Silver SQL試験ではOracle Databaseの操作に関連した内容も出てくるので今回の問題で確実におさえておきましょう!

(解説)

それでは解説をしていきます。

まずは「トランザクション」というものが何者なのか?を確認しておきましょう。トランザクションはデータベースの世界でよく出てくる用語ですが、「処理の単位」として説明されているのが多いと思います。

「処理の単位」と用語だけ述べられても理解しづらいと思いますので、まずは身近なものに置き換えて考えてみましょう。例えば、夕飯の支度をするために「スーパーへ買い物」にいくという流れを想像してみてください。

夕食を作るためにこの一連の動作はどれも切り離せない内容になりますよね。

仮に・・「レジで代金を支払う」を抜いてしまったら泥棒として逮捕されますし、最終的に「自宅へ帰宅」をしなかったら夕食を作ることができません。このように、どれか1つでも欠けてしまったら成立しない一連の動作を「処理の単位」と考えるとよいと思います。そしてデータベースの世界ではその一連の動作をトランザクションという概念で管理をすることでデータの整合性を保っているというわけです。

それではもう少しデータベース寄りのお話しにしていきましょう。今度は銀行の例で説明します。

皆さんも銀行で振込み作業を行ったことがあると思いますが、それをイメージしてください。

処理の流れは、Aさんの口座から5万円を取り出し、Bさんの口座に5万円追加(振込)するという形です。

上図の①でAさんの口座からマイナス5万円となっていますが、まだ振込み作業自体は確定していません。そのためBさんの口座にはまだ5万円は追加されていない状況です。

皆さんも実際に自分が銀行ATMで振込み操作をするのを想像してみてください。間違った金額を入力してしまったり、振込み先を間違ってしまった場合など「取り消し」ボタンを押しますよね。まだ処理が確定していない場合はやり直しが出来るわけですが、このような取り消し作業をデータベースの場合にはROLLBACK文(ロールバック)を実行することで可能となります。処理の取り消し、つまり「トランザクションのロールバック」ということになります。

次に②の操作では、処理の「確定」を実行しています。銀行ATMの振込画面の「OK」ボタンを押したという感じでしょうか。このような確定処理はデータベース操作ではCOMMIT文(コミット)を実行して行います。コミットを実行すると処理が確定となりますので、実際にBさんの口座に5万円が移動することになります(③の部分)。コミット後は、処理が確定済みとなりますので、いくらロールバックを実行してもAさんの口座が10万円に戻ることはありません。

このように一連の変更処理をトランザクションという1つのまとまりとして管理し、COMMT(確定)、ROLLBACK(取り消し)操作によってトランザクションを完結させることで、データの変更が中途半端な状態になることを防ぐことができるわけですね。

トランザクションはその特性上、「ACID特性」と言われます。ACIDはAtomicity(原始性)、Consistency(一貫性)、Isolation(独立性)、Durability(持続性)の英語の頭文字をとった用語になります。併せて覚えておきましょう。

さて、このトランザクションをどのように管理するかですが、特にユーザー側が意識する必要はありません。トランザクション自体はDML文(INSERT、UPDATE、DELETEなど)を実行すれば自動的に開始されデータベース側で管理されます。

あとは必要に応じてトランザクションを完結するためにコミットあるいはロールバックの実行を行っていただくわけですが、このコミットやロールバック処理が暗黙的に自動で実行される操作があります。例えば自動コミットが発生する処理としてはDDL文(CREATEなど)やDCL文(GRANTなど)があげられます。

これらの暗黙的処理の注意点として、DML文を実行してトランザクションを開始しているセッションでDDL文やDCL文を実行するとコミットが暗黙的に実行されてDMLの変更処理が確定するという点です。

以下の操作内容を参考にしてください。

暗黙的に実行されるトランザクション処理について以下にまとめておきましょう。

ここまで確認ができましたら、あとは選択肢を見ながら解説をしていきましょう。

選択肢1はDDL文であるCREATE TABLEを実行すると書いてあります。暗黙的にCOMMITが実行されるので正しい内容になります。

選択肢2は誤りですね。すでに1000件の更新処理を実行していると問題文に記載がありますのでトランザクションは開始されています。同セッションで他のDML文を実行しても新たに別のトランザクションとして開始はされません。

選択肢3はSQL*Plusのセッションを正常終了するとあります。その場合は暗黙的にCOMMIT処理が実行されますのでこの選択肢の内容は誤りです。

選択肢4の内容は誤りです。更新データが確定していませんので、同ユーザーであっても他セッションから未確定のデータを確認することはできません。

選択肢5と選択肢6については補足で説明をしておきましょう。Oracleデータベースを停止する際に使用するshutdownコマンドですが、指定するオプションによってデータベース内で動作しているトランザクションに対する扱いが異なります。表にまとめておきますので参考にしてください。

※shutdown はshutdown normalと同等です。

選択肢5はshutdown transactionalの話になりますね。transactionalを指定した場合、進行中のトランザクション処理があるとshutdown処理は待ちになります。選択肢の内容は「エラーになる」と書いてあるため間違った内容になります。

選択肢6はshutdown immediateの話になります。こちらのオプションはデータベースの即時停止となりますが、進行中のトランザクションはロールバック処理が自動で実行されるので正常な状態での停止となります。選択肢の内容は正しいですね。

以上の結果から、正解の選択肢は1と6になります。

今回はトランザクションに関する問題を扱ってきました。リレーショナル・データベースにおいてトランザクションという概念はデータの整合性を保つためにも非常に重要な内容になりますのでしっかりと学習しておきましょう。

では今回の講義は終了します。

お疲れ様でした。

————————————————-

ORACLE MASTER Silver SQL 2019 のご紹介

ORACLE MASTER Silver SQL 2019 試験記事トピック一覧

————————————————-

その他の ORACLE MASTER 試験トピック解説講座シリーズ:

【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧

————————————————-