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