Oracle與SQL Server數據庫鏡像對比
首先,微軟SQL數據庫中的鏡像數據庫類(lèi)似于Oracle數據庫中的備用數據庫。我說(shuō)的只是類(lèi)似,確切的說(shuō),我們需要考慮不同數據庫在自己體系中的差異。MSSQL作為一個(gè)實(shí)例來(lái)操作,一個(gè)實(shí)例包含幾個(gè)數據庫,你首先要登錄一個(gè)實(shí)例,然后選擇哪個(gè)數據庫作用于該實(shí)例。而在Oracle數據庫中,簡(jiǎn)單模式(忽略RAC)就只有一個(gè)數據庫與一個(gè)實(shí)例相聯(lián)系。因此,可以這么說(shuō),在Oracle數據庫中,備份數據庫(standby database)就完全是主數據庫的快照。而在MSSQL中,鏡像數據庫僅僅是選擇的那個(gè)數據庫的備份,但沒(méi)有包括代理,登錄,任務(wù)(這些或者更多的數據庫項目需要單獨在數據庫鏡像上創(chuàng )建或者復制)這些外部數據項。
在服務(wù)器數量上,Oracle的主數據庫和備用數據庫配置最小需要2臺。在MSSQL中,最小數據是2個(gè)或3個(gè),根據你所選擇的高可用性、高安全性、高性能方式所決定。
高可用性方式:這個(gè)操作模式選項允許你在兩臺服務(wù)器上同步事務(wù)寫(xiě)入,并支持自動(dòng)錯誤恢復。要使用這個(gè)選項,你必須還要使用一個(gè)證人服務(wù)器。
高保護方式:這個(gè)選項可以讓你在兩臺服務(wù)器上同步事物寫(xiě)入,但是錯誤恢復是手工的。因為自動(dòng)的錯誤恢復不是這個(gè)選項的一部分,所以也不會(huì )用到證人服務(wù)器。
高性能方式:這個(gè)選項不關(guān)心兩臺服務(wù)器上的寫(xiě)入是否是同步的,因此在性能上有所提高。當使用這個(gè)選項的時(shí)候,你只能假設鏡像服務(wù)器上的所有事情都是成功完成。這個(gè)選項只允許手工的錯誤恢復,因此不會(huì )用到證人服務(wù)器。
為了保證故障自動(dòng)恢復,就需要有第三臺服務(wù)器,可以稱(chēng)之為目擊者(另外兩個(gè)就是主數據庫和鏡像數據庫),你可以將這個(gè)目擊者當作群集中的一個(gè)成員。它實(shí)現了2比1投票的能力,當我的一個(gè)組件不可達,并因此需要進(jìn)行錯誤恢復的時(shí)候。證人服務(wù)器只有在你想實(shí)現自動(dòng)錯誤恢復的時(shí)候才需要用到。
在Oracle數據的一個(gè)事務(wù)中,日志緩沖器在廢數據寫(xiě)入數據文件(忽略write-ahead情況)前被刷新或者寫(xiě)入到redo日志中。這種刷新或者寫(xiě)入到redo日志的行為是有必要的,如像實(shí)例失敗(使用前滾和回滾恢復過(guò)程)這樣的事件發(fā)生時(shí)。MSSQL也承認將日志緩沖器寫(xiě)入到磁盤(pán)的重要性。不過(guò)這里稱(chēng)之為硬化(hardening)。首先將事務(wù)日志緩沖器的信息寫(xiě)入到磁盤(pán)或者硬化,接著(zhù)將日志記錄塊發(fā)送到鏡像數據庫中。鏡像數據庫接收到該日志記錄塊后,將之存入到某個(gè)緩沖器中,隨后依次硬化該日志記錄塊。
當數據發(fā)生變化時(shí),MSSQL數據庫如何保持主數據庫和鏡像數據庫的一致性呢?
Oracle用戶(hù)非常熟悉SCN,而MSSQL用戶(hù)通過(guò)使用mirroring_failover_lsn機制(粗略來(lái)講就是一個(gè)日志序列號)。MSSQL與Oracle不同,MSSQL將事務(wù)分離(兩個(gè)事務(wù)在兩個(gè)機器上),而不是一個(gè)分布式事務(wù)(在自身提交前需要遠程等待提交)。
另外一個(gè)相似點(diǎn),但稍微有些畸變的反射就是redo日志和事務(wù)日志。在Oracle中,完成的redo日志將被發(fā)送到遠程的服務(wù)器中,將完成的redo日志應用到備份數據中去。在MSSQL中,事務(wù)日志沒(méi)有被傳輸,但是就像我以上提到的,日志緩沖器數據發(fā)送到網(wǎng)絡(luò )上。這就導致另外一個(gè)鏡像反射:備份和恢復模式。
在Oracle中,當你處于歸檔模式或者非歸檔模式的時(shí)候,這些操作是內定的。如果歸檔redo日志被傳輸或者提交到一個(gè)遠程的服務(wù)器,那么主數據庫明顯就是在歸檔模式下,那些文件就是這么產(chǎn)生的。運行在這種模式下,允許有少量的數據丟失,因為在發(fā)生故障(無(wú)論什么樣的故障)前,恢復能夠在任意一個(gè)點(diǎn)上執行。在MSSQL中是類(lèi)似的,但是有三種狀態(tài)需要選擇。
《SQL Server聯(lián)機叢書(shū)》,像許多其它的在線(xiàn)資源一樣,講述了在使用MSSQL時(shí),3種恢復模式的不同點(diǎn)??焖俚谋容^有:MSSQL完整模式對應于Oracle中的歸檔模式;簡(jiǎn)單模式對應于非歸檔模式;bulk模式與使用直接路徑插入,添加提示,或者與nologging模式操作類(lèi)似。
根據以上三種模式(這三種模式很容易轉換,不需要關(guān)機或者重啟)的描述以及日志緩沖器和歸檔redo日志的討論中,很容易斷定在MSSQL中進(jìn)行數據庫的鏡像需要將數據的回復模式設置成完全模式(full model)。簡(jiǎn)單模式(Simple model)或許也能行,但是這種模式下維持事務(wù)日志中的小部分數據,在備份中,如果在日志被刪節了,整個(gè)鏡像過(guò)程也就破環(huán)了,因為當你在將事務(wù)發(fā)送到鏡像數據庫中的時(shí)候,如果日志被刪節了,這個(gè)過(guò)程就不能完成。
說(shuō)到數據庫被破壞該怎么辦呢?
這正是鏡像(或者說(shuō)備份)的主要目的:當主數據庫斷開(kāi)或者說(shuō)遇到故障時(shí)候我們希望系統能回到鏡像前或者備份前的狀況去。這如何才能實(shí)現呢?我們能自動(dòng)實(shí)現或者手動(dòng)實(shí)現。想實(shí)現這些,需要一些已經(jīng)完成的設置。在MSSQL中,自動(dòng)故障恢復,回到原來(lái)狀態(tài)需要在HA模式,事務(wù)安全是full,數據傳輸是同步,有目擊服務(wù)器的情況下。這種模式下運行還需要使用企業(yè)版的數據庫系統。高安全性和高性能在標準版的情況下也能實(shí)現。
MSSQL還有其它版本的選擇,但是這些并不如Oracle的反射“干凈”,這些版本包括:Developer、Workgroup 和 SQL Express。舉個(gè)例子,目擊服務(wù)器能夠是任何的版本,但是如果你想給鏡像服務(wù)器做一個(gè)快照,那么你就需要企業(yè)或者開(kāi)發(fā)版的了。
在設置伙伴(partner,通常有主數據庫和鏡像數據庫組成)過(guò)程中,他們的恢復狀態(tài)開(kāi)始起作用。通過(guò)使用相同的名字,鏡像在遠程/鏡像服務(wù)器上建立(使用配置數據庫鏡像安全向導是最簡(jiǎn)單的方法)起來(lái),并且鏡像數據庫被設置成NORECOVERY,通常它是恢復(recovering)狀態(tài)的。在MSSQL中,恢復數據庫是沒(méi)有的,因此沒(méi)有進(jìn)行上述的設置,是不能被其他用戶(hù)當作只讀數據庫來(lái)使用的。
為了避免這個(gè)中缺陷,你可以給鏡像做一個(gè)快照,使得該“影像”對用戶(hù)可見(jiàn)。正如我上述所提到的那樣,這需要你的數據庫版本是企業(yè)(或者開(kāi)發(fā))版。這就意味著(zhù)用戶(hù)需要有快照數據庫的知識,知道如何進(jìn)入存儲它,如何告訴應用程序使用哪個(gè)數據庫。慣例上來(lái)說(shuō),配置文件使用的.NET環(huán)境,你能建立一個(gè)主數據庫和一個(gè)故障回滾的輔數據庫。如果在Oracle中配置過(guò)備份數據庫,你就會(huì )覺(jué)得這很類(lèi)似。
結論
這篇文章內容包括按照Oracle的方式,如何更好的理解在另一種主流的RDBMS上執行鏡像或者復制,。試著(zhù)學(xué)習和解釋你的RDBMS如何工作的,從另外一種模式來(lái)得到你的注意有助于你搞清楚你當前數據庫系統運行原理。舉個(gè)例子,我發(fā)現非常有實(shí)用價(jià)值的是Oracle歸檔模式和MSSQL三種恢復模式之間的關(guān)系。使用在MSSQL中的一些術(shù)語(yǔ)(伙伴,主數據庫,目擊,鏡像)有助于你構成和識別Oracle中執行數據庫鏡像的操作。
為了更好的評價(jià)數據庫鏡像是如何運作,如何實(shí)施的,你可以運行兩個(gè)單獨的MSSQL實(shí)例,操作系統是XP或者是2003都沒(méi)有關(guān)系。按照MSDN聯(lián)機叢書(shū)的步驟完成一遍。下載或者選用AdventureWorks數據庫(類(lèi)似于Oracle的HR/SH數據庫等。這些都沒(méi)有預安裝的),將其鏡像到主機服務(wù)器上。呈現在你面前的不僅僅是另外一個(gè)數據的所具有功能特性,你將還會(huì )看到MSSQL所具有的操作,得到自己的正確評價(jià)(我平時(shí)使用的是Oracle數據庫,測試用的是MSSQL,反過(guò)來(lái)說(shuō),你平時(shí)使用的是MSSQL,現在用Oracle來(lái)測試的話(huà),也會(huì )有新的發(fā)現)。
評論