0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【SQL】Oracleデータベースにおける未コミットデータとトランザクション隔離レベルのメモ

Posted at

日本語に苦戦しているSYOです。

このメモはChatGPTを利用して作成されました。

事象

最近、Oracleデータベースを使用して作業しており、管理ツールとしてOracle SQL Developerを利用しています。

ある時、CMDのセッションでデータベースにINSERT操作を実行しました。

驚いたことに、この操作をCMDで実行した後、COMMITを行わないにも関わらず、CMDからはそのデータを問い合わせることができました。

しかしながら、同じデータはOracle SQL Developerでは表示されませんでした。

原因

Oracleデータベースのデフォルト設定では、トランザクション隔離レベルは「READ COMMITTED」となっており、これによりトランザクション内で行われた未コミットの変更は他のセッションからは非表示となります。

INSERT操作は、DML(データ操作言語)の一環として即時にテーブルに反映されます。

このため、CMDINSERTを行うと、同一セッション内ではその未コミットデータが参照可能です。

対照的に、Oracle SQL Developerのようなクライアントツールでは、異なるトランザクション隔離レベルやセッションの管理手法が採用されていることが多いです。

そのため、CMDでの未コミットデータが参照できたとしても、Oracle SQL Developerのような別のクライアントツールでそのデータが表示されない場合もあります。

まとめ

データの一貫性を確保するためには、データ変更後は速やかにCOMMITを実施することが推奨されます。

未コミットデータを他のセッションと共有したい場合には、トランザクション隔離レベルの調整やその他の手法を検討することが求められますが、これらの変更は慎重に行われるべきです。

参考

ChatGPT

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?