SQL Server誤區(qū)30日談 第1天 正在運行的事務(wù)在服務(wù)器故障轉(zhuǎn)移后繼續(xù)執(zhí)行
更新時間:2013年01月09日 18:44:53 作者:
每次故障轉(zhuǎn)移都伴隨著某種形式的恢復(fù)。但是如果當(dāng)正在執(zhí)行的事務(wù)沒有Commit時,由于服務(wù)器或?qū)嵗罎?dǎo)致連接斷開,SQL Server可沒有辦法在故障轉(zhuǎn)移后的服務(wù)器重新建立事務(wù)的上下文并繼續(xù)執(zhí)行事務(wù)-無論你使用的故障轉(zhuǎn)移方式是集群,鏡像,日志傳送或是SAN復(fù)制
誤區(qū) #1:在服務(wù)器故障轉(zhuǎn)移后,正在運行的事務(wù)繼續(xù)執(zhí)行
這當(dāng)然是錯誤的!
每次故障轉(zhuǎn)移都伴隨著某種形式的恢復(fù)。但是如果當(dāng)正在執(zhí)行的事務(wù)沒有Commit時,由于服務(wù)器或?qū)嵗罎?dǎo)致連接斷開,SQL Server可沒有辦法在故障轉(zhuǎn)移后的服務(wù)器重新建立事務(wù)的上下文并繼續(xù)執(zhí)行事務(wù)-無論你使用的故障轉(zhuǎn)移方式是集群,鏡像,日志傳送或是SAN復(fù)制。
對于故障轉(zhuǎn)移集群來說,當(dāng)故障轉(zhuǎn)移發(fā)生后,一個SQL Server實例在另一個故障轉(zhuǎn)移集群的節(jié)點啟動。所有實例上的數(shù)據(jù)庫都要經(jīng)歷Recovery階段-也就是所有沒有Commit的事務(wù)都要被回滾。
對于數(shù)據(jù)庫鏡像來說,來自主體服務(wù)器的日志不斷傳送到鏡像服務(wù)器進(jìn)行Redo操作。當(dāng)鏡像服務(wù)器被切換作為主體服務(wù)器時,原鏡像服務(wù)器的事務(wù)日志將會變?yōu)镽ecovery模式,這使得好像原鏡像服務(wù)器經(jīng)歷了一次崩潰那樣,在這之后所有的連接都會導(dǎo)向原鏡像服務(wù)器。
對于事務(wù)日志傳送來說,事務(wù)日志被定期備份并傳送到輔助服務(wù)器.當(dāng)主服務(wù)器崩潰時,DBA按照恢復(fù)順序?qū)⑤o助服務(wù)器恢復(fù)后上線.但最終步驟都是要執(zhí)行recovery步驟,也就是將沒有提交的事務(wù)進(jìn)行回滾。
對于SAN復(fù)制來說,本地SAN的I/O被復(fù)制到遠(yuǎn)程SAN上進(jìn)行重放,當(dāng)故障轉(zhuǎn)移發(fā)生后,系統(tǒng)將會連接到遠(yuǎn)端SAN但數(shù)據(jù)庫仍然需要執(zhí)行recovery步驟,這和故障轉(zhuǎn)移集群極其類似。
“唯一”使得正在執(zhí)行的事務(wù)在故障轉(zhuǎn)移發(fā)生后仍然得以繼續(xù)執(zhí)行的技術(shù)使用帶有實時遷移功能的虛擬化技術(shù),因為這時連接本身并不知道其連接的對象已經(jīng)變?yōu)榱硪慌_物理服務(wù)器。
但是無論使用那種技術(shù),如果”連接”失效,正在執(zhí)行的事務(wù)將會丟失,所以處理這類問題的這部分工作就需要在程序中用代碼實現(xiàn)某種“重新執(zhí)行”的功能。
這當(dāng)然是錯誤的!
每次故障轉(zhuǎn)移都伴隨著某種形式的恢復(fù)。但是如果當(dāng)正在執(zhí)行的事務(wù)沒有Commit時,由于服務(wù)器或?qū)嵗罎?dǎo)致連接斷開,SQL Server可沒有辦法在故障轉(zhuǎn)移后的服務(wù)器重新建立事務(wù)的上下文并繼續(xù)執(zhí)行事務(wù)-無論你使用的故障轉(zhuǎn)移方式是集群,鏡像,日志傳送或是SAN復(fù)制。
對于故障轉(zhuǎn)移集群來說,當(dāng)故障轉(zhuǎn)移發(fā)生后,一個SQL Server實例在另一個故障轉(zhuǎn)移集群的節(jié)點啟動。所有實例上的數(shù)據(jù)庫都要經(jīng)歷Recovery階段-也就是所有沒有Commit的事務(wù)都要被回滾。
對于數(shù)據(jù)庫鏡像來說,來自主體服務(wù)器的日志不斷傳送到鏡像服務(wù)器進(jìn)行Redo操作。當(dāng)鏡像服務(wù)器被切換作為主體服務(wù)器時,原鏡像服務(wù)器的事務(wù)日志將會變?yōu)镽ecovery模式,這使得好像原鏡像服務(wù)器經(jīng)歷了一次崩潰那樣,在這之后所有的連接都會導(dǎo)向原鏡像服務(wù)器。
對于事務(wù)日志傳送來說,事務(wù)日志被定期備份并傳送到輔助服務(wù)器.當(dāng)主服務(wù)器崩潰時,DBA按照恢復(fù)順序?qū)⑤o助服務(wù)器恢復(fù)后上線.但最終步驟都是要執(zhí)行recovery步驟,也就是將沒有提交的事務(wù)進(jìn)行回滾。
對于SAN復(fù)制來說,本地SAN的I/O被復(fù)制到遠(yuǎn)程SAN上進(jìn)行重放,當(dāng)故障轉(zhuǎn)移發(fā)生后,系統(tǒng)將會連接到遠(yuǎn)端SAN但數(shù)據(jù)庫仍然需要執(zhí)行recovery步驟,這和故障轉(zhuǎn)移集群極其類似。
“唯一”使得正在執(zhí)行的事務(wù)在故障轉(zhuǎn)移發(fā)生后仍然得以繼續(xù)執(zhí)行的技術(shù)使用帶有實時遷移功能的虛擬化技術(shù),因為這時連接本身并不知道其連接的對象已經(jīng)變?yōu)榱硪慌_物理服務(wù)器。
但是無論使用那種技術(shù),如果”連接”失效,正在執(zhí)行的事務(wù)將會丟失,所以處理這類問題的這部分工作就需要在程序中用代碼實現(xiàn)某種“重新執(zhí)行”的功能。
相關(guān)文章
sql IDENTITY_INSERT對標(biāo)識列的作用和使用
本文主要介紹了sql IDENTITY_INSERT對標(biāo)識列的作用和使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
SQLServer 使用rand獲取隨機(jī)數(shù)的操作
這篇文章主要介紹了SQLServer 使用rand獲取隨機(jī)數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
SQL Server 游標(biāo)語句 聲明/打開/循環(huán)實例
游標(biāo)屬于行級操作 消耗很大 SQL查詢是基于數(shù)據(jù)集的所以一般查詢能有 能用數(shù)據(jù)集 就用數(shù)據(jù)集 別用游標(biāo) 數(shù)據(jù)量大 是性能殺手2013-04-04
在SQL Server數(shù)據(jù)庫中為標(biāo)識(IDENTITY)列插入顯式值
SQL Server中的標(biāo)識列和ACCESS中的“自動編號”相似,都是插入記錄的時候自動生成,一般不允許也不需要我們?nèi)ナ謩有薷乃?/div> 2007-02-02
SQL?server插入報錯:當(dāng)?IDENTITY_INSERT?設(shè)置為?OFF?時不能為表?‘XXX‘?
這篇文章主要介紹了SQL?server插入報錯:當(dāng)?IDENTITY_INSERT?設(shè)置為?OFF?時,不能為表?‘XXX‘?中的標(biāo)識列插入顯式值的問題,該問題是給SQL server數(shù)據(jù)庫中的某個表插入數(shù)據(jù)引起的報錯,一般出現(xiàn)在該表為自增的情況下,本文給大家分享解決方法,需要的朋友可以參考下2023-09-09
SQL Server數(shù)據(jù)庫之備份和恢復(fù)數(shù)據(jù)庫
在一些對數(shù)據(jù)可靠性要求很高的行業(yè),若發(fā)生意外停機(jī)或數(shù)據(jù)丟失,其損失是十分慘重的,因此,本文詳細(xì)介紹了數(shù)據(jù)庫備份和恢復(fù)數(shù)據(jù)庫方法,感興趣的同學(xué)可以借鑒一下2023-03-03最新評論

