有一個法則叫“九法則”,人和高可用性解決方案的終極目標是五九法則,即99.999%,這樣每年只有比5分鐘多一點的死機時間。目前災難恢復一詞已經不再受人們歡迎。人們更喜歡使用的詞是業務連續性business continuity。其思想是希望防止系統變得不可用,如果服務確實失敗,使其對環境的影響最小。這篇文章介紹的高可用性解決方案可以幫助在停機事件中維護業務連續性。
故障轉移集群
SQL Server集群基於Windows服務集群服務,集群的工作方式是在兩個或多個服務器(稱為節點)作為一個單獨的虛擬服務器為終端用戶服務。
如果要開始集群的話,需要兩台服務器,還需要一個共享的存儲設備。串行聯接SCSI,光纖通道和iSCSI是許多集群存儲設備的常用接口。如果選擇在集群解決方案中使用iSCSI,那麼需要確保對於Windows網絡適配器相分離的iSCSI聯接采用一個專用的網絡接口卡。如果使用Windows Server 2008,確保使用一個兼容的存儲設備。在這個設備上將至少創建兩個卷。一個卷將作見證磁盤,保存集群配置信息。而對於應用程序,將需要一個或多個數據卷。此外,要使集群起作用,需要為它定義一個虛擬服務器。該虛擬服務器在客戶端和終端應用程序看來是一個服務器。它有一個唯一名稱和IP地址,可以將SQL Server安裝在這個虛擬服務器上。
主動/被動集群:在主動/被動集群中,對於單個應用程序,有一個節點被指派為主節點,所有進入該集群虛擬服務器的請求都被導向至主節點。輔助節點時故障轉移節點,只有在主節點不可用且其中沒有檢測信號時,他們被變成主動的。當這種情況發生時,一個輔助節點會開始接收集群的工作,使得應用程序繼續運行而幾乎沒有明顯的中段。
主動/主動集群:主動/主動集群是這樣一幅場景,其中運行著許多個集群感知的應用程序,而且每個應用程序都有一個不同的節點被配置為該應用程序的主節點。這主要是受數據庫和其他應用程序服務的工作方式的限制。例如,如果只關注SQL Server,那麼每次只有一個服務器可以寫主動事務日志。由於其他節點無法寫入同一事物日志,他們還能做什麼呢?可以配置另一個虛擬服務器,把一個現有的備用節點配置為該虛擬服務器的主節點,然後在該服務器上安裝另一個SQL Server實例。假如,假定您有兩個服務器,節點A和節點B,節點A是集群服務器1的主節點,節點B是它的輔助節點。您決定使用這兩個服務器創建一個叫做集群服務器2的輔助虛擬服務器。只有在這個時候節點B才是主節點,而節點A是輔助節點。要想使主動/主動集群發揮作用,那麼如果兩個虛擬服務器都出現故障,備用服務器必須能夠處理他們兩個加起來的工作量。因此,如果服務器A死機了,服務器B就必須能夠響應針對兩個虛擬服務器的客戶端請求。
日志傳送
日志傳送時用於維護業務連續性的另一種方法。和故障轉移集群不一樣,日志傳送時基於每台數據庫進行管理的。它允許指定一個或多個服務器來存儲某數據庫的輔助副本。其實現方法是 先常規備份事務日志,然後把這些備份還原到一個輔助服務器上。
准備日志傳送:首選確定主服務器和備用服務器之間存在可靠的網絡連接。其次,確保數據庫使用了完整恢復模式;還需要確保備用服務器上不存在目標數據庫。
使用SQL Server Management Studio配置日志傳送:右擊該數據庫,選擇任務-傳送事務日志命令。在事務日志傳送頁面上,可以配置備份數據庫,指定輔助服務器和監視服務器所需的選項。首先,必須把這個數據庫啟用為日志傳送的主服務器。單擊“備份設置”將會出現一個新的窗口,允許指定備份操作的位置和頻率。如果有多個輔助服務器,而且希望在其中一個輔助服務器升級為主服務器之後繼續使用備用輔助服務器,那麼可以考慮把備份文件夾放在所有服務器都可以訪問的共享位置上,但要確保當主服務器上發生一般的服務故障時,該位置不會受到影響。一旦配置了備份作業設置,就可以配置一個或多個輔助服務器。可以將輔助服務器配置為熱備用服務器,使之處於NO RECOVERY狀態,直至出現故障轉移,或者也可以把它們配置為數據庫的一個只讀副本。
要配置一個新的輔助服務器,可以在事務日志傳送頁面上單擊添加按鈕。如果用於故障轉移,那麼輔助服務器的名稱應當和主服務器一致,這樣可以避免重新配置客戶端應用程序。然後還可以配置數據庫初次還原的選項。在復制文件選項卡中,可以配置有關文件復制任務的選項。可以創建一個新的作業,把備份操作創建的文件復制到輔助服務器上的目標文件夾中。在還原事務日志選項卡中可以配置還原操作,包括恢復模式,頻率和使用備用數據庫的任務。還可以配置延遲還原操作以保證備份及復制操作有機會完成,並制定在多長時間內如果沒有執行還原就發出警報,還可以為還原任務配置適當的計劃。
另外,也可以配置服務器來監視日志傳送操作,但並不是必須這麼做。該服務器應該是一個不直接參與日志傳送過程的SQL Server。要添加監視服務器,可以在事務日志傳送頁面上選擇“使用監視服務器實例”,然後單擊設置按鈕添加和配置新的服務器。在配置了日志傳送監視器之後,也可以使用它來查看該服務器監視的所有日志傳送數據庫的報表。為此,可以在對象資源管理器中右擊服務器名稱,選擇報表-標准報表-事務日志傳送狀態命令。
一旦配置了日志傳送選項,就可以把它們應用到數據庫,如果所有的配置都正確,備份就會立刻開始。
使用Transact-SQL配置日志傳送:直接上實例代碼
- -- Execute the following statements at the Primary to configure Log Shipping
- -- for the database [AUGHTEIGHT].[AdventureWorks2008],
- -- The script needs to be run at the Primary in the context of the [msdb] database.
- --------------------------------------------------------------
- Adding the Log Shipping configuration
- -- ****** Begin: Script to be run at Primary: [AUGHTEIGHT] ******
- DECLARE @LS_BackupJobId AS uniqueidentifIEr
- DECLARE @LS_PrimaryId AS uniqueidentifIEr
- DECLARE @SP_Add_RetCode As int
- EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database
- @database = N'AdventureWorks2008'
- ,@backup_directory = N'\\AughtEight\SQLLogs'
- ,@backup_share = N'\\AughtEight\SQLLogs'
- ,@backup_job_name = N'LSBackup_AdventureWorks2008'
- ,@backup_retention_period = 4320
- ,@backup_compression = 1
- ,@monitor_server = N'AUGHTEIGHT\HOTH'
- ,@monitor_server_security_mode = 1
- ,@backup_threshold = 60
- ,@threshold_alert_enabled = 1
- ,@history_retention_period = 5760
- ,@backup_job_id = @LS_BackupJobId OUTPUT
- ,@primary_id = @LS_PrimaryId OUTPUT
- ,@overwrite = 1
- IF (@@ERROR = 0 AND @SP_Add_RetCode = 0)
- BEGIN
- DECLARE @LS_BackUpScheduleUID As uniqueidentifIEr
- DECLARE @LS_BackUpScheduleID AS int
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name =N'LSBackupSchedule_AUGHTEIGHT1'
- ,@enabled = 1
- ,@freq_type = 4
- ,@freq_interval = 1
- ,@freq_subday_type = 4
- ,@freq_subday_interval = 15
- ,@freq_recurrence_factor = 0
- ,@active_start_date = 20081111
- ,@active_end_date = 99991231
- ,@active_start_time = 0
- ,@active_end_time = 235900
- ,@schedule_uid = @LS_BackUpScheduleUID OUTPUT
- ,@schedule_id = @LS_BackUpScheduleID OUTPUT
- EXEC msdb.dbo.sp_attach_schedule
- @job_id = @LS_BackupJobId
- ,@schedule_id = @LS_BackUpScheduleID
- EXEC msdb.dbo.sp_update_job
- @job_id = @LS_BackupJobId
- ,@enabled = 1
- END
- EXEC master.dbo.sp_add_log_shipping_primary_secondary
- @primary_database = N'AdventureWorks2008'
- ,@secondary_server = N'AUGHTEIGHT\DAGOBAH'
- ,@secondary_database = N'AdventureWorks2008'
- ,@overwrite = 1
- -- ****** End: Script to be run at Primary: [AUGHTEIGHT] ******
- -- Execute the following statements at the Secondary to configure Log Shipping
- -- for the database [AUGHTEIGHT\DAGOBAH].[AdventureWorks2008],
- -- the script needs to be run at the Secondary in the context of the
- -- [msdb] database.
- ----------------------------------------------------------------------------
- -- Adding the Log Shipping configuration
- -- ****** Begin: Script to be run at Secondary: [AUGHTEIGHT\DAGOBAH] ******
- DECLARE @LS_Secondary__CopyJobId AS uniqueidentifIEr
- DECLARE @LS_Secondary__RestoreJobId AS uniqueidentifIEr
- DECLARE @LS_Secondary__SecondaryId AS uniqueidentifIEr
- DECLARE @LS_Add_RetCode As int
- EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary
- @primary_server = N'AUGHTEIGHT'
- ,@primary_database = N'AdventureWorks2008'
- ,@backup_source_directory = N'\\AughtEight\SQLLogs'
- ,@backup_destination_directory = N'C:\CopIEdLogs'
- ,@copy_job_name = N'LSCopy_AUGHTEIGHT_AdventureWorks2008'
- ,@restore_job_name = N'LSRestore_AUGHTEIGHT_AdventureWorks2008'
- ,@file_retention_period = 4320
- ,@monitor_server = N'AUGHTEIGHT\HOTH'
- ,@monitor_server_security_mode = 1
- ,@overwrite = 1
- ,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT
- ,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT
- ,@secondary_id = @LS_Secondary__SecondaryId OUTPUT
- IF (@@ERROR = 0 AND @LS_Add_RetCode = 0)
- BEGIN
- DECLARE @LS_SecondaryCopyJobScheduleUID As uniqueidentifIEr
- DECLARE @LS_SecondaryCopyJobScheduleID AS int
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name =N'DefaultCopyJobSchedule'
- ,@enabled = 1
- ,@freq_type = 4
- ,@freq_interval = 1
- ,@freq_subday_type = 4
- ,@freq_subday_interval = 15
- ,@freq_recurrence_factor = 0
- ,@active_start_date = 20081111
- ,@active_end_date = 99991231
- ,@active_start_time = 0
- ,@active_end_time = 235900
- ,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT
- ,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT
- EXEC msdb.dbo.sp_attach_schedule
- @job_id = @LS_Secondary__CopyJobId
- ,@schedule_id = @LS_SecondaryCopyJobScheduleID
- DECLARE @LS_SecondaryRestoreJobScheduleUID As uniqueidentifIEr
- DECLARE @LS_SecondaryRestoreJobScheduleID AS int
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name =N'DefaultRestoreJobSchedule'
- ,@enabled = 1
- ,@freq_type = 4
- ,@freq_interval = 1
- ,@freq_subday_type = 4
- ,@freq_subday_interval = 15
- ,@freq_recurrence_factor = 0
- ,@active_start_date = 20081111
- ,@active_end_date = 99991231
- ,@active_start_time = 0
- ,@active_end_time = 235900
- ,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT
- ,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT
- EXEC msdb.dbo.sp_attach_schedule
- @job_id = @LS_Secondary__RestoreJobId
- ,@schedule_id = @LS_SecondaryRestoreJobScheduleID
- END
- DECLARE @LS_Add_RetCode2 As int
- IF (@@ERROR = 0 AND @LS_Add_RetCode = 0)
- BEGIN
- EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database
- @secondary_database = N'AdventureWorks2008'
- ,@primary_server = N'AUGHTEIGHT'
- ,@primary_database = N'AdventureWorks2008'
- ,@restore_delay = 0
- ,@restore_mode = 1
- ,@disconnect_users = 1
- ,@restore_threshold = 45
- ,@threshold_alert_enabled = 1
- ,@history_retention_period = 5760
- ,@overwrite = 1
- END
- IF (@@error = 0 AND @LS_Add_RetCode = 0)
- BEGIN
- EXEC msdb.dbo.sp_update_job
- @job_id = @LS_Secondary__CopyJobId
- ,@enabled = 1
- EXEC msdb.dbo.sp_update_job
- @job_id = @LS_Secondary__RestoreJobId
- ,@enabled = 1
- END
- -- ****** End: Script to be run at Secondary: [AUGHTEIGHT\DAGOBAH] ******
配置故障轉移:要配置主服務器和輔助服務器之間的故障轉移,可以使用下列步驟:如果備份共享中有任何為復制的備份文件,需要把它們復制到每個輔助服務器上的復制目標;把所有剩下的事務日志按順序應用到每個輔助數據庫上;如有可能,在主數據庫上執行活動事務日志的備份,復制該備份,然後將其應用到每個備用數據庫中;如果主服務器仍然可以操作,那麼故障轉移完成時可以將主數據庫配置為新的輔助數據庫,使用NO RECOVERY選項在主數據庫上備份事務日志有助於完成這項工作;把數據庫設置為恢復模式,選擇一個輔助服務器來主流新的主數據庫。
如果有額外的輔助服務器,則可以將新恢復的數據庫配置為額外輔助數據庫的主數據庫,並使原來的主數據庫成為一個新的輔助數據庫,執行下列步驟來進行角色轉換:禁用原主服務器上的備份作業;禁用原輔助服務器上的復制和還原作業;對新的主數據庫的備份使用為原主數據庫創建的共享;添加原數據庫作為一個輔助數據庫;在原數據庫的輔助數據庫選項中,指定該數據庫已經初始化,這樣就沒有必要進行完整還原。
由於日志傳送是基於每個數據庫配置的,因此可能需要執行一些額外的任務以確保用戶能夠一致地訪問該數據庫,即便發生了故障轉移。首先,客戶端使用的應用程序必須知道這一更改。這可能要求手動配置應用程序使用新的主服務器或將舊的服務器名稱重新指派為新服務器的別名。另外,要確保應用程序對數據庫的一致訪問,將需要確保已經遷移了該數據庫所有關聯的元數據,包括SQL Server登錄名、作業和報警等。由於日志傳送有一些限制,創建只讀備用服務器很好,但是它對於故障轉移來說只是一個一般的解決方案。
數據庫鏡像
數據庫鏡像與日志傳送非常相似,即事務日志記錄是從源數據庫發送到目標數據庫。不過,和基於文件復制的事務日志不同的是,單獨的日志記錄是基於事務發送的。盡管數據庫鏡像也是一個數據庫級別的冗余解決方案,但它依賴於服務間不斷通信來維護事務完整性。數據庫鏡像還提供了一個在配置了另外一個見證服務器時自動並且幾乎瞬時故障轉移的額外好處。數據庫鏡像的配置是通過在駐留主體數據庫的服務器和主流鏡像數據庫的服務器之間建立合作關系完成的。兩者之間的通信通過使用SQL Server端點建立和維護,而不是使用文件系統作為維護兩個服務器之間的一致性方法。日志傳送和數據庫鏡像的另外一個主要區別是,數據庫鏡像限制每個數據庫智能有一個主題服務器和一個鏡像服務器。
數據庫鏡像配置中的3個服務器角色如下:主體服務器、鏡像服務器、見證服務器(可選)。在使用數據庫鏡像時,客戶端請求無法直接訪問鏡像數據庫,因為它一直處於恢復事務日志記錄的狀態下。但是,可以通過創建鏡像數據庫的數據庫快照配置間接訪問。還要注意,數據庫鏡像不能與啟用了FILESTREAM存儲的數據庫一起使用。
客戶端重定向:數據庫鏡像的優勢之一是如果主體數據庫出現故障,客戶端可以被自動重定向到鏡像服務器。然而,自動重定向不是基於服務器的功能。通過添加Failover Partner屬性,可以將客戶端的聯接字符串配置為與鏡像的數據庫一起工作,如果聯接Server屬性標識的服務器失敗,那麼它會嘗試連接由Failover Partner屬性標識的數據庫,反之亦然,如果聯接故障轉移伙伴不可用,就會嘗試連接原服務器
Server=AughtEight;Failover Partner=Dagobah;Database=AdventureWorks2008
數據庫鏡像模式:數據庫可以被配置為使用高性能模式、不支持自動故障轉移的高安全性模式以及支持故障轉移的高安全性模式。高性能模式使用異步處理,當主體服務器把事務日志記錄發送到鏡像服務器之後,會立刻向客戶端應用程序發送一個事務成功的確認,但是不會等待鏡像服務器確認接收日志記錄。在高性能模式下,不存在自動故障轉移也不需要見證服務器,因為主題服務器出現故障時仍然會要求強制執行鏡像服務器上的數據庫服務。一旦原來的主主體服務器恢復服務,它會配置自身為鏡像服務器,但是鏡像會話仍然會處於SUSPENDED狀態,除非管理員明確要求恢復。不支持自動故障轉移的高安全性模式中,在鏡像服務器確認收到了相應的事務日志記錄之前,主體服務器不會給客戶端發送事務成功的確認消息。該模式中沒有自動故障轉移,也沒有見證服務器,主體數據庫出現故障後要求手動強制見證服務器上的服務器提升其主體。在鏡像服務器出現故障的情況下,客戶端仍然可以使用主體服務器,但是鏡像會話會處於斷開連接的狀態。支持自動故障轉移的高安全性模式中,見證服務器用於提供自動故障轉移。見證服務器不直接參與鏡像過程,而是作為兩個服務器之間的監督員,只要三個參與此模式的服務器中有兩個能夠保證連接性,那麼數據庫就會對客戶端請求可用。當兩個服務器就鏡像會話的狀態取得一致時,這就被叫做仲裁,如果鏡像或主體服務器丟失了仲裁,鏡像配置也會相應的改變。
使用SQL Server Management Studio配置數據庫鏡像:打開數據庫屬性-鏡像頁面,或者從任務-鏡像菜單打開這個頁面,單擊配置安全性按鈕啟動向導,要求為主體、鏡像和見證服務器端點提供聯接選項。單擊下一步進入下一頁面,向導會詢問是否要配置一個見證服務器;向導的下一頁面要求標識在這個向導裡要配置的服務器,您需要檢查所有參與的服務器,包括見證服務器(如果使用了的話)。進入下一頁面,配置主體服務器的選項;接下來需要為鏡像服務器配置同樣的信息,注意,擋在每個服務器上創建端點時,必須有在端點上創建和配置安全性的適當權限;如果配置了見證服務器,下一頁面要求為見證服務器提供服務器名稱和端點配置,其中需要注意一點,即如果同一物理服務器上有多個角色,那麼端口號必須butong.youyu數據庫鏡像起作用的條件中並不要求所有的及其都采用相同的配置,甚至不要求他們是同一個域中的成員,所以向導允許為每個服務器指定賬戶信息。輸入這些信息後,就可以通過向導的摘要頁面查看配置。如果對設置感到滿意,可以單擊完成按鈕來創建端點,如有必要,應用合適的權限。在完成向導後,SQL Server會提示立刻開始鏡像還是延遲鏡像。如果確定配置是正確的,並且鏡像服務器和主體服務器時一致的,那麼就可以單擊按鈕開始鏡像。
使用T-SQL配置鏡像數據庫:為了進行數據庫鏡像,執行下列命令創建一個不使用加密的端點
- -- Create DB Mirroring Endpoint
- USE Master;
- GO
- CREATE ENDPOINT MirroringEndPoint
- STATE = STARTED
- AS TCP ( LISTENER_PORT = 5022 )
- FOR DATABASE_MIRRORING (ROLE=PARTNER)
- GO
在主體服務器和鏡像服務器上執行此語句會創建可用於鏡像的同樣的端點。如果只是測試鏡像,並且沒有使用一個單獨的物理服務器,那麼只要這些端點使用不同的端口號,就可以安裝另一個實例來鏡像數據庫。在使用一個見證服務器時,在見證實例上執行下列命令來創建合適的端點:
- -- Create Witness Endpoint
- USE Master;
- GO
- CREATE ENDPOINT WitnessEndPoint
- STATE = STARTED
- AS TCP ( LISTENER_PORT = 5024 )
- FOR DATABASE_MIRRORING (ROLE=WITNESS)
- GO
創建數據庫鏡像的額外選項允許指定身份驗證和加密選項,要創建一個使用Windows身份驗證和AES加密的新端點,可以使用下列代碼
- -- Create Witness Endpoint with encryption
- USE Master;
- GO
- CREATE ENDPOINT WitnessEndPoint
- STATE = STARTED
- AS TCP ( LISTENER_PORT = 5024 )
- FOR DATABASE_MIRRORING (AUTHENTICATION = Windows NEGOTIATE,
- ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = WITNESS);
- GO
在創建了端點後,下一步就是建立鏡像。只需要把每個服務器上的數據庫指向目標伙伴即可。這將通過使用一個ALTER DATABASE語句來完成:
- -- Begin by configuring the Mirror database
- USE Master;
- GO
- ALTER DATABASE AdventureWorksLT2008
- SET PARTNER = 'TCP://AUGHTEIGHT:5022';
- -- Execute this statement on the principal server
- -- to specify the endpoint for the mirror
- USE Master;
- GO
- ALTER DATABASE AdventureWorksLT2008
- SET PARTNER = 'TCP://AUGHTEIGHT:5023';
- -- Execute this statement on the principal server
- -- to specify the endpoint for the witness
- USE Master;
- GO
- ALTER DATABASE AdventureWorksLT2008
- SET WITNESS = 'TCP://AUGHTEIGHT:5024';
當主體和鏡像服務器都被配置為互相認識時,鏡像進程就會開始,默認情況下數據庫鏡像被配置為使用同步模式,但是可以在鏡像開始之後通過在主體服務器上執行下列語句更改這一模式
- -- Turn of Synchronous mode
- USE Master;
- GO
- ALTER DATABASE AdventureWorksLT2008
- SET PARTNER SAFETY OFF;
監視數據庫鏡像:從數據庫的任務菜單中選擇啟動數據庫鏡像監視器命令,打開一個新窗口。默認情況下,您將會進入從中啟動工具的數據庫的狀態頁面;不過,也可以通過單擊導航樹中的數據庫鏡像監視器鏈接額外注冊的鏡像集。在注冊頁面上,單擊利娜姐按鈕聯接主體或鏡像服務器,使用合適的身份驗證和聯接選項。然後將會看到該實例上被鏡像的數據庫的列表,選擇合適的數據庫進行注冊,然後單擊確定按鈕;如果需要在主體和鏡像服務器之間使用不同的身份驗證平局,可以選中“當單擊確定後,顯示管理服務器連接對話框”復選框來指定每個服務器鏈接的選項。單擊警告選項卡可以查看或配置當前基於鏡像條件生成警報的設置
管理數據庫鏡像:暫停鏡像會話,如果數據庫相應中的延遲比較嚴重,原因可能是由必須維持主體和鏡服務器之間不斷通信的額外工作造成的,這時候可能需要考慮暫停那些通信。使用SSMS,浏覽數據庫屬性的鏡像頁面,單擊暫停按鈕即可。或者使用TSQL的SET PARTNER SUSPEND執行ALTER DATABASE語句
- -- Suspend a mirror
- USE Master;
- ALTER DATABASE AdventureWorksLT2008 SET PARTNER SUSPEND;
- GO
恢復鏡像會話,可在SSMS中單擊恢復按鈕,或者使用SET PARTNER RESUME選項執行ALTER DATABASE語句來恢復
- -- Resume a Mirror
- USE Master;
- ALTER DATABASE AdventureWorksLT2008 SET PARTNER RESUME;
- GO
手動故障轉移:不管鏡像的操作如何,都可以隨時通過SQL Server Management Studio或TSQL手動啟動故障轉移。在啟動故障轉移是,任何連接到原主體服務器的客戶端都會被立刻斷開,而鏡像服務器會變成在線。如果原來的主體服務器仍在線,那麼它就會變成鏡像服務器,並一直處於NO RECOVERY狀態,直到再次執行故障轉移。要想通過SQL Server Management Studio啟動故障轉移,在主體數據庫的鏡像屬性頁面上單擊故障轉移按鈕即可,SQL 會處理剩下的工作。如果需要將之前的主體數據庫還原至主體狀態,則必須連接到新的主體數據庫,然後單擊數據庫屬性上的故障轉移按鈕。由於數據庫鏡像進復制特定數據庫的內容,因此在故障轉移之前或剛剛發生故障轉移時,特定的服務器范圍的資源必須在服務器上可用,因此,在使用數據庫鏡像時,最好創建一個Integration Services包,它將定期復制額外的對象。要使用TSQL手動故障轉移,必須連接到主體服務器,然後執行下列代碼
- -- Manual Failover
- USE Master;
- ALTER DATABASE AdventureWorksLT2008 SET PARTNER FAILOVER;
- GO
強制鏡像服務器上的服務:當處於高性能或不支持自動故障轉移的高安全性模式下,一旦主體服務器發生故障,鏡像服務器不是自動可用的,要強制鏡像服務器提升自己並響應客戶端請求,可以在鏡像服務器上發出下列命令:
- -- Manual Failover
- USE Master;
- ALTER DATABASE AdventureWorksLT2008 SET PARTNER FAILOVER;
- GO
取消數據庫鏡像:一旦不再需要某個數據庫鏡像的話,就可以中段鏡像。中斷鏡像允許兩個參與的服務器維護該數據庫的一份副本。主體服務器會保持在線,而鏡像服務器將處於恢復模式。中段鏡像不會刪除、移除或更改端點,這一點非常好,因為他們仍然可以被使用數據庫鏡像的其他數據庫使用。。通過SSMS中斷鏡像可以單擊主體數據庫的鏡像屬性頁面上的取消鏡像按鈕,如果使用TSQL的話,可以使用ALTER DATABASE語句中的SET PARTNER OFF選項:
- -- Remove mirror
- USE Master;
- ALTER DATABASE AdventureWorksLT2008 SET PARTNER OFF;