目前最新的SQL Server 2012主要提供兩種熱備技術(shù),分別是最為強大的AlwaysOn實時熱備架構(gòu),以及數(shù)據(jù)庫鏡像熱備架構(gòu)。
前者需部署在以Windows Server容錯移動群集(WSFC)的基礎(chǔ)上,并且只有SQL Server 2012企業(yè)版才支持。
而后者則只要針對個別需要啟用鏡像的數(shù)據(jù)庫進行設(shè)置即可,并且無論是企業(yè)版還是標(biāo)準(zhǔn)版皆有支持,不過若采用標(biāo)準(zhǔn)版則僅能夠以手動方式來進行容錯切換,主要是因為在架構(gòu)上少了第三部見證服務(wù)器(Witness)的SQL Server角色。
關(guān)于數(shù)據(jù)庫鏡像熱備架構(gòu)的設(shè)計,若是搭配前端的Web應(yīng)用程序來規(guī)劃,在實務(wù)上有兩種作法可以來實踐。
首先第一種是最簡單的方法,將Web應(yīng)用程序同時安裝在兩部SQL Server的主機上,不過缺點是一旦Web程序需要更新時,則兩部主機都必須一起進行更新才行,但部署成本最低廉。
至于第二種作法,則是將前端Web應(yīng)用程序主機與后端的兩部SQL Server主機分開部署,此時前端Web應(yīng)用程序中的聯(lián)機字符串,必須設(shè)置好主要與熱備的SQL Server聯(lián)機,如此一來才能夠在主要的SQL Server主機服務(wù)停止運作時,自動切換到熱備的SQL Server主機服務(wù),但這種規(guī)劃方式也需要后端的SQL Server容錯熱備的速度夠快才行,因此肯定較適合應(yīng)用在以企業(yè)版SQL Server 2012為主的數(shù)據(jù)庫鏡像架構(gòu)中,整體來看這樣的規(guī)劃成本,也會高出第一種作法許多。
針對SQL Server 2012的熱備容錯設(shè)計其實做法有很多種,這必須根據(jù)實際的應(yīng)用需求來決定,并且不一定得要使用SQL Server 2012本身所提供的功能來完成,必要的話也可在結(jié)合虛擬化技術(shù)或其它第三方解決方案來處理。在此筆者歸類以下幾種常見的作法供大家參考:
1.最新結(jié)合Windows Server容錯移動群集(WSFC)的SQL Server 2012 AlwaysOn技術(shù)。
2.SQL Server 2012可獨立完成的數(shù)據(jù)庫鏡像熱備架構(gòu)。可選擇采用企業(yè)版或標(biāo)準(zhǔn)版的架構(gòu)設(shè)計,前者可做到全自動化熱備,后者可以手動進行容錯切換。
3.采 用Hyper-v 3.0或Hyper-v 3.0 R2虛 擬機的快速移動(Quicker Migration)架構(gòu)。
4.采 用Hyper-v 3.0或Hyper-v 3.0 R2虛擬機的復(fù)寫熱備(HVR,Hyper-v Replica)架構(gòu)。
5.采用第三方廠商的虛擬平臺或其它儲存端熱備方案,這包含了以軟件或硬件的熱備機制。
如果您尚未購買SQL Server 2012的標(biāo)準(zhǔn)版授權(quán),則您可以到官方網(wǎng)站來下載簡體中文的試用版。未來如果要轉(zhuǎn)換成正式版,只要再一次執(zhí)行安裝程序,然后在[SQL Server安裝中心]的[維護]節(jié)點頁面中,通過版本升級功能來完成更新與轉(zhuǎn)換即可。下面學(xué)習(xí)SQL Server 2012標(biāo)準(zhǔn)版的安裝與設(shè)置技巧。
當(dāng)執(zhí)行了SQL Server 2012的安裝程序時,系統(tǒng)會先檢查是否已安裝了.NET Framework和Windows Installer,如果還沒有安裝則會自動安裝,然而.NET Framework的安裝需要重新啟動操作系統(tǒng)。
如果Windows Installer安裝也需要重新啟動,則安裝程序會等 到.NET Framework和Windows Installer組件安裝之后才會重新啟動。
完成兩個預(yù)先的組件安裝之后,接下來您必須在SQL Server安裝中心頁面中點擊至[安裝]的頁面,然后便可以在[安裝]的頁面中點擊[添加SQL Server獨立安裝或?qū)⒐δ芗尤氲浆F(xiàn)有安裝]的連接。
接下來在[產(chǎn)品密鑰]的頁面中,如果您還在測試階段,可以在選定免費版本的下拉選單中,選擇安裝Enterprise Evaluation、Express或是Express with Advanced Services。如果是已購買正式的版本,當(dāng)然可以直接輸入25碼合法的產(chǎn)品密鑰。點擊[下一步]繼續(xù)。
在[安裝程序支持規(guī)則]的頁面中,只要檢查結(jié)果的清單中沒有出現(xiàn)錯誤的訊息,那么表示仍然是可以繼續(xù)完成安裝的。假設(shè)您將SQL Server 2012安裝在域控制器的主機,便會出現(xiàn)警告訊息,
注意:當(dāng)SQL Server 2012安裝到此計算器上以后,您便不能夠?qū)⒋擞嬎闫鲝挠蚩刂破髯兂删W(wǎng)域成員服務(wù)器,除非您在將主機計算器變更為網(wǎng)域成員服務(wù)器之前,先完成卸載SQL Server 2012。
此外,由于SQL Server 2012安裝程序,無法在Windows Server只讀的域控制器角色上,來創(chuàng)建安全性組或提供SQL Server服務(wù)賬戶,因此在這種狀況下安裝程序?qū)l(fā)生失敗。
在[安裝程序角色]頁面中,一般我們都會選取[SQL Server功能安裝],來自定義所要安裝的細部功能項目,如果想要快速安裝所有功能,則可以選取[所有功能皆使用默認值]。點擊[下一步]。
在[特征選取]頁面中,可以勾選所要安裝的功能項目。一般來說如果只需要使用到數(shù)據(jù)庫的管理功能,只要將[Database Engine Services]與其下子項目勾選,然后再勾選所有共享功能項目即可,其中[管理工具]請務(wù)必安裝,以便于后續(xù)進行本地的聯(lián)機管理。點擊[下一步]。
接下來在[實例配置]頁面中,對于在本地所安裝的第一個SQL Server,建議采用默認的實例名稱即可,往后如果需要加裝第二個以上的實例,則必須額外命名新的實例名稱。點擊[下一步]繼續(xù)。
何謂SQL Server實例?所謂的實例(Instance)擁有它們自己專屬的目錄結(jié)構(gòu)、登錄結(jié)構(gòu)以及服務(wù)名稱,因此可以管理各自旗下的數(shù)據(jù)庫、權(quán)限配置、安全設(shè)置以及資源分配的配置,在相同一部計算器的操作系統(tǒng)中最多可以有50個實例,并且皆可以是不同版本的實例,在系統(tǒng)默認的安裝下第一個實例微計算器名稱本身,而后續(xù)所安裝的實例則需要而外命名。
在[磁盤空間需求]的頁面中,便會根據(jù)您前面所勾選的功能項目,來決定所需要準(zhǔn)備的磁盤空間。在[服務(wù)器配置]的頁面中,必須設(shè)置不同服務(wù)所相對的啟動帳戶與密碼以及啟動類型。
如果想要快速完成設(shè)置可以點擊[所有SQL Server服務(wù)都使用相同的帳戶]按鈕。這一些設(shè)置后續(xù)都是可以自行變更的。
注意:您無法以本地服務(wù)賬戶或網(wǎng)絡(luò)服務(wù)賬戶,來執(zhí)行域控制器上的SQL Server服務(wù)。
在[數(shù)據(jù)庫引擎配置]頁面中,首先在[服務(wù)器配置]的頁簽中,必須分別設(shè)置所要采用的驗證模式,并且選定SQL Server管理員。
舉例來說,如果您現(xiàn)在是以網(wǎng)域管理員的身分登錄此 Windows Server,那么當(dāng)您點擊[加入目前的用戶]按鈕時,此用戶便會成為SQL Server的管理員,當(dāng)然您也可以點擊[加入]按鈕繼續(xù)其他用戶來成為SQL Server管理員。
接著在[數(shù)據(jù)目錄]的頁面中,建議您將系統(tǒng)數(shù)據(jù)庫目錄與用戶數(shù)據(jù)庫、備份目錄,分開選定在不同的磁盤路徑中。點擊[下一步]。在 [準(zhǔn)備安裝]頁面中,可以看到準(zhǔn)備進行安裝的所有組件以及功能,確認無誤之后點擊[安裝]即可。
至于后續(xù)對于現(xiàn)有SQL Server實例的功能添加或移除,只要從[控制面板]中的[程序和功能]界面來完成即可。
當(dāng)成功完成全新SQL Server 2012實例,以及所需要的功能安裝后,請點擊[關(guān)閉]。緊接著可能會出現(xiàn)[必須重新啟動計算器]的訊息,請點擊[確定]并且完成重新啟動。
在SQL Server 2012成功完成安裝后,首先讓請開啟位在[開始][所有程 序][ Microsoft SQL Server 2012 ]下的[SQL Server Management Studio]繼續(xù)。接著可分別輸入所要聯(lián)機的服務(wù)器名稱與驗證方式。
注意:如果是其它額外的實例名稱而非默認值,可輸入[服務(wù)器名稱實例名稱]格式在服務(wù)器名稱字段中。
想要開始來創(chuàng)建數(shù)據(jù)庫鏡像的熱備機制,首先必須將準(zhǔn)備鏡像的來源數(shù)據(jù)庫進行備份。
然后將此備份還原到擔(dān)任第二部鏡像主機的SQL Server實例之中。在來源主機的SQL Server 2012數(shù)據(jù)庫項目節(jié)點上按下鼠標(biāo)右鍵點擊[工作][備份]繼續(xù)。
在[備份數(shù)據(jù)庫]頁面中設(shè)置[備份類型]為[完整],然后在目的地設(shè)置中,點擊[加入]按鈕來輸入準(zhǔn)備用來存放備份文件的路徑與文件名。最后在[選項]的頁面中選取[覆寫所有現(xiàn)有的備份集]。
接著在擔(dān)任SQL Server 2012鏡像主機的實例上的[數(shù)據(jù)庫]項目上,按下鼠標(biāo)右鍵點擊[還原數(shù)據(jù)庫]。在[一般]頁面中,先在[來源]區(qū)域中選取[裝置]。
然后點擊瀏覽按鈕來加載前面步驟中的備份文件,并且將它的還原備份集項目勾選。
在讀取備份裝置時的設(shè)置頁面時,請記得在[備份媒體類型]中必須選取[文件],然后再點擊[加入]按鈕來選取備份文件,完成加入后點擊[確定]。在[文件]的頁面中,可采用默認的數(shù)據(jù)庫還原路徑,或是選擇自定義的還原路徑。
在[選項]的頁簽中,將復(fù)原狀態(tài)的設(shè)置選項變更為[RESTORE WITH NORECOVERY]后再進行還原即可。當(dāng)成功將完整備份的數(shù)據(jù)庫,還原至另一部擔(dān)任鏡像的SQL Server 2012主機后,便可發(fā)現(xiàn)該數(shù)據(jù)庫的狀態(tài)是顯示為[正在還原...]。
如果狀態(tài)不是顯示如此,那么即表示在前面步驟中,您沒有將復(fù)原狀態(tài)選項設(shè)置為[RESTORE WITH NORECOVERY]。
在確認已準(zhǔn)備好網(wǎng)域中的兩部SQL Server 2012實例,并且也完成了選定數(shù)據(jù)庫的相關(guān)備份與設(shè)置作業(yè)之后。接著請回到主要服務(wù)器的SQL Server 2012實例中,在準(zhǔn)備進行鏡像熱備的數(shù)據(jù)庫項目上,按下鼠標(biāo)右鍵點擊[工作][鏡像]繼續(xù)。
圖1 鏡像設(shè)置
如圖1所示便是SQL Server 2012數(shù)據(jù)庫鏡像的管理頁面,在默認的狀態(tài)下是沒有任何設(shè)置的,我們可以從狀態(tài)區(qū)位中檢視到目前數(shù)據(jù)庫鏡像的信息,請點擊[設(shè)置安全性]按鈕繼續(xù)。
執(zhí)行[設(shè)置安全性]之后如果出現(xiàn)"這個數(shù)據(jù)庫未使用完整恢復(fù)模式,所以無法鏡像"的錯誤訊息,即表示這個數(shù)據(jù)庫在當(dāng)初設(shè)置完整備份時,沒有事先設(shè)置好恢復(fù)模式為[完整],該如何解決這個問題呢?請繼續(xù)往下閱讀。
想要修改數(shù)據(jù)庫的恢復(fù)模式,請開啟數(shù)據(jù)庫的屬性內(nèi)容頁面。接著點擊至[選項]頁面,然后從[恢復(fù)模式]下拉選單中挑選[完整]即可。
完成來源數(shù)據(jù)庫的恢復(fù)模式設(shè)置之后,請重新備份此數(shù)據(jù)庫并且還原至準(zhǔn)備擔(dān)任鏡像服務(wù)器的SQL Server 2012。
在成功執(zhí)行[設(shè)置安全性]后,接下來將會開啟[設(shè)置數(shù)據(jù)庫安全性向?qū)頁面,我們將會通過此向?qū)瓿捎嘘P(guān)于在數(shù)據(jù)庫鏡像中的三種服務(wù)器的基本聯(lián)機配置。點擊[下一步]繼續(xù)。
在[包含見證服務(wù)器]的頁面中,您可以決定是否要在數(shù)據(jù)庫鏡像的架構(gòu)當(dāng)中包含見證服務(wù)器的使用。
然而,有沒有見證服務(wù)器的差別主要是在自動容錯移動的機制上,換句話說當(dāng)您只需要以手動方式,來進行容錯移動的操作時,此角色是可以選擇不用設(shè)置的。
由于在我們實作講解的環(huán)境中,SQL Server 2012是標(biāo)準(zhǔn)版而非企業(yè)版,因此在接下來范例中我們以選取[否]設(shè)置來繼續(xù)。
在[主體服務(wù)器實例]頁面中,系統(tǒng)會預(yù)先選取好SQL Server的實例,而我們則可以確認接聽程序端口號碼與端點名稱,其中端點的名稱是可以輸入中文或英文。點擊[下一步]。
在[鏡像服務(wù)器實例]頁面中,您必須先手動設(shè)置好正確的SQL Server實例聯(lián)機,接著系統(tǒng)會自動偵測到它正確的端口號碼,在正常的情況下應(yīng)該也是5022,在此如果您因測試需要,而想要讓所有SQL Server實例在同一部主機上,那么端口就不能夠設(shè)置為5022。點擊[下一步]來繼續(xù)同樣完成見證服務(wù)器的聯(lián)機設(shè)置。
在[服務(wù)賬戶]的頁面中,如果需要使用不同網(wǎng)域與賬號的聯(lián)機登錄,則可以在此分別針對主體與鏡像進行設(shè)置,否則請直接點擊[下一步]完成設(shè)置即可。
當(dāng)成功完成數(shù)據(jù)庫鏡像安全性設(shè)置后,便在此可以檢視到不同SQL Server實例所擔(dān)任的角色,以及各自所使用的套接字口。點擊[完成]。
我們可以在[正在設(shè)置端點]的頁面中,檢視到目前每一個鏡像端點是否已經(jīng)設(shè)置成功。點擊[關(guān)閉]。
緊接著將會出現(xiàn)數(shù)據(jù)庫屬性警示訊息,主要詢問我們是否要立即啟動鏡像,您也可以不要啟動鏡像,等到之后再來手動啟動即可。
此外,在這個警示訊息中,我們也可以檢視到此作業(yè)模式為[不具有自動容錯移動的高安全性(同步)],這也正是符合SQL Server 2012標(biāo)準(zhǔn)版的鏡像架構(gòu)。當(dāng)系統(tǒng)在啟動鏡像功能的過程中,偵測到目前兩部SQL Server中的此數(shù)據(jù)庫恢復(fù)模式狀態(tài),如果不是處于完整恢復(fù)模式,便會出現(xiàn)錯誤訊息。
再一次又回到了數(shù)據(jù)庫鏡像設(shè)置的頁面了,如果尚未啟動鏡像功能,請點擊[啟動鏡像]按鈕即可正式進行數(shù)據(jù)庫鏡像作業(yè)。在[作業(yè)模式]區(qū)域中,目前是設(shè)置在[不具有自動容錯移動的高安全性(同步)],而在[狀態(tài)]列中則是顯示了[已同步處理:數(shù)據(jù)庫已完全同步],因此當(dāng)發(fā)生主要的SQL Server實例服務(wù)停擺,鏡像數(shù)據(jù)庫便需要手動接替才能夠恢復(fù)正常運作。
在所設(shè)置數(shù)據(jù)庫鏡像的數(shù)據(jù)庫名稱中,對于來源數(shù)據(jù)庫將顯示"主體,已同步處理"。而對于另一部SQL Server的目標(biāo)數(shù)據(jù)庫,則是顯示會"主體,已同步處理/正在還原"。未來如果有進行容錯切換,則兩個數(shù)據(jù)庫的狀態(tài)信息也會跟著對調(diào)。
如何知道端口在接聽的狀態(tài)下?在Windows Server操作系統(tǒng)上只要是想查看目前本地有哪一些端口(Port)正在進行接聽,都可以通過命令行的netstat命令工具搭配-an|find":5022"參數(shù)來完成檢查。
為確保未來如果真的發(fā)生主體數(shù)據(jù)庫主機故障時,可快速手動切換至熱備的鏡像數(shù)據(jù)庫來繼續(xù)運作,我們可以先來自行嘗試一下模擬主要這部SQL Server故障的狀況,以便演練進行手動的容錯切換方法。
首先您可在[SQL Server Management Studio]管理界面中,針對主要的SQL Server實例,按下鼠標(biāo)右鍵點擊[停止]。緊接著便會出現(xiàn)MSSQLSERVER服務(wù)停止的確認訊息,請點擊[是]。
在SQL Server 2012鏡像的實例數(shù)據(jù)庫上,按下鼠標(biāo)右鍵點擊[添加查詢]。在查詢的窗口中,請輸入以下用以切換SQL Server鏡像服務(wù)器角色的命令參數(shù),然后點擊[執(zhí)行]按鈕,執(zhí)行后如果在輸出頁面中沒有出現(xiàn)錯誤或失敗的訊息,即表示成功。
ALTER DATABASE [數(shù)據(jù)庫名稱] SET PARTNER
FORCE_SERVICE_ALLOW_DATA_LOSS
在成功執(zhí)行上述SQL命令后,您將會發(fā)現(xiàn)原本在第二部SQL Server主機中的鏡像數(shù)據(jù)庫,目前已經(jīng)變成了[主體]數(shù)據(jù)庫了,并且是呈現(xiàn)[已中斷連接]的狀態(tài)。
到目前為止,實際上您的前端如果有連接的應(yīng)用程序,便已經(jīng)可以正常存取所成功切換鏡像角色的SQL Server數(shù)據(jù)庫了。
接下來假設(shè)原先的第一部SQL Server又恢復(fù)正常了,因此請在它的[服務(wù)]管理員界面中,將它的相關(guān)服務(wù)啟動即可。
您將可以發(fā)現(xiàn)目前第一部與第二部的SQL Server 2012,其服務(wù)皆是正常啟動的,不過兩者的鏡像角色是對調(diào)的,在這樣的狀態(tài)下我們?nèi)绾巫屗麄兛梢岳^續(xù)進行鏡像的同步呢。請在目前擔(dān)任主體的數(shù)據(jù)庫上,按下鼠標(biāo)右鍵點擊[工作][鏡像]繼續(xù)。
在[鏡像]的頁面中,您將會發(fā)現(xiàn)目前數(shù)據(jù)庫鏡像的狀態(tài)是暫停的,必須點擊[繼續(xù)]按鈕來恢復(fù)運作即可。除了以上方法之外,您也可以在SQL查詢窗口中,執(zhí)行ALTER DATABASE [數(shù)據(jù)庫名稱] SET PARTNER RESUME,讓數(shù)據(jù)庫鏡像繼續(xù)同步。
在我們點擊[繼續(xù)]按鈕時,將會出現(xiàn)“數(shù)據(jù)庫屬性”的訊息頁面,主要是提示我們會發(fā)生此類事件的可能原因,并且提醒我們對于一些尚未傳送的事務(wù)歷史記錄將會發(fā)生遺失,因此需要特別注意。如果發(fā)生數(shù)據(jù)庫鏡像同步失敗,極有可能是網(wǎng)絡(luò)連接問題所造成的。