日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SET TRANSACTION READ ONLY來實現事物級別的一致性。一個事物所有語句讀到的數據都是一致的。

我們開始試驗一,模擬語句級別讀一致性。第一個session使用顯示打開一個游標模擬數據讀,同時在游標讀數據的過程中,啟動另外一個session更改數據,我可以看到另外一個session對數據的更改,并不會改變到第一個session的讀。這就是語句級別的讀一致性。啟動一個session連接數據庫:Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0Connected as cboSQL> set serveroutput on;SQL>SQL> create table test(id number,name varchar2(10));Table createdSQL> insert into test values(1,'a');1 row insertedSQL> insert into test values(2,'b');1 row insertedSQL> commit;Commit completeSQL>SQL> declare2? cursor cur is select * from test;3? begin4? for rec in cur5? loop6?? dbms_output.put_line(rec.name);7?? dbms_lock.sleep(10);--中間等待另外一個session啟動并執行更新數據操作8? end loop;9? end;10? /abPL/SQL procedure successfully completedSQL>在執行游標打印輸出的時候同時啟動另外一個進程,執行更新數據操作:Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0Connected as cboSQL> set serveroutput on;SQL>SQL> create table test(id number,name varchar2(10));Table createdSQL> insert into test values(1,'a');1 row insertedSQL> insert into test values(2,'b');1 row insertedSQL> commit;Commit completeSQL>SQL> declare2? cursor cur is select * from test;3? begin4? for rec in cur5? loop6?? dbms_output.put_line(rec.name);7?? dbms_lock.sleep(10);8? end loop;9? end;10? /abPL/SQL procedure successfully completedSQL>

下面我們開始試驗二,模擬事務級別讀一致性。

首先啟動一個SESSION,讀一次數據:

SQL> SET TRANSACTION READ ONLY;

Transaction set

SQL> select * from test;

ID NAME

---------- ----------

1 a

2 bbbb

接下來我們啟動另外一個session,執行更新數據操作:

SQL> update test set name='123456';

2 rows updated

SQL> commit;

Commit complete

最后我們回到第一session查看再次查看數據:

SQL> select * from test;

ID NAME

---------- ----------

1 a

2 bbbb

我們會發現讀出的數據并沒有發生改變。所以在設置了SET TRANSACTION READ ONLY后,一個事務前后語句讀取的數據不會因為其他seesion對數據的更新而改變。

另外SET TRANSACTION READ ONLY是有一定的條件限制的,官方文檔說明如下:

TheSETTRANSACTIONstatement must be the

first statement of a new transaction; if any DML statements (including

queries) or other non-DDL statements (such asSET ROLE) precede aSET TRANSACTIONREADONLYstatement, an error is returned. Once aSETTRANSACTIONREADONLYstatement successfully executes, onlySELECTFORUPDATEclause),COMMIT,ROLLBACK, or non-DML statements (such asSETROLE,ALTERSYSTEM,LOCKTABLE) are allowed in the transaction. Otherwise, an error is returned. ACOMMIT,ROLLBACK,

or DDL statement terminates the read-only transaction; a DDL statement

causes an implicit commit of the read-only transaction and commits in

its own transaction.

總結

以上是生活随笔為你收集整理的oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。