SQL Server誤區(qū)30日談 第1天 正在運行的事務(wù)在服務(wù)器故障轉(zhuǎn)移后繼續(xù)執(zhí)行
更新時間:2013年01月09日 18:44:53 作者:
每次故障轉(zhuǎn)移都伴隨著某種形式的恢復。但是如果當正在執(zhí)行的事務(wù)沒有Commit時,由于服務(wù)器或?qū)嵗罎е逻B接斷開,SQL Server可沒有辦法在故障轉(zhuǎn)移后的服務(wù)器重新建立事務(wù)的上下文并繼續(xù)執(zhí)行事務(wù)-無論你使用的故障轉(zhuǎn)移方式是集群,鏡像,日志傳送或是SAN復制
誤區(qū) #1:在服務(wù)器故障轉(zhuǎn)移后,正在運行的事務(wù)繼續(xù)執(zhí)行
這當然是錯誤的!
每次故障轉(zhuǎn)移都伴隨著某種形式的恢復。但是如果當正在執(zhí)行的事務(wù)沒有Commit時,由于服務(wù)器或?qū)嵗罎е逻B接斷開,SQL Server可沒有辦法在故障轉(zhuǎn)移后的服務(wù)器重新建立事務(wù)的上下文并繼續(xù)執(zhí)行事務(wù)-無論你使用的故障轉(zhuǎn)移方式是集群,鏡像,日志傳送或是SAN復制。
對于故障轉(zhuǎn)移集群來說,當故障轉(zhuǎn)移發(fā)生后,一個SQL Server實例在另一個故障轉(zhuǎn)移集群的節(jié)點啟動。所有實例上的數(shù)據(jù)庫都要經(jīng)歷Recovery階段-也就是所有沒有Commit的事務(wù)都要被回滾。
對于數(shù)據(jù)庫鏡像來說,來自主體服務(wù)器的日志不斷傳送到鏡像服務(wù)器進行Redo操作。當鏡像服務(wù)器被切換作為主體服務(wù)器時,原鏡像服務(wù)器的事務(wù)日志將會變?yōu)镽ecovery模式,這使得好像原鏡像服務(wù)器經(jīng)歷了一次崩潰那樣,在這之后所有的連接都會導向原鏡像服務(wù)器。
對于事務(wù)日志傳送來說,事務(wù)日志被定期備份并傳送到輔助服務(wù)器.當主服務(wù)器崩潰時,DBA按照恢復順序?qū)⑤o助服務(wù)器恢復后上線.但最終步驟都是要執(zhí)行recovery步驟,也就是將沒有提交的事務(wù)進行回滾。
對于SAN復制來說,本地SAN的I/O被復制到遠程SAN上進行重放,當故障轉(zhuǎn)移發(fā)生后,系統(tǒng)將會連接到遠端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í)行”的功能。
這當然是錯誤的!
每次故障轉(zhuǎn)移都伴隨著某種形式的恢復。但是如果當正在執(zhí)行的事務(wù)沒有Commit時,由于服務(wù)器或?qū)嵗罎е逻B接斷開,SQL Server可沒有辦法在故障轉(zhuǎn)移后的服務(wù)器重新建立事務(wù)的上下文并繼續(xù)執(zhí)行事務(wù)-無論你使用的故障轉(zhuǎn)移方式是集群,鏡像,日志傳送或是SAN復制。
對于故障轉(zhuǎn)移集群來說,當故障轉(zhuǎn)移發(fā)生后,一個SQL Server實例在另一個故障轉(zhuǎn)移集群的節(jié)點啟動。所有實例上的數(shù)據(jù)庫都要經(jīng)歷Recovery階段-也就是所有沒有Commit的事務(wù)都要被回滾。
對于數(shù)據(jù)庫鏡像來說,來自主體服務(wù)器的日志不斷傳送到鏡像服務(wù)器進行Redo操作。當鏡像服務(wù)器被切換作為主體服務(wù)器時,原鏡像服務(wù)器的事務(wù)日志將會變?yōu)镽ecovery模式,這使得好像原鏡像服務(wù)器經(jīng)歷了一次崩潰那樣,在這之后所有的連接都會導向原鏡像服務(wù)器。
對于事務(wù)日志傳送來說,事務(wù)日志被定期備份并傳送到輔助服務(wù)器.當主服務(wù)器崩潰時,DBA按照恢復順序?qū)⑤o助服務(wù)器恢復后上線.但最終步驟都是要執(zhí)行recovery步驟,也就是將沒有提交的事務(wù)進行回滾。
對于SAN復制來說,本地SAN的I/O被復制到遠程SAN上進行重放,當故障轉(zhuǎn)移發(fā)生后,系統(tǒng)將會連接到遠端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)文章
sqlserver建立新用戶及關(guān)聯(lián)數(shù)據(jù)庫教程
本文講的是SQLserver數(shù)據(jù)庫創(chuàng)建新用戶方法以及賦予此用戶特定權(quán)限的方法,非常的簡單實用,有需要的小伙伴可以參考下2018-01-01SqlServer使用公用表表達式(CTE)實現(xiàn)無限級樹形構(gòu)建
本文給大家分享的是sqlserver中使用公用表表達式(CTE)實現(xiàn)無限級樹形構(gòu)建的詳細代碼,非常的簡單實用,有需要的小伙伴可以參考下2017-08-08過程需要參數(shù) ''@statement'' 為 ''ntext/nchar/nvarchar'' 類型
過程需要參數(shù)2009-04-04卸載VS2011 Developer Preview后Sql Server2008 R2建立數(shù)據(jù)庫關(guān)系圖報“找不到指定的
話說上回我為了嘗嘗螃蟹的味道而裝了 VS2011 Developer Preview,但是裝完后立馬卸載掉了,原因是這家伙的安裝目錄位置沒用,我設(shè)置到D盤的但是裝完后D盤的文件夾只有一百多M,而足足8G+的空間是在C盤上消耗的。2011-11-11SQL Server 存儲過程遇到“表 ''''#TT'''' 沒有標識屬性無法執(zhí)行 SET 操作”錯誤
這篇文章主要介紹了SQL Server 存儲過程遇到“表 '#TT' 沒有標識屬性無法執(zhí)行 SET 操作”錯誤 的相關(guān)資料,需要的朋友可以參考下2016-07-07