解讀SQL和Oracle對數據庫事務處理的差異(3)_Mssql數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:分析SQL Server性能的改進與邏輯數據庫設計的關聯
      SQL語句優化的原則: ◆1、使用索引來更快地遍歷表 缺省情況下建立的索引是非群集索引,但有時它并不是最佳的。在非群集索引下,數據在物理上隨機存放在數據頁上。合理的索引設計要建立在對各種查詢的分析和預測上。一般來說:①。有大量重復值、且經常有范

       

      為了簡化,我只是用個人的語言講述和事務有關的部件。SGA可以理解為全局內存。其中Database Buffer Cache存放的是從數據文件中讀取的數據緩存。紫色的圓柱體為數據文件。Redo Log Buffer為重做日志緩存,也就是保存日志的內存塊,一切的數據的修改都會記錄在Redo Log Buffer里面。例如用回事務二更新key為1數據的例子。當事務二更新key為1數據從A到Z。Oracle數據庫引擎會把key為1的數據的 rowid,修改前數據A以及修改后數據Z都記錄在Redo Log Buffer里面。如果事務二繼續更新key為2的數據為Y,那么key為2的數據的rowid,修改前數據B以及修改后數據Y也記錄到Redo Log Buffer里面。每一筆數據都記錄,而且是流水線性記錄。一旦事務二進行提交,LGWR進程(Log Writer,日志寫進程)就會把Redo Log Buffer的數據按順序寫到Log Datafile里面,也就是日志數據文件里面,當寫日志文件完成,Oracle數據庫引擎會生成一個SCN(system change number,系統更新號),到這時候Oracle數據庫引擎會通知調用方提交完成了。這里可以看到Oracle在提交的時候不必要把更新數據寫回數據文件,而是寫到日志文件里面。因為順序寫線性的日志文件速度快很多,而寫數據文件是需要隨機讀寫。由于線性記錄和SCN號控制,數據庫引擎可以通過redo log(重做日志文件)的操作得到最新的數據。當然在Checkpoint的時候數據文件是最終還是會更新的,只是說事務提交的時候更新數據文件不是必須步驟,這樣能很大的提高性能。

      由于這個機制,回滾變得很簡單,要讀沒提交前之前的SCN是很容易的事情。

      對于初學者關于數據庫事務處理的建議

      我自己也是從新手一步步走過來,現在也不是老鳥,算是有點經驗,如果是剛入門的同學,你覺得有用就看一下,沒用就過了。

      對于數據庫事務的處理,開始的時候不需要很深入了解數據庫的原理,當然以后還是需要了解的,優先級排后而已。高優先級如下:

      首先,事務不是什么高深神秘的東西,我從入行開始所做的所有系統,包括現在的嵌入式系統,都用到事務。我并不覺得大部分系統事務有什么問題,只是一些約束和同步機制,真的有問題從自身系統設計角度看,不一定說從數據庫技術角度去找解決方法。例如Oracle的長時間查詢如果Undo Data(歷史數據)給覆蓋了,Oracle會拋出異常“ORA-01555: snapshot too old”,如果出現這種問題,我會從自身系統設計角度入手,為什么有那么大的查詢,為什么在這個查詢中其他事務會更新數據,這些查詢是否只是查一次就夠了,查的過程是否需要鎖住表等等。然而這個問題可以通過數據庫調優解決,但是我想問題的角度首先是從自身系統設計出發。

      第二,要知道的是不同數據庫的事務類型的區別,例如MS SQL Sever是默認是自動提交事務,用的時候需要知道每個語句都有單獨的事務在操作。而Oracle是類似于隱式事務,必須手工commit或者rollback。

      第三,使用事務要知道一一對應,特別是嵌套事務的時候,有始有終。很多問題時候發生終的時候,注意異常處理需要結束已經打開的事務。

      第一點是心理問題,第二三點是技術問題,做好我覺得就可以入門開發系統了。以后碰到問題在一步步深入。

       

      分享:怎樣利用SQL Server復制技術實現數據同步更新
      Microsoft SQL Server 2000復制的概念:在數據庫之間對數據和數據庫對象進行復制和分發并進行同步以確保其一致性的一組技術。 使用復制可以將數據分發到不同位置,通過局域網、使用撥號連接、通過 Internet 分發給遠程或移動用戶。復制還能夠使用戶提高應用

      共3頁上一頁123下一頁
      來源:模板無憂//所屬分類:Mssql數據庫教程/更新時間:2009-11-16
      相關Mssql數據庫教程