Oracle OBにおけるトランザクション操作

 2019.06.04  株式会社システムインテグレータ

Oracle OBにおけるトランザクション操作

SI Object Browser for Oracle(以下、OB)はOracle Databaseに対してトランザクション制御文を発行することができます。ここではトランザクション制御文のうち、変更を確定するCOMMITと変更を取り消すROLLBACKを取り上げます。

OBでトランザクション制御文を発行する方法としては以下の2つの方法があります。

  1. SQL実行画面でCOMMIT文、ROLLBACK文を実行する
  2. ツールバーのCOMMIT、ROLLBACKボタン(図1)を用いる

1の方法と2の方法はSI Object Browserにおいて等価ですが、より手軽なのは2の方法でしょう。
またOBには、通常は明示的に発行しなければならないCOMMITを自動で発行する機能があります。これについては後述します。

Oracle OBにおけるトランザクション操作 1

図1 COMMITボタン(円)とROLLBACKボタン(矢印)

COMMITとROLLBACKの対象

COMMITとROLLBACKは、主に下記のSQL文によるテーブルへの変更を確定、あるいは取り消すために使用します。

  • INSERT (列の挿入)
  • UPDATE (列の更新)
  • DELETE (列の削除)

上記のSQL文はDML (Data Manipulation Language) 文と呼ばれるものです (上記以外にもDML文は存在します)。
OBにおいては、データタブでテーブル等のデータを編集した場合に、操作に対応するSQL文(INSERT、UPDATE、DELETE)を発行しています。これらのSQL文は、実行したのみでは変更が確定されず、COMMITを実行してはじめて変更が確定します。COMMITを実行する前であれば、ROLLBACKボタンで変更を取り消すことができます。

一方オブジェクトの作成、削除、定義変更を行うDDL (Data Definition Language) 文 を実行した場合、そのSQL文を実行した時点で暗黙的にCOMMITが発行されますので、ROLLBACKでそれ以前の状態に戻ることはできなくなります。
SI Object Browser for Oracleにおいても、テーブルの作成や削除、列名変更等を行ったときは、その時点で内部的にDDL文が発行され、処理が行われます。ROLLBACKボタンでこれらの操作を元に戻すことはできません。

自動COMMITを有効化・無効化する

OBで行ったデータの編集(追加、変更、削除)時のトランザクションを自動で確定したい場合「オプション」画面から「データ編集時に自動的にCOMMITする」のチェックをONにします。

Oracle OBにおけるトランザクション操作 2

図 2 「データ編集時に自動的にCOMMITする」設定項目

「データ編集時に自動的にCOMMITする」のチェックをONにしておくことで、例えばデータ編集エリアでデータを編集したときにその変更が即座にデータベースに反映されるようになります。
一方、「データ編集時に自動的にCOMMITする」のチェックをONにしていると、操作を誤った際などに元の状態に戻すことが難しくなりますので、本番環境等、慎重な操作が必要となる場面ではOFFにしておくことをおすすめします。
また上記の設定にかかわらず、OBで操作を実行し、COMMITする前にデータベース切断を行ったり、OBを終了したりした場合は、COMMITが自動的に実行されます。ただし、通常の終了処理を経ずにOBを強制終了したときや、OBとデータベースが予期せず切断された際、最後のCOMMIT以降の変更は失われます。 (本記事の趣旨とは外れますが、上記のような場合はデータベース側にOBのセッションが残ってしまうためセッション情報画面等を用いて、手動でセッションを終了させる必要があります。 参考... Oracle セッション情報を確認しよう)

まとめ

OBでトランザクション制御がどのように働くかを説明いたしました。ここまでの説明はあくまでOB上の操作を念頭に置いた説明ですので、トランザクションについて詳細に知りたい方は、Oracleの公式資料や技術系サイト等を検索してみると良いでしょう。部署配属などで新しくOBに触れた方もいらっしゃるかと思いますが、データベースの理解を深めるとともに、OBをうまく活用していただければ幸いです。
なおSI Object Browser WebサイトにてOracle Databaseの基本を解説した「いまさら聞けない Oracleの基本」を公開しておりますので、よろしければそちらもご利用ください。


RELATED POST関連記事


RECENT POST「【OBトコ】DBの勉強」の最新記事


【OBトコ】DBの勉強

データベースのスキーマを理解する

【OBトコ】DBの勉強

データベース別インスタンスの関係性

【OBトコ】DBの勉強

ビューとマテリアライズド・ビューの違いを理解する

【OBトコ】DBの勉強

Oracle 表領域を拡張してみよう

Oracle OBにおけるトランザクション操作
新規CTA