服務(wù)器和應(yīng)用系統(tǒng)遷移方案_第1頁
服務(wù)器和應(yīng)用系統(tǒng)遷移方案_第2頁
服務(wù)器和應(yīng)用系統(tǒng)遷移方案_第3頁
服務(wù)器和應(yīng)用系統(tǒng)遷移方案_第4頁
服務(wù)器和應(yīng)用系統(tǒng)遷移方案_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

服務(wù)器和應(yīng)用系統(tǒng)遷移方案(此文檔為word格式,下載后您可任意修改編輯?。┮?、遷移方案總體思路新舊系統(tǒng)的遷移是一個整體系統(tǒng)工程。遷移必須保證用戶系統(tǒng)建設(shè)的相關(guān)要求,在遷移過程中,我們需要重點考慮幾個問題:1、數(shù)據(jù)遷移如何保障“業(yè)務(wù)中斷停機時間”。業(yè)務(wù)中斷對于用戶無論是運行環(huán)境還是測試環(huán)境均存在較大的恢復(fù)風(fēng)險,這樣的風(fēng)險特別是對于時間敏感型數(shù)據(jù)還是對于數(shù)據(jù)完整性業(yè)務(wù)都是不可以接受的。我們基于這樣的要求,考慮到如何將停機時間最小,能否實現(xiàn)0停機的建設(shè)目標(biāo)?i.對于服務(wù)器操作系統(tǒng)而言,我們可以采用P2V的方式,利用操作系統(tǒng)的VolumeShadowCopy卷影副本復(fù)制服務(wù)作為基礎(chǔ),來實現(xiàn)在舊系統(tǒng)環(huán)境下的系統(tǒng)無修改,無停機的情況下,將數(shù)據(jù)和應(yīng)用軟件、操作系統(tǒng)環(huán)境、系統(tǒng)環(huán)境變量等全部以“快照”形式遷移到新服務(wù)器中。由此實現(xiàn)服務(wù)器環(huán)境的整體遷移。ii.對于應(yīng)用IIS和其他應(yīng)用服務(wù)器來說,我們可以基于應(yīng)用服務(wù)器的動態(tài)業(yè)務(wù)擴展集群方式,來實現(xiàn)服務(wù)器不停機環(huán)境下的增加業(yè)務(wù)節(jié)點操作,這樣可以實現(xiàn)應(yīng)用服務(wù)器“熱添加”到新環(huán)境中的故障轉(zhuǎn)移/負(fù)載均衡集群系統(tǒng)中,在部分應(yīng)用服務(wù)中我們可以使用session會話復(fù)制來實現(xiàn)舊系統(tǒng)的全局環(huán)境變量和會話請求狀態(tài)也遷移到新環(huán)境中來??紤]到會話復(fù)制和狀態(tài)的快速實時,我們可以采用會話內(nèi)存復(fù)制,考慮到會話復(fù)制和狀態(tài)的安全性,我們可以采用會話數(shù)據(jù)庫復(fù)制管理。iii.對于數(shù)據(jù)庫而言,我們可以基于數(shù)據(jù)庫本身自帶的數(shù)據(jù)庫鏡像技術(shù)、數(shù)據(jù)庫日志傳遞技術(shù)來實現(xiàn)各自的分庫、遷移庫的構(gòu)建,數(shù)據(jù)庫鏡像技術(shù)可以讓我們不但保證數(shù)據(jù)庫遷移的不停機,而且還可以保證萬一遷移中出現(xiàn)停機故障也不影響源數(shù)據(jù)庫,而日志傳遞技術(shù)構(gòu)建的遷移可以保證系統(tǒng)數(shù)據(jù)庫遷移以異步方式進行,這樣可以讓我們的系統(tǒng)環(huán)境在網(wǎng)絡(luò)出現(xiàn)故障的情況依然可以進行遷移任務(wù)窗口的正常工作。2、遷移涉及到的除了應(yīng)用、實例、數(shù)據(jù)庫的操作以外,還涉及到遷移前規(guī)劃、遷移后測試的完整性測試。這些測試包括但不限于數(shù)據(jù)一致性測試、數(shù)據(jù)完整性測試、應(yīng)用會話狀態(tài)完整性測試、連接中斷測試、數(shù)據(jù)恢復(fù)測試。只有這樣才能保證遷移的安全性和有效性。二、服務(wù)器硬件環(huán)境遷移方案.遷移評估遷移前,對遷移方案進行評估以確保遷移成功。首先需要勘察現(xiàn)有系統(tǒng)的架構(gòu)和資源使用狀況,評估過程必須包含以下信息和內(nèi)容:現(xiàn)有系統(tǒng)支撐的服務(wù)數(shù)量以及在服務(wù)器中的分布情況現(xiàn)有物理服務(wù)器資源占用狀況,包括CPU、內(nèi)存、磁盤和網(wǎng)絡(luò)連接狀況,為保證遷移成功,目標(biāo)虛擬機規(guī)格應(yīng)不低于原物理機標(biāo)準(zhǔn)當(dāng)前的物理環(huán)境是否支持虛擬化,是否支持資源擴展,因為在遷移之前須在物理服務(wù)器上完成虛擬化對當(dāng)前的存儲容量和資源利用率進行評估,需在目標(biāo)系統(tǒng)中規(guī)劃好遷移需要的存儲空間。需明確現(xiàn)有存儲如何利用,比如有些服務(wù)器是在本地磁盤上創(chuàng)建系統(tǒng)盤和用戶盤,有些服務(wù)器則在本地磁盤上創(chuàng)建系統(tǒng)盤而在SAN/NAS上創(chuàng)建用戶盤。.遷移計劃通過對現(xiàn)有網(wǎng)絡(luò)環(huán)境的評估,我們對現(xiàn)有資源利用率,服務(wù)以及系統(tǒng)需求非常清晰。評估后才能開始對遷移進行計劃,步驟如下:一、確定遷移步驟,包括所有服務(wù)器的遷移先后順序,其順序按風(fēng)險的高低降序排列。二、確定備份方案,由于現(xiàn)有系統(tǒng)會被加固,某些服務(wù)器通過虛擬化重復(fù)利用,而在虛擬化前需要清除所有的數(shù)據(jù),因此需要對這些服務(wù)器進行備份保證服務(wù)的連續(xù)性。三、確定并準(zhǔn)備好遷移所需的工具,包括工具在遷移中必備的一系列功能和使用工具所需具備的網(wǎng)絡(luò)環(huán)境。四、在實際遷移開始之前確定額外的測試環(huán)境,該測試環(huán)境能夠引導(dǎo)測試從而確保遷移成功。因此,測試環(huán)境需明確設(shè)計的服務(wù)器和存儲數(shù)量。五、規(guī)劃網(wǎng)絡(luò)環(huán)境,由于網(wǎng)絡(luò)中的服務(wù)器各處不同位置,因此在遷移中需考慮到網(wǎng)絡(luò)連接情況、數(shù)據(jù)備份方式,以及網(wǎng)絡(luò)流量來源,確定網(wǎng)絡(luò)流量是否會引發(fā)網(wǎng)絡(luò)擁塞六、確定遷移周期以及參與人員,包括遷移起止時間,團隊能力建設(shè)以及團隊成員的角色。.測試計劃遷移計劃后,執(zhí)行小批量的測試遷移方案,這里會涉及到首批遷移的測試和審核,步驟如下:準(zhǔn)備用于測試遷移的測試系統(tǒng)環(huán)境,在測試時,第一批服務(wù)器將會遷移到該系統(tǒng)環(huán)境中。安裝并核實遷移工具,此時要執(zhí)行第一批服務(wù)器的P2V遷移。對第一批服務(wù)器,需分析存儲系統(tǒng),不管該服務(wù)器在存儲遷移中采用本地磁盤存儲還是遠端SAN/NAS存儲系統(tǒng)。.遷移測試在第一批服務(wù)器和服務(wù)的小批量測試遷移后,需對遷移后的服務(wù)器進行測試,包括單元測試和性能測試。.遷移實施在遷移實施過程中,所有的服務(wù)器都會被遷移到虛擬化系統(tǒng)下。執(zhí)行步驟如下:確保批量遷移的整個網(wǎng)絡(luò)環(huán)境已準(zhǔn)備完畢,并通過遷移工具完成源系統(tǒng)和目標(biāo)系統(tǒng)之間的連通。此處的目標(biāo)系統(tǒng)屬于中轉(zhuǎn)系統(tǒng)。對遷移系統(tǒng)進行性能審核和健康檢查,如果系統(tǒng)狀態(tài)監(jiān)視則停用舊系統(tǒng)并將其服務(wù)暫時轉(zhuǎn)移到新的虛擬化系統(tǒng)中。進行利舊,對于一部分可用的舊硬件可在服務(wù)器虛擬化中重新再利用,一些軟件資源需擴展,如內(nèi)存和硬盤。這些服務(wù)器構(gòu)成最終的虛擬化基礎(chǔ)設(shè)施,即最終系統(tǒng)。最后,在目標(biāo)系統(tǒng)和最終系統(tǒng)之間進行V2V遷移。這樣,最終系統(tǒng)完成了現(xiàn)存硬件的重復(fù)利用。a.服務(wù)器虛擬化前進行備份為了對舊系統(tǒng)中的物理服務(wù)器進行虛擬化,需考慮服務(wù)器虛擬化帶來的影響。例如,現(xiàn)有服務(wù)器的重復(fù)利用,服務(wù)器虛擬化時會對這些服務(wù)器的CPU,內(nèi)存以及硬盤資源進行再利用,然而這些服務(wù)器上存在某些服務(wù)仍在運行,若無備份則會影響現(xiàn)有業(yè)務(wù)。因此,在執(zhí)行遷移和虛擬化之前,必須先對需利舊的服務(wù)器進行備份。遷移步驟如下圖所示。提供物理備份服務(wù)器,并已進行虛擬化,數(shù)據(jù)和服務(wù)器已備份到虛擬化系統(tǒng)。首先,對于要被遷移的服務(wù)器上,一般會存在多種服務(wù)正在運行,而且這些服務(wù)器在遷移評估后認(rèn)為在虛擬化場景下可再利用的。但是,遷移過程中不允許存在較長的停機時間,因此需要準(zhǔn)備一臺采用虛擬化平臺的備份虛擬機,通過P2V將該服務(wù)器備份到虛擬機上。備份完所有需要進行虛擬化的服務(wù)器之后,這些服務(wù)器上安裝虛擬化軟件進行虛擬化,根據(jù)評估階段確定的容量規(guī)劃,在虛擬化平臺上創(chuàng)建相應(yīng)規(guī)格的虛擬機,其計算資源用于承接舊系統(tǒng)中的服務(wù)。準(zhǔn)備好所有的虛擬機后,規(guī)劃和安裝相關(guān)遷移工具,將備份系統(tǒng)中的服務(wù)遷移到虛擬化系統(tǒng)的虛擬機中。虛擬機遷移是指將備份的虛擬化系統(tǒng)中的應(yīng)用服務(wù)遷移到最終的虛擬化系統(tǒng)中。虛擬機遷移完畢后,要對這些服務(wù)進行測試,最后停用舊系統(tǒng),所有服務(wù)切換到虛擬化系統(tǒng)中。b.遷移的詳細操作步驟遷移的具體步驟及描述如下圖所示:A.在評估階段,虛擬化和遷移之前需收集的信息如下:性能統(tǒng)計:包括CPU使用率,內(nèi)存使用率,硬盤IOPS和硬盤使用情況;物理服務(wù)器配置:包括CPU規(guī)格,內(nèi)存容量,硬盤容量統(tǒng)計物理服務(wù)器部署位置,分析是否支持虛擬化,累計支持虛擬化的服務(wù)器數(shù)量,并規(guī)劃出虛擬化中需新增的硬件情況;通過上述無代理收集和代理收集兩種場景收集當(dāng)前系統(tǒng)的使用和配置情況。可采用華為信息收集工具或者第三方工具。B.分析現(xiàn)有服務(wù)的依賴條件,對當(dāng)前系統(tǒng)進行備份。上圖描述了一種應(yīng)用系統(tǒng)下的依賴關(guān)系,可作為遷移參考,確定所有服務(wù)器的遷移優(yōu)先級順序。在確定各服務(wù)的依賴條件后,對需進行虛擬化的服務(wù)器進行備份。具體備份過程參見本小節(jié)遷移實施方案中“服務(wù)器虛擬化前進行備份”部分的內(nèi)容。C.容量規(guī)劃和虛擬化執(zhí)行根據(jù)當(dāng)前的資源使用和需求情況,計算虛擬化所需的容量。D.規(guī)劃應(yīng)用服務(wù)在華為虛擬化解決方案中,同類虛擬機部署在同一個計算資源池中,在同一個池中可相互共享存儲/計算資源,一個集群的故障不會影響其他資源池。E.虛擬化規(guī)劃和虛擬機分配建立虛擬化平臺后,要準(zhǔn)備最終的遷移資源。遷移前,如果服務(wù)器a具備雙核CPU和2G內(nèi)存,那么在虛擬化平臺中就創(chuàng)建一個2核/2G內(nèi)存的虛擬機,并分配相應(yīng)的硬盤。F.規(guī)劃遷移工具采用遷移工具從物理或虛擬的服務(wù)器向最終的虛擬化系統(tǒng)中進行磁盤復(fù)制。G.通過工具執(zhí)行在線遷移準(zhǔn)備好源系統(tǒng),目標(biāo)虛擬機以及目標(biāo)系統(tǒng)后,決定遷移時需使用的遷移工具和遷移策略。H.遷移測試遷移后,需進行測試來驗證遷移是否成功,測試場景如下:應(yīng)用服務(wù)遷移后對虛擬化基本功能的監(jiān)測;遷移前后應(yīng)用服務(wù)的特性功能是否幾乎相同;虛擬化系統(tǒng)的性能監(jiān)控;I.停用舊系統(tǒng)截至目前現(xiàn)有的服務(wù)器已經(jīng)被虛擬化和重復(fù)使用,其他一些不支持虛擬化的服務(wù)器上對應(yīng)的服務(wù)也已經(jīng)遷移到虛擬化平臺,那么現(xiàn)在可將應(yīng)用服務(wù)切換到虛擬系統(tǒng)并停用舊系統(tǒng),其步驟如下:三、應(yīng)用系統(tǒng)數(shù)據(jù)庫遷移方案1.應(yīng)用服務(wù)器遷移到群集環(huán)境為滿足企業(yè)不斷的成長需求,實現(xiàn)企業(yè)服務(wù)器的高可伸縮性、高可用、高可靠性和高性能,提升服務(wù)器的SLA,Microsoft到目前為止,提出了五種解決方案:我們對于IIS等應(yīng)用環(huán)境以及.net應(yīng)用程序框架我們提出構(gòu)建IIS環(huán)境的NLB群集,將當(dāng)前系統(tǒng)不停機加入到NLB群集中,使之成為群集中的一個節(jié)點,而新環(huán)境則為另外一個節(jié)點。實施完成后再退出此遷移群集,將新環(huán)境加入到新的構(gòu)建的NLB群集。微軟的網(wǎng)絡(luò)負(fù)載平衡可以提供最多32臺主機的負(fù)載平衡,當(dāng)我們的Web站點需要分擔(dān)更多用戶訪問請求的時候,負(fù)載均衡無疑是值得考慮的一個解決方案。當(dāng)然NLB也有相應(yīng)的限制,像廣域網(wǎng)環(huán)境中,我們就不能使用NLB進行設(shè)置,因為其網(wǎng)絡(luò)不允許使用同一個MAC地址,也就違反了NLB的基本要求。在安全方面,除了我們進行的端口規(guī)則設(shè)定,Windows2003Server本身基于TCP/IP堆棧的集成是動態(tài)的,不用進行任何人工干預(yù),這種設(shè)置有效的防止了DOS攻擊等惡意攻擊。除此之外,企業(yè)結(jié)合自身的網(wǎng)絡(luò)安全,確保NLB站點的高效運作。NLB不但能實現(xiàn)均衡負(fù)載,而且還能實現(xiàn)多種形式的冗余。NLB主要用于那些文件改動不大,并且不常駐內(nèi)存的環(huán)境,比如WEB服務(wù)、FTP服務(wù)、和VPN服務(wù)等。NLB不適合用于數(shù)據(jù)庫、郵件等服務(wù),因為不能保證每個節(jié)點的數(shù)據(jù)是一樣的。當(dāng)用戶訪問集群的時候,集群能將訪問請求分?jǐn)偟郊褐械拿總€服務(wù)器上,以達到均衡負(fù)載的效果。這些服務(wù)器被稱為集群節(jié)點。在負(fù)載平衡中,每個節(jié)點的文件一般都要求是一樣的。這樣每個節(jié)點返回給客戶的結(jié)果都是一致的。一般來說組建一個NLB要求至少兩個節(jié)點,其中一個節(jié)點不能使用,這全部負(fù)載將落入到剩下的那個節(jié)點上,即全載。Windowsserver2003最多支持32個節(jié)點。節(jié)點越多,可用性,可靠性就越高。NLB能提供三種冗余功能,軟件冗余、硬件冗余、站點冗余。基于NLB集群的Web網(wǎng)站數(shù)據(jù)庫設(shè)計.MSCS,提供后端服務(wù)與應(yīng)用程序的容錯移轉(zhuǎn),可提升系統(tǒng)的可用性。常見的應(yīng)用有SQLServer與ExchangeServer等。MSCS是由客戶端來決定由誰來處理服務(wù)請求,所有服務(wù)器共享一個共享存儲器來儲存會話狀態(tài)。當(dāng)主動服務(wù)器掛了,則繼續(xù)由被動服務(wù)器接手。被動服務(wù)器會從共享存儲器取出會話狀態(tài),繼續(xù)未完成的工作,以達到容錯移轉(zhuǎn)的目的。.數(shù)據(jù)庫是數(shù)據(jù)管理最有效的手段,要使用它來高效地管理和存取各種數(shù)據(jù)資源,必須設(shè)計出結(jié)構(gòu)合理、功能完善的數(shù)據(jù)庫。數(shù)據(jù)庫設(shè)計時一項復(fù)雜的工作,它是一項涉及多學(xué)科的綜合技術(shù),要求數(shù)據(jù)庫管理員既要懂得數(shù)據(jù)庫知識,又要充分了解應(yīng)用領(lǐng)域的專業(yè)知識。在進行數(shù)據(jù)庫設(shè)計時,要根據(jù)企業(yè)組織中各類用戶的信息要求和處理需求來對數(shù)據(jù)庫進行設(shè)計。數(shù)據(jù)庫設(shè)計的主要內(nèi)容包過機構(gòu)性設(shè)計和行為特性設(shè)計,設(shè)計的過程主要包括需求分析、概念設(shè)計、邏輯設(shè)計和物理設(shè)計四個階段。(1)需求分析需求分析就是對現(xiàn)實世界要處理的對象進行詳細調(diào)查,在了解原系統(tǒng)的概況、確定新系統(tǒng)功能的過程中,獲得用戶對數(shù)據(jù)庫的數(shù)據(jù)要求、功能要求、安全要求和完整性要求。(2)概念設(shè)計概念設(shè)計時將需求說明中關(guān)于數(shù)據(jù)的要求,綜合為一個統(tǒng)一的概念模型。概念模型是表達概念模型設(shè)計結(jié)果的工具,是設(shè)計人員對系統(tǒng)的抽象的概括,它能表達用戶的需求,且獨立于支持?jǐn)?shù)據(jù)庫的數(shù)據(jù)庫的管理系統(tǒng)和硬件系統(tǒng)。(3)邏輯設(shè)計概念設(shè)計的結(jié)果是得到一個與數(shù)據(jù)庫的管理系統(tǒng)無關(guān)的概念模型,而邏輯設(shè)計的目的是吧概念設(shè)計的概念模型,轉(zhuǎn)換成與選用的具體機器上的DBMS所支持的數(shù)據(jù)模型相符合的邏輯結(jié)構(gòu)。(4)物理設(shè)計物理設(shè)計的任務(wù)是確實數(shù)據(jù)庫的存儲結(jié)構(gòu),主要包括確定數(shù)據(jù)庫文件和索引文件的記錄格式和物理結(jié)構(gòu),懸著存取方法,決定訪問路徑和外存儲器的分配策略,實現(xiàn)完整性和安全性以及程序設(shè)計等。對于一個比較大的網(wǎng)站來說,數(shù)據(jù)庫集群也應(yīng)該是以集群的方式建立,這樣可以增強網(wǎng)站的性能,提高網(wǎng)站的可靠性。數(shù)據(jù)庫可分為三類:故障切換集群、分布式數(shù)據(jù)庫系統(tǒng)、共享磁盤系統(tǒng)。NLB集群系統(tǒng)的總體設(shè)計(1)環(huán)境下實現(xiàn)Windows2003服務(wù)器集群;(2)在域內(nèi)環(huán)境內(nèi)的windows2003webserver群集;(3)利用IIS搭建了一個WEB站點,域名為。由于業(yè)務(wù)的逐漸增加,網(wǎng)站速度也越來越慢,而且經(jīng)常出現(xiàn)故障,為公司的利益帶來了很多的不便;公司決定使用兩臺WEB站點為客戶機提供訪問。因此采用了網(wǎng)絡(luò)負(fù)載均衡技術(shù)。NLB集群工作原理及算法.NLB的工作原理當(dāng)客戶向NLB群集(NLB的虛擬IP地址)發(fā)起請求時,其實客戶的請求數(shù)據(jù)包是發(fā)送到所有的NLB節(jié)點,然后運行在NLB節(jié)點上的NLB服務(wù)根據(jù)同樣的NLB算法來確定是否應(yīng)該由自己進行處理,如果不是則丟棄客戶的請求數(shù)據(jù)包,如果是則進行處理。如何將請求數(shù)據(jù)包發(fā)送到所有的NLB節(jié)點是NLB運行的關(guān)鍵之處,單播和多播這兩種操作模式就是用于實現(xiàn)這一需求。NLB不支持單個NLB群集中的單播/多播的混合環(huán)境;在每一個NLB群集中,該群集中的所有節(jié)點都必須配置為多播或單播,否則,此NLB群集將無法正常工作。.負(fù)載平衡算法一個負(fù)載平衡算法都包含以下三個組成部分:策略:制定任務(wù)放置策略的制定者使用的負(fù)載和任務(wù)量,以及分配的方式。傳送策略:基于任務(wù)和計算機負(fù)載,判定是否要把一個任務(wù)傳送到其它計算機上處理。放置策略:對于適合傳送到其它計算機處理的任務(wù),選擇任務(wù)將被傳送的目的計算機。負(fù)載平衡的上述三個部分之間是以不同的方式相互作用的。放置策略利用策略提供的負(fù)載,僅當(dāng)任務(wù)被傳送策略判定為適于傳送之后才行動??傊?fù)載平衡的目標(biāo)是:提供最短的平均任務(wù)響應(yīng)時間;能適于變化的負(fù)載;是可靠的負(fù)載平衡機制。(1)策略人們用來描述負(fù)載采用的參數(shù)有:運行隊列中的任務(wù)數(shù)、系統(tǒng)調(diào)用的速率、CPU上下文切換率、空閑CPU時間百分比、空閑存儲器的大小(K字節(jié))、1分鐘內(nèi)的平均負(fù)載。對于這些單個的負(fù)載描述參數(shù),第(1)個,即采用運行隊列中的任務(wù)數(shù)作為描述負(fù)載的參數(shù)被證實是最有效的,即它的平均任務(wù)響應(yīng)時間最短,并且已經(jīng)得到廣泛應(yīng)用。但是,假如為了使系統(tǒng)更全面而采集了更多的參數(shù),則往往由于增加了額外開銷,卻得不到所希望的性能改善。例如,采用將六個參數(shù)中的某兩個進行“AND"或"OR"組合,得到的平均響應(yīng)時間反而比單個參數(shù)的平均響應(yīng)時間還要差一些。(2)傳送策略為了簡單起見,在選用傳送策略時,多選用閥值策略。例如,Eager等人的方法是:在判定是否要在本地處理一個任務(wù)時,無需交換計算機之間的狀態(tài),一旦服務(wù)隊列或等待服務(wù)隊列的長度大于閥值時,就傳送這個任務(wù),而且傳送的是剛剛接收的任務(wù)。而進程遷移能夠遷移正在執(zhí)行的任務(wù),是對這種只能傳送剛剛接收的任務(wù)的一種改進。在模擬研究七個負(fù)載平衡算法時,其傳送策略都采用閥值策略。它的閥值策略基于兩個閥值:計算機的負(fù)載閥值Load和任務(wù)執(zhí)行時間閥值TCPU。假如計算機的負(fù)載超過Load并且任務(wù)的執(zhí)行時間超過TCPU時,就把此任務(wù)傳送到其它計算機執(zhí)行。(3)放置策略經(jīng)過總結(jié),共有以下四種放置策略①集中策略。每隔P秒,其中一個計算機被指定為“負(fù)載中心"(LIC),接受所有其它負(fù)載的變更值,并把它們匯集到一個“負(fù)載向量”中,然后把負(fù)載向量廣播給所有其它的計算機。當(dāng)一臺計算機認(rèn)為一個任務(wù)適于傳送到其它計算機上執(zhí)行時,它就給LIC發(fā)送一個請求,并告知當(dāng)前負(fù)載的值。LIC選一臺具有最短運行隊列長度的計算機,并且通知任務(wù)所在的計算機把任務(wù)發(fā)送給它,同時,它把目的主機負(fù)載值增加1。②閥值策略。隨機選擇一臺計算機,判定若把任務(wù)傳送到那臺計算機后,那臺計算機的任務(wù)隊列長度是否會超過閥值。假如不超過閥值,就傳送此任務(wù);否則,隨機選擇另一臺計算機,并以同樣方式判定,繼續(xù)這樣做直到找到一臺合適的目的計算機,或探測次數(shù)超過一個靜態(tài)值限制LP,當(dāng)任務(wù)真正到達計算機以后,不管狀態(tài)如何,必須處理該任務(wù)。③最短任務(wù)隊列策略。隨機選擇LP臺不同的計算機,察看每臺計算機的任務(wù)隊列長度,任務(wù)被傳送到具有最短任務(wù)隊列長度的計算機。當(dāng)任務(wù)真正到達計算機,無論狀態(tài)如何,目的計算機必須處理該任務(wù)。對此策略的一個簡單改進時,無論何時,碰到一臺隊列長度為0的計算機時,不再繼續(xù)探測,因為可以確定此計算機是一臺可以接受的目的計算機。④保留策略。當(dāng)一個任務(wù)從一臺計算機離開時,該計算機檢查本地負(fù)載,假如負(fù)載小于閥值T1,就探測其它計算機,并在R個負(fù)載大于T1的計算機中登記該計算機的名字,并把登記的內(nèi)容保留到一個棧中。當(dāng)一個任務(wù)到達一臺超載的計算機時,就把這個任務(wù)傳送到此臺計算機棧頂?shù)挠嬎銠C上。假如一個計算機的負(fù)載低于T1,就清空棧里保留的所有計算機名。從論文中,比較了②和③兩種策略,結(jié)論是:以簡單(計算不昂貴)的方式,利用少量狀態(tài),第②中方法往往獲得比第③種方法更好的效果。第③中方法比較復(fù)雜,它必須用性能的改善來補償額外花費,所以取得的效果會稍差一些。4.3地址分配在NLB群集中,每臺服務(wù)器都會有一個屬于自己的靜態(tài)IP地址,同時NLB群集中的所有服務(wù)器還有一個共同的IP地址一NLB群集地址;當(dāng)客戶向NLB群集(NLB的虛擬IP地址)發(fā)起請求時,其實客戶的請求數(shù)據(jù)包是發(fā)送到所有的NLB節(jié)點,即:NLB算法需要NLB群集中的所有主機都能看到發(fā)往群集的每一個數(shù)據(jù)包。然后運行在NLB節(jié)點上的NLB服務(wù)根據(jù)同樣的NLB算法來確定是否應(yīng)該由自己進行處理,如果不是則丟棄客戶的請求數(shù)據(jù)包,如果是則進行處理。網(wǎng)絡(luò)負(fù)載平衡使得單個子網(wǎng)上的所有群集主機可以同時檢測群集IP地址的傳入網(wǎng)絡(luò)通信。在每個群集主機上,網(wǎng)絡(luò)負(fù)載平衡驅(qū)動程序充當(dāng)群集適配器驅(qū)動程序和TCP/IP堆棧間的過濾器,以便在主機間分配通信。在配置負(fù)載均衡的時候步驟主要有三個(1)啟用網(wǎng)絡(luò)負(fù)載平衡;(2)連接到現(xiàn)存的群集;(3)添加主機到群集。.啟用網(wǎng)絡(luò)負(fù)載平衡:在開始——運行中輸入nlbmgr,單擊“確定”按鈕,打開“網(wǎng)絡(luò)負(fù)載平衡管理器”窗口。如圖所示網(wǎng)絡(luò)負(fù)載均衡管理器.右擊“網(wǎng)絡(luò)負(fù)載均衡群集”,然后單擊“新建群集”命令,然后在彈出如圖5-2的對話框中的IP地址和其他群集信息,選擇群集操作模式為“多播”,然后單擊“下一步”按鈕。在這里添加的IP地址是和DC所在在同一個網(wǎng)段的,在這里使用一個多播的原因是在客戶端是同時能收到信息。.在“群集IP地址”的對話框中可以添加IP地址,如果有多個群集的IP地址也可以來添加多個IP地址,如圖5-3是添加的端口的IP地址,在本次實驗中只有一個網(wǎng)絡(luò)群集的IP地址所以在下面選擇自動添加而不是選擇所有的端口,而在解析的時候是通過DNS服務(wù)器解析而沒有使用其他的協(xié)議因此所采用TCP協(xié)議的端口HTTP80;所以在這里選擇80即可。.在完成上面群集IP地址的規(guī)劃之后,會出現(xiàn)如圖5-4所示的端口規(guī)則:端口規(guī)則是可以按照群集中每一個成員的負(fù)載量來分派客戶端的通信。當(dāng)然在下面如圖所示的界面中也可以來刪除端口規(guī)則。刪除端口規(guī)則也可以更加明顯的看出群集的效果,刪除端口規(guī)則可以按照端口的優(yōu)先級來響應(yīng)客戶機請求,假設(shè)當(dāng)優(yōu)先級高的出現(xiàn)故障那么優(yōu)先級低的主機會提供服務(wù)。當(dāng)然對于客戶機來說是感覺不到那個到底出現(xiàn)故障。.完成上面的步驟在“連接”的對話框中來輸入和服務(wù)器相連的IP地址;及,點擊“連接”就會彈出如圖5-5所示的對話框。然后在下面的接口中選擇服務(wù)器的網(wǎng)絡(luò)適配器(IP地址)。.完成上面的步驟基本在DC上的配置就完成了,在這里所采用系統(tǒng)默認(rèn)的自動狀態(tài),單擊完成即可。但是要明白在配置優(yōu)先級的時候最多可以配置32位,因為NLB網(wǎng)絡(luò)負(fù)載均衡做多支持32臺主機。默認(rèn)情況下他的初始狀態(tài)是“已啟動”,設(shè)置更高的優(yōu)先級的原因是當(dāng)把“端口規(guī)則”刪除的并且當(dāng)其中的一臺的出現(xiàn)故障的時候,優(yōu)先級就會在這時候起到作用。如圖5-6所示,把第一臺主機的優(yōu)先級設(shè)為1。.啟動網(wǎng)絡(luò)負(fù)載平衡后,在下圖中5-7所示:在群集中已經(jīng)有了一臺主機。根據(jù)實驗的需求還需要添加一臺主機到群集:如果在第二臺上添加的時候首先會連接到“現(xiàn)存的群集”。.把第二臺主機連接到現(xiàn)存的群集,在這里連接時候是在第二個服務(wù)器上面添加。在第二臺服務(wù)器上(IP地址為)的開始——運行中輸入“nlbmgr”,單擊確定單開“網(wǎng)絡(luò)負(fù)載均衡管理器”窗口,右擊“網(wǎng)絡(luò)負(fù)載均衡平衡群集”,然后“選擇連接到現(xiàn)存的”命令。在彈出的的對話框中輸入第一臺計算機的IP地址“”單擊“連接”然后完成就可了!.添加主機到群集;在使用“網(wǎng)絡(luò)負(fù)載平衡管理器",右擊"”。在彈出的對話框中選擇“添加主機到群集”,添加主機的真正原因就是達到網(wǎng)絡(luò)負(fù)載平衡的原因,如圖5-9所示:.在完成上面的配置后,在下面圖的界面中添加將要成為群集成員的IP地址(或者主機的名稱)單擊連接按鈕,將在底部的對話框中會彈出可以用的網(wǎng)絡(luò)適配器。選擇要用網(wǎng)絡(luò)負(fù)載平衡的網(wǎng)絡(luò)適配器,即可完成。.在保持主機參數(shù)為默認(rèn)狀態(tài),注意優(yōu)先級是“2”它是默認(rèn)的:一切按照默認(rèn)的即可。.添加主機到群集后,在群集中會有兩臺服務(wù)器,最多可以有32臺主機。在圖5-12中可以知道兩臺主機的IP地址是和;這樣就完成了網(wǎng)絡(luò)負(fù)載均衡的配置了。網(wǎng)絡(luò)負(fù)載均衡的最佳操作.正確保護網(wǎng)絡(luò)負(fù)載平衡主機和經(jīng)過負(fù)載平衡的應(yīng)用程序;.在每一個群集主機上至少配置兩個網(wǎng)絡(luò)適配器,但是并非必要;.在群集適配器上只使用TCP/IP協(xié)議;.保證群集中的所有主機屬于同一個子網(wǎng)并且客戶機能夠訪問該子網(wǎng);.使用網(wǎng)絡(luò)負(fù)載均衡管理器配置NLB群集;.不要啟用網(wǎng)絡(luò)負(fù)載平衡遠程訪問控制;.啟用日志記錄;.獨立使用NLB群集和服務(wù)器群集。2.數(shù)據(jù)庫遷移實施一、實施概述在做SQLServer數(shù)據(jù)庫維護的時候,當(dāng)上司要求我們把幾十G的數(shù)據(jù)文件搬動到其它服務(wù)器,并且要求最小宕機時間的時候,我們有沒什么方案可以做到這些要求呢?在這里我們假設(shè)這兩臺機器并不是在一個機房上,這樣看起來我們的解決方案才更有意義,如果你那么好運這兩臺機器在同一個局域網(wǎng),那么恭喜你,你可以多很多的方案可以做到。二、分析與設(shè)計思路其實我們假設(shè)的環(huán)境有兩個特點:第一個是數(shù)據(jù)庫文件比較大;第二個就是我們的傳送文件的速度可能會比較慢。也許這傳送速度我們是沒有辦法了,但是我們可以就從文件的大小這個問題出發(fā),結(jié)合SQLServer的特性,這樣就有了下面的解決方案了。為了使宕機時間最短,我們這里使用了完整備份和差異備份來遷移數(shù)據(jù)庫,在白天的時候?qū)π枰w移的數(shù)據(jù)庫進行一次完整備份(XXX_full.bak),并把備份文件拷貝(這里可以使用FTP軟件進行斷點續(xù)傳)到目標(biāo)服務(wù)器進行還原,等到下班時間之后再進行一次差異備份(XXX_diff.bak),再把這個差異備份拷貝到目標(biāo)服務(wù)器,在完整還原的基礎(chǔ)上再進行差異還原。這里的宕機時間=差異備份時間+傳送差異備份文件時間+還原差異備份文件時間,這宕機時間是不是讓你感覺這時間很短呢?三、參考腳本注意修改下面腳本中數(shù)據(jù)庫的名稱,還有絕對路徑。--1:完整備份declare@dbnamevarchar(100)declare@sqlnvarchar(max)set@dbname='DataBaseName'set@sql='--'+@dbname+'_fullBACKUPDATABASE['+@dbname+']TODISK="D:\DBBackup\'+@dbname+'Jull.bak”WITHNOFORMAT,NOINIT,NAME="'+@dbname+'-完整數(shù)據(jù)庫備份”,SKIP,NOREWIND,NOUNLOAD,STATS=10GO'print@sql―生成的SQL--DataBaseName_fullBACKUPDATABASE[DataBaseName]TODISK='D:\DBBackup\DataBaseName_full.bak'WITHNOFORMAT,NOINIT,NAME='DataBaseName-完整數(shù)據(jù)庫備份',SKIP,NOREWIND,NOUNLOAD,STATS=10GO--2:完整備份還原declare@dbnamevarchar(100)declare@sqlnvarchar(max)set@dbname='DataBaseName'set@sql='--RESTORE'+@dbname+'_fullRESTOREDATABASE['+@dbname+']FROMDISK="D:\DBBackup\'+@dbname+'Jull.bak”WITHFILE=1,MOVEN"DataBase_Name"TON"D:\DataBase\'+@dbname+'.mdf",MOVEN”DataBase_Name_log"TON"D:\DataBase\'+@dbname+'_log.ldf”,NORECOVERY,NOUNLOAD,REPLACE,STATS=10GO'print@sql―生成的SQL--RESTOREDataBaseName_fullRESTOREDATABASE[DataBaseName]FROMDISK='D:\DBBackup\DataBaseName_full.bak'WITHFILE=1,MOVEN'DataBase_Name'TON'D:\DataBase\DataBaseName.mdf',MOVEN'DataBase_Name_log'TON'D:\DataBase\DataBaseName_log.ldf',NORECOVERY,NOUNLOAD,REPLACE,STATS=10GO--3:差異備份declare@dbnamevarchar(100)declare@sqlnvarchar(max)set@dbname='DataBaseName'set@sql='--'+@dbname+'_diffBACKUPDATABASE['+@dbname+']TODISK=N"D:\DBBackup\'+@dbname+'_diff.bak”WITHDIFFERENTIAL,NOFORMAT,NOINIT,NAME=N”'+@dbname+T異數(shù)據(jù)庫備份”,SKIP,NOREWIND,NOUNLOAD,STATS=10GO'print@sql―生成的SQL--DataBaseName_diffBACKUPDATABASE[DataBaseName]TODISK=N'D:\DBBackup\DataBaseName_diff.bak'WITHDIFFERENTIAL,NOFORMAT,NOINIT,NAME=N'DataBaseName-差異數(shù)據(jù)庫備份‘,SKIP,NOREWIND,NOUNLOAD,STATS=10GO--4:差異備份還原declare@dbnamevarchar(100)declare@sqlnvarchar(max)set@dbname='DataBaseName'set@sql='--RESTORE'+@dbname+'_fullRESTOREDATABASE['+@dbname+']FROMDISK="D:\DBBackup\'+@dbname+'_diff.bak”WITHFILE=1,NOUNLOAD,STATS=10GO'print@sql―生成的SQL--RESTOREDataBaseName_fullRESTOREDATABASE[DataBaseName]FROMDISK='D:\DBBackup\DataBaseName_diff.bak'WITHFILE=1,NOUNLOAD,STATS=10GO四、后記以測試的700G的數(shù)據(jù)文件,我是通過數(shù)據(jù)庫的作業(yè)進行愚公移山的,搬數(shù)據(jù)到新的服務(wù)器上的,這樣的好處就是對之前的數(shù)據(jù)庫進行優(yōu)化,比如進行數(shù)據(jù)庫參數(shù)的設(shè)置,比如表分區(qū),在對之前數(shù)據(jù)庫影響盡量小的情況進行數(shù)據(jù)搬遷。四、遷移重難點分析及措施1.如何保證數(shù)據(jù)遷移過程中的安全性和操作可審計性?回答:數(shù)據(jù)遷移中的安全性不可忽略,我們基于多重數(shù)據(jù)審計功能實現(xiàn)遷移安全性和操作審計性。若要將登錄和密碼從服務(wù)器A上的SQLServer實例傳輸?shù)椒?wù)器B上的SQLServer實例,請執(zhí)行以下步驟:1在服務(wù)器A上,啟動SQLServerManagementStudio,然后連接到要從中移動數(shù)據(jù)庫的SQLServer實例。2打開新的查詢編輯器窗口,然后運行以下腳本。USEmasterGOIFOBJECT_ID('sp_hexadecimal')ISNOTNULLDROPPROCEDUREsp_hexadecimalGOCREATEPROCEDUREsp_hexadecimal@binvaluevarbinary(256),@hexvaluevarchar(514)OUTPUTASDECLARE@charvaluevarchar(514)DECLARE@iintDECLARE@lengthintDECLARE@hexstringchar(16)SELECT@charvalue='0x'SELECT@i=1SELECT@length=DATALENGTH(@binvalue)SELECT@hexstring='0123456789ABCDEF'WHILE(@i<=@length)BEGINDECLARE@tempintintDECLARE@firstintintDECLARE@secondintintSELECT@tempint=CONVERT(int,SUBSTRING(@binvalue,@i,1))SELECT@firstint=FLOOR(@tempint/16)SELECT@secondint=@tempint-(@firstint*16)SELECT@charvalue=@charvalue+SUBSTRING(@hexstring,@firstint+1,1)+SUBSTRING(@hexstring,@secondint+1,1)SELECT@i=@i+1ENDSELECT@hexvalue=@charvalueGOIFOBJECT_ID('sp_help_revlogin')ISNOTNULLDROPPROCEDUREsp_help_revloginGOCREATEPROCEDUREsp_help_revlogin@login_namesysname=NULLASDECLARE@namesysnameDECLARE@typevarchar⑴DECLARE@hasaccessintDECLARE@denyloginintDECLARE@is_disabledintDECLARE@PWD_varbinaryvarbinary(256)DECLARE@PWD_stringvarchar(514)DECLARE@SID_varbinaryvarbinary(85)DECLARE@SID_stringvarchar(514)DECLARE@tmpstrvarchar(1024)DECLARE@is_policy_checkedvarchar(3)DECLARE@is_expiration_checkedvarchar(3)DECLARE@defaultdbsysnameIF(@login_nameISNULL)DECLARElogin_cursCURSORFORSELECTp.sid,,p.type,p.is_disabled,p.default_database_name,l.hasaccess,l.denyloginFROMsys.server_principalspLEFTJOINsys.sysloginslON(=)WHEREp.typeIN('S','G','U')AND<>'sa'ELSEDECLARElogin_cursCURSORFORSELECTp.sid,,p.type,p.is_disabled,p.default_database_name,l.hasaccess,l.denyloginFROMsys.server_principalspLEFTJOINsys.sysloginslON(=)WHEREp.typeIN('S','G','U')AND=@login_nameOPENlogin_cursFETCHNEXTFROMlogin_cursINTO@SID_varbinary,@name,@type,@is—disabled,@defaultdb,@hasaccess,@denyloginIF(@@fetch_status=-1)BEGINPRINT'Nologin(s)found.'CLOSElogin_cursDEALLOCATElogin_cursRETURN-1ENDSET@tmpstr='/*sp_help_revloginscript'PRINT@tmpstrSET@tmpstr='**Generated'+CONVERT(varchar,GETDATE())+'on'+@@SERVERNAME+'*/'PRINT@tmpstrPRINT''WHILE(@@fetch_status<>-1)BEGINIF(@@fetch_status<>-2)BEGINPRINT”SET@tmpstr='--Login:'+@namePRINT@tmpstrIF(@typeIN('G','U'))BEGIN-NTauthenticatedaccount/groupSET@tmpstr='CREATELOGIN'+QUOTENAME(@name)+'FROMWINDOWSWITHDEFAULT_DATABASE=['+@defaultdb+']'ENDELSEBEGIN-SQLServerauthentication一obtainpasswordandsidSET@PWD_varbinary=CAST(LOGINPROPERTY(@name,'PasswordHash')ASvarbinary(256))EXECsp_hexadecimal@PWD_varbinary,@PWD_stringOUTEXECsp_hexadecimal@SID_varbinary,@SID_stringOUT一obtainpasswordpolicystateSELECT@is_policy_checked=CASEis_policy_checkedWHEN1THEN'ON'WHEN0THEN'OFF'ELSENULLENDFROMsys.sql_loginsWHEREname=@nameSELECT@is_expiration_checked=CASEis_expiration_checkedWHEN1THEN'ON'WHEN0THEN'OFF'ELSENULLENDFROMsys.sql_loginsWHEREname=@nameSET@tmpstr='CREATELOGIN'+QUOTENAME(@name)+'WITHPASSWORD='+@PWD_string+'HASHED,SID='+@SID_string+',DEFAULT_DATABASE=['+@defaultdb+']'IF(@is_policy_checkedISNOTNULL)BEGINSET@tmpstr=@tmpstr+',CHECK_POLICY='+@is_policy_checkedENDIF(@is_expiration_checkedISNOTNULL)BEGINSET@tmpstr=@tmpstr+',CHECK_EXPIRATION='+@is_expiration_checkedENDENDIF(@denylogin=1)BEGIN--loginisdeniedaccessSET@tmpstr=@tmpstr+';DENYCONNECTSQLTO'+QUOTENAME(@name)ENDELSEIF(@hasaccess=0)BEGIN--loginexistsbutdoesnothaveaccessSET@tmpstr=@tmpstr+';REVOKECONNECTSQLTO'+QUOTENAME(@name)ENDIF(@is_disabled=1)BEGIN--loginisdisabledSET@tmpstr=@tmpstr+';ALTERLOGIN'+QUOTENAME(@name)+'DISABLE'ENDPRINT@tmpstrENDFETCHNEXTFROMlogin_cursINTO@SID_varbinary,@name,@type,@is_disabled,@defaultdb,@hasaccess,@denyloginENDCLOSElogin_cursDEALLOCATElogin_cursRETURN0GO3注意:此腳本會在“master”數(shù)據(jù)庫中創(chuàng)建兩個存儲過程。兩個存儲過程分別命名為“sp_hexadecimal”存儲過程和"sp_help_revlogin”存儲過程。4運行下面的語句。EXECsp_help_revlogin5由“sp_help_revlogin”存儲過程生成的輸出腳本是登錄腳本。此登錄腳本創(chuàng)建具有原始安全標(biāo)識符(SID)和原始密碼的登錄。6在服務(wù)器B上,啟動SQLServerManagementStudio,然后連接到您將數(shù)據(jù)庫移動到的SQLServer實例。重要信息:在執(zhí)行步驟5之前,請檢查“備注”一節(jié)中的信息。7打開新的查詢編輯器窗口,然后運行步驟3中生成的輸出腳本。備注在對服務(wù)器B的實例上運行輸出腳本之前,請檢查以下信息:?仔細檢查輸出腳本。如果服務(wù)器A和服務(wù)器B處在不同的域中,則必須修改輸出腳本。然后,必須在CREATELOGIN語句中使用新的域名來替換原始域名。新的域中授予訪問權(quán)限的集成登錄不會具有與原始域中的登錄相同的SID。因此,用戶會從這些登錄中孤立出來。有關(guān)如何解決這些孤立用戶的更多信息,請單擊下面的文章編號,以查看Microsoft知識庫中相應(yīng)的文章:240872(/kb/240872/)如何解決在運行SQLServer的服務(wù)器之間移動數(shù)據(jù)庫時的權(quán)限問題如果服務(wù)器A和服務(wù)器B處于同一域中,則使用相同的SID。因此,用戶不可能是孤立的。在輸出腳本中,通過使用加密密碼來創(chuàng)建登錄。這是因為CREATELOGIN語句中使用了HASHED參數(shù)。此參數(shù)指定在PASSWORD參數(shù)后輸入的密碼已經(jīng)過哈希處理。默認(rèn)情況下,只有sysadmin”固定服務(wù)器角色的成員可以從“sys.server_principals”視圖運行SELECT語句。除非"sysadmin”固定服務(wù)器角色的成員授予用戶必需的權(quán)限,否則用戶無法創(chuàng)建或運行輸出腳本。本文中的步驟不會為特定登錄傳輸默認(rèn)數(shù)據(jù)庫信息。這是因為默認(rèn)數(shù)據(jù)庫不可能總是存在于服務(wù)器B上。若要定義某個登錄的默認(rèn)數(shù)據(jù)庫,請使用ALTERLOGIN語句,并傳入登錄名和默認(rèn)數(shù)據(jù)庫作為參數(shù)。服務(wù)器A的排序順序可能不區(qū)分大小寫,而服務(wù)器B的排序順序可能區(qū)分大小寫。在此情況下,當(dāng)您將登錄和密碼傳輸?shù)椒?wù)器B上的實例之后,必須以大寫字母的形式來鍵入密碼中的所有字母?;蛘?,服務(wù)器A的排序順序可能區(qū)分大小寫,而服務(wù)器B的排序順序可能不區(qū)分大小寫。在此情況下,您將無法使用傳輸?shù)椒?wù)器B上的實例的登錄和密碼進行登錄,除非滿足下面的條件之一:o原始密碼不包含字母。o原始密碼中的所有字母都是大寫字母。服務(wù)器A和服務(wù)器B的排序順序可能都區(qū)分大小寫,或者可能都不區(qū)分大小寫。在這些情況下,用戶不會遇到問題。已經(jīng)位于服務(wù)器B上的實例中的登錄可能具有與輸出腳本中的某個名稱相同的名稱。在此情況下,當(dāng)對服務(wù)器B上的實例運行輸出腳本時,會接收到下面的錯誤消息:消息15025,級別16,狀態(tài)1,行1服務(wù)器主體'MyLogin'已存在。類似地,已經(jīng)位于服務(wù)器B上的實例中的登錄可能具有與輸出腳本中的某個SID相同的SID。在此情況下,當(dāng)對服務(wù)器B上的實例運行輸出腳本時,會接收到下面的錯誤消息:消息15433,級別16,狀態(tài)1,行1所提供的參數(shù)sid正在使用。因此,必須執(zhí)行以下操作:7仔細檢查輸出腳本。7檢查服務(wù)器B上的實例中的“sys.server_principals”視圖的內(nèi)容。7相應(yīng)地解決這些錯誤消息。?在SQLServer2005中,登錄的SID用作實現(xiàn)數(shù)據(jù)庫級別訪問的基礎(chǔ)。一個登錄可能在服務(wù)器的兩個不同數(shù)據(jù)庫中具有兩個不同的SID。在此情況下,該登錄只可以訪問具有與“sys.server_principals”視圖中的SID匹配的SID的數(shù)據(jù)庫。在從兩個不同的服務(wù)器合并這兩個數(shù)據(jù)庫時,可能會出現(xiàn)此問題。若要解決此問題,可使用DROPUSERT語句,從具有不匹配的SID的數(shù)據(jù)庫中手動刪除相應(yīng)的登錄。然后,通過使用CREATEUSER語句再次添加該登錄。2.如何保證數(shù)據(jù)庫遷移0停機,實時遷移?回答:我們基于CDC技術(shù)+數(shù)據(jù)庫鏡像技術(shù)來實現(xiàn)遷移0停機。在常見的企業(yè)數(shù)據(jù)平臺管理中有一項任務(wù)是一直困擾SQLServerDBA們的,這就是對數(shù)據(jù)更新的監(jiān)控。很多數(shù)據(jù)應(yīng)用都需要捕獲對業(yè)務(wù)數(shù)據(jù)表的更新。筆者見過幾種解決方案:1、在數(shù)據(jù)表中加入特殊的標(biāo)志列;2、通過在數(shù)據(jù)表上創(chuàng)建觸發(fā)器;3、通過第三方產(chǎn)品,例如舊M的LogExplorer。其實第1種和第2中方案都不好,因為第1種方法需要在應(yīng)用程序編碼的時候尤為小心,如果有一段數(shù)據(jù)訪問邏輯忘了更新標(biāo)志位就會導(dǎo)致遺漏某些數(shù)據(jù)更新,而第2種方法對性能影響過于明顯,因為觸發(fā)器的性能開銷是眾所周知的。第3種方法其實屬于一種叫做LogAudit的方案體系。因為SQLServer同其他關(guān)系型數(shù)據(jù)庫一樣,所有數(shù)據(jù)操作都會在日志中記錄,因此通過分析日志就可以獲得完整的數(shù)據(jù)操作歷史。SQLServer其實早就有內(nèi)部的API可供ISV開發(fā)者中LogAudit的方案,不過微軟對這套API控制比較嚴(yán)格,只有簽署了一堆協(xié)議的核心級合作伙伴才能了解這套API。因此,現(xiàn)對業(yè)務(wù)數(shù)據(jù)更新的跟蹤在SQLServer平臺上一直是一件非常頭疼的事情,用戶需要在投入大量開發(fā)精力和投入額外采購成本之間做出選擇。幸運的事,微軟終于在SQLServer2008中提供了一套半公開的LogAudit機制,就是我們所說的ChangeDataCapture,我們后面簡稱CDC。CDC的工作原理我們前面說過CDC是通過分析日志獲得數(shù)據(jù)操作歷史信息的,那么CDC的工作原理到底是怎么樣的呢?下圖可以非常貼切地說明這個功能的原理:圖1?當(dāng)DML提交到應(yīng)用數(shù)據(jù)庫時,SQLServer必須寫入日志,并在緩存中更新數(shù)據(jù),然后在檢查點將內(nèi)存中的數(shù)據(jù)刷回數(shù)據(jù)文件。?CDC的內(nèi)部進程根據(jù)CDC的設(shè)置,在日志文件中提取更新歷史信息,并將這些個更新信息寫入對應(yīng)的更新跟蹤表。?DBA或開發(fā)人員通過調(diào)用CDC的函數(shù)來訪問更新跟蹤表,提取感興趣的更新歷史信息,并通過ETL應(yīng)用程序更新數(shù)據(jù)倉庫。?理論上面更新跟蹤表事會無限制增長的,因此CDC內(nèi)部有一個清理進程,在默認(rèn)情況下更新跟蹤信息在寫入跟蹤表三天后會被自動清理。CDC的配置由于CDC是一項比較高端的功能,因此只有在SQLServer2008的企業(yè)版、開發(fā)版和評估版中才能找到CDC功能。啟用數(shù)據(jù)庫級別的CDC要啟用CDC功能,首先需要一個sysadmin服務(wù)器角色的成員用戶激活數(shù)據(jù)庫級別的CDC,這個過程可以通過sys.spcdcenabledbchangedatacapture存儲過程來完成。如果想知道一個數(shù)據(jù)庫是否啟用了CDC功能,可以通過查詢sys.databases系統(tǒng)目錄的is_cdc_enabled字段。當(dāng)一個數(shù)據(jù)庫啟用CDC功能后,SQLServer會自動在這個數(shù)據(jù)庫中創(chuàng)建cdc架構(gòu)和cdc用戶,所有CDC相關(guān)的數(shù)據(jù)表和用戶函數(shù)都會存放在cdc架構(gòu)下。CDC功能啟用后,SQLServer會首先在cdc架構(gòu)下創(chuàng)建五張表用于記錄一些CDC的原數(shù)據(jù),分別是ddl_history,change_tables,captured_columns,index_columns和lsn_time_mapping。在數(shù)據(jù)庫啟用了CDC后,接下來我們就需要在數(shù)據(jù)表上啟用CDC了。屬于db_owner角色的用戶可以通過存儲過程sys.sp_cdc_enable_table_change_data_capture來啟用對某張數(shù)據(jù)表的更新跟蹤,一張數(shù)據(jù)表最多可以設(shè)置兩個跟蹤實例。每個跟蹤實例中可以設(shè)置對原始數(shù)據(jù)表的所有列或部分列進行更新跟蹤。如果想知道數(shù)據(jù)表是否進行了更新跟蹤,DBA可以查詢sys.tables系統(tǒng)目錄的is_tracked_by_cdc字段。對一張數(shù)據(jù)表啟用CDC跟蹤實例后,SQLServer會在cdc架構(gòu)下創(chuàng)建一張數(shù)據(jù)表用于記錄從日志中解析出來的更新歷史信息。一段CDC的評估腳本為了評估CDC功能,我特地寫了一段腳本如下:1、首先創(chuàng)建一個測試數(shù)據(jù)庫;2、然后激活TestCDC數(shù)據(jù)庫上的更新捕獲功能;USETestCDCGOEXECspcdcenabledbchangedatecapture;GO執(zhí)行了存儲過程sp_cdc_enable_db_change_data_capture后,就會在數(shù)據(jù)庫TestCDC中看到有一些新的表被創(chuàng)建了,分別是ddl_history,change_tables,captured_columns,index_columns和lsn_time_mapping,并且這5張表都是在cdc架構(gòu)下。3、然后在TestCDC數(shù)據(jù)庫中創(chuàng)建測試表USETestCDCGOCREATETABLEdbo.Product(ProductIDintPRIMARYKEYNOTNULL,ProductNamenvarchar(100),Categorynvarchar(50))GO4、在dbo.Product表上激活更新跟蹤EXECsp_cdc_enable_table_change_data_captu

re'dbo','Product',@role_name=NULL,@supports_net_changes=1;成功提交上述命令后,就可以在數(shù)據(jù)表change_tables,captured_columns和index_columns表中看到相應(yīng)的記錄,其中change_table中一條,capture_column中三條,index_columns中一條。同時cdc架構(gòu)下有增加了一張新表叫做dbo_Product_CT,這張表的結(jié)構(gòu)和Product表的結(jié)構(gòu)有點相似,Product表中的三列在dbo_Product_CT中都有,同時dbo_Product_CT表中還增加了_$512汁_舊『,_$end_lsn,_$seqval,_$operationff_$update_mask五個新的字段。-hU:iB%P%B&X其實在存儲過程sp_cdc_enable_table_change_data_capture中有一系歹列的參數(shù),在這里我們?yōu)榱撕喕雎粤艘粋€參數(shù)就是@captured_column_list,這個參數(shù)可以對表中特定的某些字段啟用更新跟蹤。5、在Product表上提交INSERT語句INSERTINTOdbo.ProductVALUES(1,N'ABC',N'A');提交完了這條命令后,就會在lsn_time_mapping和dbo_Product_CT中分別看到一條新記錄。其中dbo_Product_CT表中的_$operation字段的值是2,_$update_mask字段的值是0x07。_$operation字段是代表DML操作類型,1是delete,2是insert,3是update的舊值,4是update的新值。$update_mask字段是表示一個字段列表的掩碼,那些在DML操作中被更新了的字段位為1,而沒有更新的字段位為0。在本例中Product表一共有三列被跟蹤,所以應(yīng)該是一個三位的二進制數(shù),右邊低位第一位是第一列ProductID,低位第二位是第二列ProductName,第三位就是Category了。因為這是一次INSERT,所以更新涉及到了所有的三列,所以_$update_mask字段就應(yīng)該是0x7了。6、繼續(xù)在Product表上提交UPDATE語句UPDATEdbo.ProductSETCategory=N'B'WHEREProd

uctID=1;提交完這條命令后,當(dāng)然也會在lsn_time_mapping和dbo_Product_CT中看到新記錄了。不過這次lsn_time_mapping中是一條,而dbo_Product_CT中則是兩條。(為什么會這樣呢?建議大家自己試一下咯,一試就明白了。)其中dbo_Product_CT表中的_$operation字段的值是第一條是3,第二條是4,_$update_mask字段的值兩條都是0x04。在這次操作中我們更新的是第三列,所以_$update_mask字段就應(yīng)該是0x4了。(如果我們更新的是ProductID會發(fā)%_$update_mask并非是0x1,而同樣是0x7,這估計是因為ProductID是主鍵,更新主鍵應(yīng)該視同一條新的記錄。)7、再來一次UPDATEUPDATEdbo.ProductSETCategory=N'A'WHEREProductID=1;提交完這條命令后,在dbo_Product_CT中又看到兩條新記錄了。其中dbo_Product_CT表中的_$operation字段的值是第一條是3,第二條是4,_$update_mask字段的值兩條都是0x04。(看來CDC確實會記錄下數(shù)據(jù)的每次修改。)8、繼續(xù)在Product表上提交DML語句DELETEdbo.ProductWHEREProductID=1;提交完了這條命令后,就會在lsn_time_mapping和dbo_Product_CT中分別看到一條新記錄。其中dbo_Product_CT表中的_$operation字段的值是1,_$update_mask字段的值是0x07。9、提交一個DDL試試看ALTERTABLEdbo.ProductADDDescriptionnvarc

har(100);提交完這句命令后,只會在ddl_history表中看到一條新的記錄。10、然后再試試DMLUPDATEdbo.ProductSETDescription=N'NA';提交完這句語句后,所有cdc架構(gòu)下的表中都沒有看到新記錄。說明新增的列Description不跟蹤更新了......估計有人會說(細心的人哦!”“這次當(dāng)然看不到新記錄了,因為在前面第7步我們已經(jīng)刪除了所有的記錄,因此這次的UPDATE語句沒有影響到任何記錄,當(dāng)然CDC的表中不會有任何記錄了?!蹦敲吹降讓escription更新會不會記錄呢,經(jīng)過測試確實是不記錄的。那么如果我們想對Description也進行更新跟蹤應(yīng)該怎么辦呢?很簡單的,由另外一個存儲過程叫做sp_cdc_disable_table_change_data_capture可以禁用對某張表的更新跟蹤,可以使用這個存儲過程先對Product表禁用更新跟蹤,然后再重新啟用對Product表的更新跟蹤就可以了。11、最后試一下DROP命令DROPTABLEdbo.Product;dbo.Product表消失了,同時cdc.dbo_Product_CT表也消失了。12.評估結(jié)束。一定有人問,捕獲到的更新怎么用呢,還有一堆系統(tǒng)函數(shù)和存儲過程可以幫助用戶,但是那段測試的過程就不詳細寫了。其中最重要的應(yīng)該就是cdc.fn_cdc_get_all_changes_和cdc.fn_cdc_get_net_changes_兩個函數(shù)了,這兩個函數(shù)可以幫助我們獲取dbo_Product_CT表中數(shù)據(jù),其中cdc.fn_cdc_get_all_changes_是用于獲取所有更新,而cdc.fn_cdc_get_net_changes_則是用于獲取精簡后的更新,在精簡的更新中有一些重復(fù)的更新就會被合并成一條記錄,比如說我們把產(chǎn)品類型由A改為B,然后又改回A,在cdc.fn_cdc_get_all_changes_中應(yīng)該有3條記錄,而在cdc.fn_cdc_get_net_changes_中則只有1條記錄。兩個函數(shù)的范例如下(你會發(fā)現(xiàn)精簡結(jié)果集的函數(shù)運算相當(dāng)慢,至少在CTP4中是這樣的,不知道以后的版本會不回有改進):SELECT*FROMcdc.fn_cdc_get_all_changes_dbo_Product(0x00000048000001760004

,0X00000048000001F70004,'all');SELECT*FROMcdc.fn_cdc_get_net_changes_dbo_Product(0x00000048000001760004,0X00000048000001F70004,'all');CDC功能的IO開銷很明顯,CDC功能是會產(chǎn)生一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論