解讀SQL和Oracle對數(shù)據(jù)庫事務(wù)處理的差異(3)_Mssql數(shù)據(jù)庫教程
推薦:分析SQL Server性能的改進(jìn)與邏輯數(shù)據(jù)庫設(shè)計(jì)的關(guān)聯(lián)SQL語句優(yōu)化的原則: ◆1、使用索引來更快地遍歷表 缺省情況下建立的索引是非群集索引,但有時(shí)它并不是最佳的。在非群集索引下,數(shù)據(jù)在物理上隨機(jī)存放在數(shù)據(jù)頁上。合理的索引設(shè)計(jì)要建立在對各種查詢的分析和預(yù)測上。一般來說:①。有大量重復(fù)值、且經(jīng)常有范
為了簡化,我只是用個(gè)人的語言講述和事務(wù)有關(guān)的部件。SGA可以理解為全局內(nèi)存。其中Database Buffer Cache存放的是從數(shù)據(jù)文件中讀取的數(shù)據(jù)緩存。紫色的圓柱體為數(shù)據(jù)文件。Redo Log Buffer為重做日志緩存,也就是保存日志的內(nèi)存塊,一切的數(shù)據(jù)的修改都會記錄在Redo Log Buffer里面。例如用回事務(wù)二更新key為1數(shù)據(jù)的例子。當(dāng)事務(wù)二更新key為1數(shù)據(jù)從A到Z。Oracle數(shù)據(jù)庫引擎會把key為1的數(shù)據(jù)的 rowid,修改前數(shù)據(jù)A以及修改后數(shù)據(jù)Z都記錄在Redo Log Buffer里面。如果事務(wù)二繼續(xù)更新key為2的數(shù)據(jù)為Y,那么key為2的數(shù)據(jù)的rowid,修改前數(shù)據(jù)B以及修改后數(shù)據(jù)Y也記錄到Redo Log Buffer里面。每一筆數(shù)據(jù)都記錄,而且是流水線性記錄。一旦事務(wù)二進(jìn)行提交,LGWR進(jìn)程(Log Writer,日志寫進(jìn)程)就會把Redo Log Buffer的數(shù)據(jù)按順序?qū)懙絃og Datafile里面,也就是日志數(shù)據(jù)文件里面,當(dāng)寫日志文件完成,Oracle數(shù)據(jù)庫引擎會生成一個(gè)SCN(system change number,系統(tǒng)更新號),到這時(shí)候Oracle數(shù)據(jù)庫引擎會通知調(diào)用方提交完成了。這里可以看到Oracle在提交的時(shí)候不必要把更新數(shù)據(jù)寫回?cái)?shù)據(jù)文件,而是寫到日志文件里面。因?yàn)轫樞驅(qū)懢性的日志文件速度快很多,而寫數(shù)據(jù)文件是需要隨機(jī)讀寫。由于線性記錄和SCN號控制,數(shù)據(jù)庫引擎可以通過redo log(重做日志文件)的操作得到最新的數(shù)據(jù)。當(dāng)然在Checkpoint的時(shí)候數(shù)據(jù)文件是最終還是會更新的,只是說事務(wù)提交的時(shí)候更新數(shù)據(jù)文件不是必須步驟,這樣能很大的提高性能。
由于這個(gè)機(jī)制,回滾變得很簡單,要讀沒提交前之前的SCN是很容易的事情。
對于初學(xué)者關(guān)于數(shù)據(jù)庫事務(wù)處理的建議
我自己也是從新手一步步走過來,現(xiàn)在也不是老鳥,算是有點(diǎn)經(jīng)驗(yàn),如果是剛?cè)腴T的同學(xué),你覺得有用就看一下,沒用就過了。
對于數(shù)據(jù)庫事務(wù)的處理,開始的時(shí)候不需要很深入了解數(shù)據(jù)庫的原理,當(dāng)然以后還是需要了解的,優(yōu)先級排后而已。高優(yōu)先級如下:
首先,事務(wù)不是什么高深神秘的東西,我從入行開始所做的所有系統(tǒng),包括現(xiàn)在的嵌入式系統(tǒng),都用到事務(wù)。我并不覺得大部分系統(tǒng)事務(wù)有什么問題,只是一些約束和同步機(jī)制,真的有問題從自身系統(tǒng)設(shè)計(jì)角度看,不一定說從數(shù)據(jù)庫技術(shù)角度去找解決方法。例如Oracle的長時(shí)間查詢?nèi)绻鸘ndo Data(歷史數(shù)據(jù))給覆蓋了,Oracle會拋出異常“ORA-01555: snapshot too old”,如果出現(xiàn)這種問題,我會從自身系統(tǒng)設(shè)計(jì)角度入手,為什么有那么大的查詢,為什么在這個(gè)查詢中其他事務(wù)會更新數(shù)據(jù),這些查詢是否只是查一次就夠了,查的過程是否需要鎖住表等等。然而這個(gè)問題可以通過數(shù)據(jù)庫調(diào)優(yōu)解決,但是我想問題的角度首先是從自身系統(tǒng)設(shè)計(jì)出發(fā)。
第二,要知道的是不同數(shù)據(jù)庫的事務(wù)類型的區(qū)別,例如MS SQL Sever是默認(rèn)是自動提交事務(wù),用的時(shí)候需要知道每個(gè)語句都有單獨(dú)的事務(wù)在操作。而Oracle是類似于隱式事務(wù),必須手工commit或者rollback。
第三,使用事務(wù)要知道一一對應(yīng),特別是嵌套事務(wù)的時(shí)候,有始有終。很多問題時(shí)候發(fā)生終的時(shí)候,注意異常處理需要結(jié)束已經(jīng)打開的事務(wù)。
第一點(diǎn)是心理問題,第二三點(diǎn)是技術(shù)問題,做好我覺得就可以入門開發(fā)系統(tǒng)了。以后碰到問題在一步步深入。
分享:怎樣利用SQL Server復(fù)制技術(shù)實(shí)現(xiàn)數(shù)據(jù)同步更新Microsoft SQL Server 2000復(fù)制的概念:在數(shù)據(jù)庫之間對數(shù)據(jù)和數(shù)據(jù)庫對象進(jìn)行復(fù)制和分發(fā)并進(jìn)行同步以確保其一致性的一組技術(shù)。 使用復(fù)制可以將數(shù)據(jù)分發(fā)到不同位置,通過局域網(wǎng)、使用撥號連接、通過 Internet 分發(fā)給遠(yuǎn)程或移動用戶。復(fù)制還能夠使用戶提高應(yīng)用
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 講解數(shù)據(jù)庫調(diào)優(yōu)與程序員相關(guān)的幾個(gè)方面
- SQL SQL Server 2008中的新日期數(shù)據(jù)類型
- 從各種位置截取字符串的SQL語法
- 怎樣利用SQL Server復(fù)制技術(shù)實(shí)現(xiàn)數(shù)據(jù)同步更新
- 解析微軟SQL Server 2008如何令商業(yè)智能平民化
- 深入淺出SQL之左連接、右連接和全連接
- 解決SQL Server數(shù)據(jù)庫占用過多內(nèi)存的方法
- 一列保存多個(gè)ID(將多個(gè)用逗號隔開的ID轉(zhuǎn)換成用逗號隔開的名稱)
- 詳解SQL Server2000安全管理機(jī)制
- SQL Server 2008中的新日期數(shù)據(jù)類型
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-解讀SQL和Oracle對數(shù)據(jù)庫事務(wù)處理的差異(3)
。