SQL Server與Oracle數據庫鏡像對比 |
發布時間: 2012/7/13 14:58:27 |
“數據庫鏡像”是用于提高數據庫可用性的主要軟件解決方案。Oracle數據庫與SQL Server數據庫作為兩個應用非常廣泛的數據庫,在數據庫鏡像上的操作有很多的不同,通過對比,將會深入發現SQL Server與Oracle數據庫鏡像的不同。
首先,微軟SQL Server數據庫中的鏡像數據庫類似于Oracle數據庫中的備用數據庫。我說的只是類似,確切的說,我們需要考慮不同數據庫在自己體系中的差異。SQL Server作為一個實例來操作,一個實例包含幾個數據庫,你首先要登錄一個實例,然后選擇哪個數據庫作用于該實例。而在Oracle數據庫中,簡單模式(忽略RAC)就只有一個數據庫與一個實例相聯系。因此,可以這么說,在Oracle數據庫中,備份數據庫(standby database)就完全是主數據庫的快照。而在SQL Server中,鏡像數據庫僅僅是選擇的那個數據庫的備份,但沒有包括代理,登錄,任務(這些或者更多的數據庫項目需要單獨在數據庫鏡像上創建或者復制)這些外部數據項。 在服務器數量上,Oracle的主數據庫和備用數據庫配置最小需要2臺。在SQL Server中,最小數據是2個或3個,根據你所選擇的高可用性、高安全性、高性能方式所決定。 高可用性方式:這個操作模式選項允許你在兩臺服務器上同步事務寫入,并支持自動錯誤恢復。要使用這個選項,你必須還要使用一個證人服務器。 高保護方式:這個選項可以讓你在兩臺服務器上同步事物寫入,但是錯誤恢復是手工的。因為自動的錯誤恢復不是這個選項的一部分,所以也不會用到證人服務器。 高性能方式:這個選項不關心兩臺服務器上的寫入是否是同步的,因此在性能上有所提高。當使用這個選項的時候,你只能假設鏡像服務器上的所有事情都是成功完成。這個選項只允許手工的錯誤恢復,因此不會用到證人服務器。 為了保證故障自動恢復,就需要有第三臺服務器,可以稱之為目擊者(另外兩個就是主數據庫和鏡像數據庫),你可以將這個目擊者當作群集中的一個成員。它實現了2比1投票的能力,當我的一個組件不可達,并因此需要進行錯誤恢復的時候。證人服務器只有在你想實現自動錯誤恢復的時候才需要用到。 在Oracle數據的一個事務中,日志緩沖器在廢數據寫入數據文件(忽略write-ahead情況)前被刷新或者寫入到redo日志中。這種刷新或者寫入到redo日志的行為是有必要的,如像實例失敗(使用前滾和回滾恢復過程)這樣的事件發生時。SQL Server也承認將日志緩沖器寫入到磁盤的重要性。不過這里稱之為硬化(hardening)。首先將事務日志緩沖器的信息寫入到磁盤或者硬化,接著將日志記錄塊發送到鏡像數據庫中。鏡像數據庫接收到該日志記錄塊后,將之存入到某個緩沖器中,隨后依次硬化該日志記錄塊。 當數據發生變化時,SQL Server數據庫如何保持主數據庫和鏡像數據庫的一致性呢? Oracle用戶非常熟悉SCN,而SQL Server用戶通過使用mirroring_failover_lsn機制(粗略來講就是一個日志序列號)。SQL Server與Oracle不同,SQL Server將事務分離(兩個事務在兩個機器上),而不是一個分布式事務(在自身提交前需要遠程等待提交)。 另外一個相似點,但稍微有些畸變的反射就是redo日志和事務日志。在Oracle中,完成的redo日志將被發送到遠程的服務器中,將完成的redo日志應用到備份數據中去。在SQL Server中,事務日志沒有被傳輸,但是就像我以上提到的,日志緩沖器數據發送到網絡上。這就導致另外一個鏡像反射:備份和恢復模式。 在Oracle中,當你處于歸檔模式或者非歸檔模式的時候,這些操作是內定的。如果歸檔redo日志被傳輸或者提交到一個遠程的服務器,那么主數據庫明顯就是在歸檔模式下,那些文件就是這么產生的。運行在這種模式下,允許有少量的數據丟失,因為在發生故障(無論什么樣的故障)前,恢復能夠在任意一個點上執行。在SQL Server中是類似的,但是有三種狀態需要選擇。 《SQL Server聯機叢書》,像許多其它的在線資源一樣,講述了在使用SQL Server時,3種恢復模式的不同點。快速的比較有:SQL Server完整模式對應于Oracle中的歸檔模式;簡單模式對應于非歸檔模式;bulk模式與使用直接路徑插入,添加提示,或者與nologging模式操作類似。 本文出自:億恩科技【www.czbl888.cn】 |