助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26817
問題を開く
次のSQL文を実行するとどうなりますか。
ただし、現在、コミットしていないトランザクションはないものとします。
DELETE FROM employees;
ただし、現在、コミットしていないトランザクションはないものとします。
DELETE FROM employees;
正解
表のデータが削除されるが、ロールバックすることができる
解説
DELETE文は表のデータを削除しますが、表の構造は削除しません。
また、DELETE文はDML文ですので、COMMIT文で操作が確定されるまではROLLBACK文で操作の取消しが可能です。
以上より、
・表のデータが削除されるが、ロールバックすることができる
が正解となります。
設問の一連の処理は次の通りです。

また、DELETE文はDML文ですので、COMMIT文で操作が確定されるまではROLLBACK文で操作の取消しが可能です。
以上より、
・表のデータが削除されるが、ロールバックすることができる
が正解となります。
設問の一連の処理は次の通りです。

SQLを表示
COMMIT;
DELETE FROM prod;
SELECT * FROM prod;
ROLLBACK;
SELECT * FROM prod;
DELETE FROM prod;
SELECT * FROM prod;
ROLLBACK;
SELECT * FROM prod;
参考
トランザクションとは、Oracle Database接続後、または直前のトランザクションの終了後、最初のデータを操作するSQL文(通常のSELECT文は除く)実行時に開始され、一連の操作を確定または取消しするまでの処理のまとまりのことです。
トランザクションは以下の要素で構成されます。

DML文は1つ以上のDML文のまとまりで1つのトランザクションになるのに対し、DDL文、DCL文は1つの文で1つのトランザクションになります。
[トランザクションの開始と終了]
トランザクションは、Oracle Database接続後、または直前のトランザクションの終了後、最初のデータを操作するSQL文(通常のSELECT文は除く)実行時に開始され、下記のいずれかによって終了します。
・COMMIT文またはROLLBACK文の実行
・DDL文の実行
・DCL文の実行
・SQL DeveloperやSQL *Plusの終了
・システム障害の発生

また、トランザクションの終了後の動作は次のようになります。
・トランザクション内のすべての処理が確定または破棄され、取消すことはできない
・データの追加や変更処理がトランザクションの終了によって確定された場合、すべてのユーザーが追加/変更後のデータを参照できる
・トランザクション内のすべてのセーブポイントが破棄される
・排他ロックが解除される
なお、トランザクションを終了する時に実行するCOMMIT文やROLLBACK文は、トランザクション制御文と呼ばれてます。トランザクション制御文には次のものがあります。

トランザクションは以下の要素で構成されます。

DML文は1つ以上のDML文のまとまりで1つのトランザクションになるのに対し、DDL文、DCL文は1つの文で1つのトランザクションになります。
[トランザクションの開始と終了]
トランザクションは、Oracle Database接続後、または直前のトランザクションの終了後、最初のデータを操作するSQL文(通常のSELECT文は除く)実行時に開始され、下記のいずれかによって終了します。
・COMMIT文またはROLLBACK文の実行
・DDL文の実行
・DCL文の実行
・SQL DeveloperやSQL *Plusの終了
・システム障害の発生

また、トランザクションの終了後の動作は次のようになります。
・トランザクション内のすべての処理が確定または破棄され、取消すことはできない
・データの追加や変更処理がトランザクションの終了によって確定された場合、すべてのユーザーが追加/変更後のデータを参照できる
・トランザクション内のすべてのセーブポイントが破棄される
・排他ロックが解除される
なお、トランザクションを終了する時に実行するCOMMIT文やROLLBACK文は、トランザクション制御文と呼ばれてます。トランザクション制御文には次のものがあります。

コミットしていないトランザクションはないものとします。と問題文にかかれてますので
投稿日 2025/03/20
お世話になっております。私は現在2週間後に控えたOracle Master Silver DBA試験と来月末受験を予定しておりますSilver SQL試験に向けてこちらを利用させて勉強させて頂いておりますが、こちらの問題の正解についてどうしても納得がいかないので投稿させていただきます。
問題文に「現在、コミットしていないトランザクションはないものとします。」との記載がございますのでそうしますとロールバックはDELETEコマンドを発行した際できないと考えて私は「表のデータが削除され、ロールバックすることはできない」にチェックを入れたのですが、「表のデータが削除されるが、ロールバックすることができる」が正解とのことです。
どなたかご教授いただける方いらっしゃいましたら宜しくお願い致します。
r
rink_rew
2025/03/21 11:13
「現在、コミットしていないトランザクションがない」は、その後に示されているDELETE文が、トランザクションの途中で実行される訳ではないという前提を示しているだけです。SQL Plusなどで新規に接続した直後をイメージすると良いと思います。
その上で、解説にもある通りDELETE文はDMLであり、DELETE文の実行で新しいトランザクションが開始され、コミットされるまではROLLBACKが可能です。
コメント
この投稿に対して返信しませんか?