SQLの窓

2017年10月12日


Oracle : SQL Plus で、デッドロックテスト ( ORA-00060 )

SQL Plus では、意図的に commit を実行しない限りトランザクションが終わらないので、二つの行を A クライアントと B クライアントで取り合うように UPDATE 文を実行すると、デッドロックを発生させる事ができます。

デッドロック(ORA-00060)が発生した場合、そちらのクライアントで rollback を実行すると、もう片方では更新が完了するので、そちらで commit を実行して更新を確定させます

▼ 対象レコード


A クライアントの SQL
update 商品分類マスタ set 名称 = 'A-野菜'
where 商品分類 = 'A01';

update 商品分類マスタ set 名称 = 'A-果物'
where 商品分類 = 'A02';

B クライアントの SQL
update 商品分類マスタ set 名称 = 'B-果物'
where 商品分類 = 'A02';

update 商品分類マスタ set 名称 = 'B-野菜'
where 商品分類 = 'A01';

実行の経過

A クライアントも B クライアントも違う行を更新して、それぞれ行は更新されますが、commit で確定されていないので実際の更新は行われていません。しかし、これらのレコードに対するロックが有効になります。





次の実行で更新が待機になり、その次の更新でデッドロックが起こり、A クライアントで待機が解除されてデッドロックのステータスが返ります。





デッドロック(ORA-00060)が発生したので、更新はやりなおしになります。いったん rollback を実行して次の更新に備えます( このような処理を何回までリトライするかはシステムであらかじめ決めておきます )



rollback が実行されてロックされていた行が開放されたので、B クライアントでは更新が完了するので、commit で確定させます。





posted by lightbox at 2017-10-12 14:36 | Comment(0) | Oracle | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり