RAC環境下ORACLE序列緩存導致序列混亂


目前項目中發現了這樣一個問題,在數據庫部署了RAC環境之后,偶爾會出現從Oracle Sequence所取出來的數是混亂的,比如第二次比第一次所取的數要小。這樣當程序的邏輯依賴於ID的大小來排序時,就會產生系統混亂。

 

其實問題是出在數據庫是個RAC環境,序列是被共享的,序列默認是有緩存的。假設RAC上的兩個節點上序列緩存設為20,第一個節點上緩存1-20,第二個節點緩存了21-40,當從不同節點來進行對sequence取值的時候,從第二個節點上取的值就會比從第一個節點上取的要大。而且默認序列都是noorder的。因為很有可能出現這種情況。

 

具體方法有兩個:

1. 設置cache為空

2. 創建序列的時候設置為order,即采用cache + order

 

 

Oracle下關於Sequence的使用有三種情況:

1. cache + noorder

2. nocache

3. cache + order

 

關於這三種情況具體的技術細節和性能比較,請參考下面的文章:

enq:SQ contention / row cache lock / DFS lock handle(SV) 等待事件 說明 http://blog.csdn.net/tianlesoftware/article/details/6534886

Oracle Sequence Cache 參數說明  http://blog.csdn.net/tianlesoftware/article/details/5995051

來源:http://blog.csdn.net/heqiyu34/article/details/7414525


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM