一步一步教你備份和恢復(fù)你的TFS服務(wù)器(組圖)
備份和恢復(fù)一個(gè)TFS(Team Foundation Server)服務(wù)器常常令人心生畏懼。因?yàn)檫@會(huì)涉及到很多服務(wù)和步驟。TFS(Team Foundation Server)2010一發(fā)布,我就知道我們必須要做些什么來(lái)改進(jìn)這個(gè)過(guò)程,同時(shí),我們也開(kāi)始討論如何簡(jiǎn)化這個(gè)過(guò)程。我們關(guān)注的主要客戶(hù)是小型的團(tuán)隊(duì),它們既沒(méi)有數(shù)據(jù)中心運(yùn)營(yíng)團(tuán)隊(duì),也沒(méi)有知道如何導(dǎo)入和導(dǎo)出SQL備份的DBA(Database administrator)。
幾個(gè)月以前,我們計(jì)劃構(gòu)建一個(gè)全新的Power Tool,這個(gè)工具將會(huì)極大地簡(jiǎn)化備份和恢復(fù)一個(gè)TFS(Team Foundation Server)服務(wù)器的過(guò)程。我很自豪地宣布,我們已經(jīng)實(shí)現(xiàn)了這個(gè)Power Tool,它會(huì)包含在Power Tools的下一個(gè)版本中(現(xiàn)在,還沒(méi)有確定具體日期,但是應(yīng)該就在接下來(lái)的幾個(gè)月內(nèi)發(fā)布)。
在我們當(dāng)前發(fā)布的備份指南中,最令人沮喪的事情是:你每次在服務(wù)器中添加一個(gè)新的項(xiàng)目集合的時(shí)候,你都必須要在這個(gè)新的數(shù)據(jù)庫(kù)中安裝一些新的存儲(chǔ)過(guò)程,以確保它可以獲得和其它所有的數(shù)據(jù)庫(kù)一致的快照。據(jù)我所知,大多數(shù)人都會(huì)忘記做這件事情。雖然,這并不意味著世界末日,但是,如果你忘記做這件事情,它就無(wú)法給你提供最無(wú)縫的恢復(fù)體驗(yàn)。這個(gè)新工具最酷的一個(gè)特性是:你每次進(jìn)行備份的時(shí)候,它都可以自動(dòng)地掃描所有的項(xiàng)目集合,同時(shí),它會(huì)確保安裝了所有合適的快照,當(dāng)你建立一個(gè)新的集合的時(shí)候,沒(méi)有任何附加的備份工作需要你來(lái)完成。這個(gè)新集合會(huì)被自動(dòng)地配置,然后添加到你現(xiàn)有的備份計(jì)劃中。
你的部署越復(fù)雜,你的備份就越復(fù)雜。在這個(gè)討論中,我將會(huì)把關(guān)注點(diǎn)放在TFS的初級(jí)用戶(hù)上,因?yàn)檫@方面的簡(jiǎn)化是***的,但是,這個(gè)Power Tool實(shí)際上可以幫助所有用戶(hù)簡(jiǎn)化備份和恢復(fù)的過(guò)程。
當(dāng)我們開(kāi)始構(gòu)建這個(gè)Power Tool的時(shí)候,我們決定要利用全新的2010管理控制臺(tái)的一個(gè)未公開(kāi)的特性:可擴(kuò)展性。實(shí)際上,這個(gè)管理控制臺(tái)是支持插件的,但是我們沒(méi)有在文檔中公開(kāi)這些接口,因?yàn)槲覀冞€沒(méi)有對(duì)它們進(jìn)行足夠的測(cè)試。這是***次真正地對(duì)它們進(jìn)行測(cè)試,我希望在將來(lái)我們可以把這些接口公開(kāi)給第三方的插件。讓我?guī)泐I(lǐng)略一下全新的備份體驗(yàn),同時(shí),我會(huì)告訴你這個(gè)工具可以做些什么。
配置一個(gè)備份計(jì)劃
在你的TFS(Team Foundation Server)2010服務(wù)器上安裝新版本的Power Tools以后(是的,這個(gè)工具只支持TFS(Team Foundation Server)2010),你會(huì)注意到在管理控制臺(tái)中有一個(gè)新標(biāo)簽,叫做“Team Foundation Backups”。當(dāng)你點(diǎn)擊這個(gè)標(biāo)簽的時(shí)候,你會(huì)看到這樣一個(gè)界面,通過(guò)這個(gè)界面,你可以配置你的TFS(Team Foundation Server)備份計(jì)劃。
如果你點(diǎn)擊“Create Backup Plan”,會(huì)啟動(dòng)一個(gè)向?qū)В瑏?lái)引導(dǎo)你完成整個(gè)過(guò)程。這是這個(gè)向?qū)У膚elcome頁(yè)面:
點(diǎn)擊“Next”,它會(huì)導(dǎo)航到***個(gè)頁(yè)面,在這個(gè)頁(yè)面中你可以輸入備份的路徑和你希望保存?zhèn)浞莸奶鞌?shù)(超過(guò)這個(gè)天數(shù)以后,它會(huì)自動(dòng)地刪除備份)。當(dāng)然,如果你希望自己手動(dòng)刪除備份,也可以很容易地做到——它們只是特定目錄下的一些文件而已。
再次點(diǎn)擊“Next”,你可以提供自動(dòng)執(zhí)行備份的賬戶(hù),同時(shí),你可以看到這個(gè)賬戶(hù)需要什么SQL權(quán)限。正如你將會(huì)看到的那樣,以后的備份并不是一定要被自動(dòng)化,但是他們可以被自動(dòng)化。
再次點(diǎn)擊“Next”,你現(xiàn)在可以進(jìn)行一些配置,讓備份服務(wù)把備份過(guò)程中的故障email給你。在這個(gè)例子中,我沒(méi)有給我的TFS(Team Foundation Server)服務(wù)器配置SMTP主機(jī),所以我唯一的選擇是“No Email Alerts”。 這里你可以使用和其他TFS(Team Foundation Server)通知一樣的email主機(jī)和地址,也可以指定唯一的收件人。如果你想指定多個(gè)收件人,你可以用逗號(hào)把這些收件人的email地址隔開(kāi)。
再次點(diǎn)擊“Next”,你現(xiàn)在可以配置時(shí)間表了。默認(rèn)是每天晚上對(duì)你的TFS(Team Foundation Server)進(jìn)行完整的備份。對(duì)于小型的TFS(Team Foundation Server)來(lái)說(shuō),這已經(jīng)足夠了。選擇這個(gè)選項(xiàng)意味著將會(huì)在每天凌晨2點(diǎn)進(jìn)行完整的備份。如果你想進(jìn)行更多的控制,你可以點(diǎn)擊“Advanced Schedules Options”。
如果你選擇了“Advanced Schedules”,那么你會(huì)得到兩個(gè)選項(xiàng):1) Full, Differential and Transactional Schedule和2) Manual Backup Only。如果你選擇了“Manual Backup Only”,它不會(huì)自動(dòng)地執(zhí)行任何的備份,只有當(dāng)你運(yùn)行管理控制臺(tái),點(diǎn)擊“Take Full Backup Now”按鈕的時(shí)候才會(huì)執(zhí)行一次備份(稍后會(huì)詳細(xì)說(shuō)明這部分內(nèi)容)。這里我選擇“Full, Differential and Transactional Schedule”——這是一個(gè)十分具有代表性的企業(yè)備份策略。我把它設(shè)置成每個(gè)星期天的凌晨2點(diǎn)做一次完整的備份,每周的周一到周六的凌晨2點(diǎn)做一次差異備份(有時(shí)也稱(chēng)作增量備份),每15分鐘做一次事務(wù)性的備份。這意味著我不會(huì)丟失15分鐘以上的數(shù)據(jù),這種策略的性能和存儲(chǔ)開(kāi)銷(xiāo)并不大。SQL備份功能的這些特性真的很酷。
我已經(jīng)配置好了時(shí)間表,點(diǎn)擊“Next”,讓我檢查一下我的設(shè)置。
再次點(diǎn)擊“Next”將會(huì)驗(yàn)證我提供的這些設(shè)置的有效性。你總不會(huì)希望等到第二天凌晨2點(diǎn)才發(fā)現(xiàn)你錯(cuò)誤地輸入了一些東西吧:)在這個(gè)例子中我收到了一個(gè)警告,因?yàn)槲乙呀?jīng)有了一個(gè)配置好的備份計(jì)劃,而我正在重寫(xiě)它。這個(gè)工具規(guī)定一個(gè)TFS(Team Foundation Server)服務(wù)器只能擁有一個(gè)備份時(shí)間表。
點(diǎn)擊“Configure”,將會(huì)為了備份而重新配置你的TFS(Team Foundation Server)服務(wù)器,這會(huì)對(duì)你的TFS(Team Foundation Server)服務(wù)器做出一些改動(dòng)。
再次點(diǎn)擊“Next”,現(xiàn)在你已經(jīng)完成了所有的配置工作!對(duì)于備份來(lái)說(shuō),你的服務(wù)器已經(jīng)完全配置好了(可以和文檔比較一下:))。
進(jìn)行一次備份
當(dāng)然,如果你已經(jīng)建立了一個(gè)時(shí)間表,那么備份會(huì)在指定的時(shí)間自動(dòng)地進(jìn)行,但是我真的無(wú)法給你展示一張很酷的截圖——那是不可見(jiàn)的:)。無(wú)論你是否建立了一個(gè)時(shí)間表。你都可以在任意時(shí)間執(zhí)行一次完整的備份。如果備份計(jì)劃已經(jīng)配置好了,Team Foundation Backups窗格看起來(lái)應(yīng)該是這樣的。它會(huì)顯示你的很多設(shè)置,并且會(huì)提供一個(gè)管理操作的列表(在右邊)。
如果你點(diǎn)擊“Take Full Backup Now”,它會(huì)執(zhí)行一次備份,然后把備份文件放在計(jì)劃中指定的文件系統(tǒng)目錄中。就是這樣,就這么簡(jiǎn)單!
恢復(fù)一個(gè)備份
恢復(fù)一個(gè)備份需要一點(diǎn)技巧,它主要取決于你要做什么。我們支持兩種基本的場(chǎng)景:
1)恢復(fù)一個(gè)或多個(gè)團(tuán)隊(duì)項(xiàng)目集合(而不是真?zhèn)€服務(wù)器)。如果一個(gè)團(tuán)隊(duì)把他們的數(shù)據(jù)庫(kù)搞亂了,他們想恢復(fù)它,但是所有使用這個(gè)服務(wù)器的其他團(tuán)隊(duì)又不想被打斷,那么,你可以進(jìn)行這樣的操作。
2)恢復(fù)整個(gè)Team Foundation Server的數(shù)據(jù)(也許你保存數(shù)據(jù)的驅(qū)動(dòng)器損壞了)。
這兩個(gè)過(guò)程幾乎是一樣的,但是我會(huì)指出幾個(gè)主要的區(qū)別。這些步驟只是示意性的,要深入了解如何進(jìn)行配置,你可以參考Power Tools提供的文檔。
你必須要做的***件事情是讓這個(gè)服務(wù)器為恢復(fù)做好準(zhǔn)備。
如果你要恢復(fù)整個(gè)服務(wù)器,你應(yīng)該使用命令提示符,然后在TFS(Team Foundation Server) 2010的Tools目錄中運(yùn)行“tfsservicecontrol quiesce”。這會(huì)關(guān)閉所有的TFS(Team Foundation Server)服務(wù),同時(shí),這會(huì)釋放所有的數(shù)據(jù)庫(kù)鎖。
如果你只是要恢復(fù)一些特定的集合,這個(gè)工具會(huì)提示你,來(lái)獲取你要在脫機(jī)狀態(tài)下恢復(fù)哪些集合,然后自動(dòng)地拷貝那個(gè)用于替換的集合。
這個(gè)工具很保守。它不會(huì)重寫(xiě)任何數(shù)據(jù)。所以,除了恢復(fù)一些特定的集合的情況之外,如果你要恢復(fù)一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)的備份,你必須首先刪除這個(gè)數(shù)據(jù)庫(kù)。你可以使用SQL Server Management Studio或SQL Server Management Studio Express來(lái)完成這個(gè)任務(wù),這是很容易做到的。我更喜歡先Detach一些數(shù)據(jù)庫(kù),然后再移除它們,但是你也可以直接刪除這些數(shù)據(jù)庫(kù)。所有這些都可以通過(guò)在SQL Server Management Studio中右擊上下文菜單來(lái)完成。
現(xiàn)在你已經(jīng)為恢復(fù)做好準(zhǔn)備了。在TFS(Team Foundation Server)的管理控制臺(tái)中,在“Team Foundation Backups”標(biāo)簽下,你點(diǎn)擊“Restore Databases”。這會(huì)啟動(dòng)一個(gè)向?qū)В瑏?lái)引導(dǎo)你完成這個(gè)過(guò)程。
在歡迎屏上點(diǎn)擊“Next”以后,你可以瀏覽備份的列表,然后選擇一個(gè)想要恢復(fù)的備份集(通過(guò)這個(gè)備份的日期和時(shí)間)。
點(diǎn)擊“Next”以后,你需要在你希望恢復(fù)的這個(gè)備份集中選擇一些數(shù)據(jù)庫(kù)和對(duì)應(yīng)的SQL實(shí)例。如果一個(gè)數(shù)據(jù)庫(kù)的“SQL Server”域是空白的,那么這意味著不能恢復(fù)這個(gè)數(shù)據(jù)庫(kù)。在這個(gè)例子中,我要恢復(fù)同一個(gè)SQL實(shí)例中的所有數(shù)據(jù)庫(kù),但是,如果這是一個(gè)多實(shí)例的SQL Server,我可以選擇把它們恢復(fù)到不同的SQL實(shí)例中,來(lái)擴(kuò)展TFS(Team Foundation Server)服務(wù)器。
再次點(diǎn)擊“Next”,你可以檢查你剛才做出的一些選擇。
點(diǎn)擊“Next”或“Verify”可以確保這個(gè)恢復(fù)是有效的。
點(diǎn)擊“Restore”將會(huì)恢復(fù)這些SQL數(shù)據(jù)庫(kù)。
***,再次點(diǎn)擊“Next”會(huì)顯示一個(gè)“成功屏”:)它還包括一個(gè)“informational warning”,你很可能要在應(yīng)用程序?qū)由蟿h除這個(gè)緩存,因?yàn)槟悴幌牒蛣倓偦謴?fù)那個(gè)數(shù)據(jù)庫(kù)產(chǎn)生不一致。
如果你運(yùn)行了“tfsservicecontrol quiesce”,你必須要做的***一件事情是運(yùn)行“tfsservicecontrol unquiesce”,讓TFS(Team Foundation Server)服務(wù)器重新上線。
總結(jié)
就是這樣!就這么簡(jiǎn)單!如果你以前做過(guò)TFS(Team Foundation Server)服務(wù)器的備份/恢復(fù),你一定會(huì)承認(rèn)這種方法是更加容易的。我的討論并沒(méi)有涵蓋所有說(shuō)明(那是文檔應(yīng)該做的工作),也沒(méi)有涵蓋所有的備份策略,如果你還沒(méi)有測(cè)試過(guò)它,不能只依靠這篇文章。無(wú)論你做了什么工作——你都要確保你可以備份和成功恢復(fù)所有數(shù)據(jù),請(qǐng),請(qǐng),請(qǐng)不要在偶然地修改格式或刪除你還沒(méi)有備份的數(shù)據(jù)的過(guò)程中讓你的系統(tǒng)遭到破壞。在一個(gè)帶有真實(shí)數(shù)據(jù)的生產(chǎn)性的系統(tǒng)上測(cè)試它以前,你可以首先在一個(gè)仿真的系統(tǒng)上,或者在一個(gè)“預(yù)生產(chǎn)”的系統(tǒng)上測(cè)試它。
對(duì)于這個(gè)全新的Power Tool,我真的激動(dòng)萬(wàn)分。讓管理一個(gè)TFS(Team Foundation Server)服務(wù)器盡可能地容易,這是下一個(gè)步驟。就像我說(shuō)的那樣,在下一個(gè)版本的Power Tools中,它會(huì)和其他炫酷的工具一起發(fā)布。只要它一發(fā)布,我就會(huì)告訴大家的。像過(guò)去一樣,歡迎大家提供反饋。