翻譯|使用教程|編輯:莫成敏|2020-05-28 15:52:11.070|閱讀 536 次
概述:本文介紹了如何應(yīng)對由于部署期間進(jìn)行的各種檢查和測試以及修復(fù)而導(dǎo)致的任何數(shù)據(jù)庫漂移。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
SQL Compare是一款比較和同步SQL Server數(shù)據(jù)庫結(jié)構(gòu)的工具。現(xiàn)有超過150,000的數(shù)據(jù)庫管理員、開發(fā)人員和測試人員在使用它。當(dāng)測試本地?cái)?shù)據(jù)庫,暫存或激活遠(yuǎn)程服務(wù)器的數(shù)據(jù)庫時,SQL Compare將分配數(shù)據(jù)庫的過程自動化。
本文介紹了如何應(yīng)對由于部署期間進(jìn)行的各種檢查和測試以及修復(fù)而導(dǎo)致的任何數(shù)據(jù)庫漂移。
想象一下。Deb DBA剛在staging中簽出了一個新版本的數(shù)據(jù)庫。她突然發(fā)現(xiàn)該版本已“漂移”。從版本控制部署的是版本6.3.5,但是自那時以來,遷移腳本似乎有了一些微小但重要的更改。NVARCHAR數(shù)據(jù)類型必須增加大小以避免被截?cái)唷P阅軠y試中存在一個愚蠢的故障,因?yàn)橛腥伺e了索引。安全團(tuán)隊(duì)還根據(jù)用戶輸入(未使用parameter)發(fā)現(xiàn)了一些已執(zhí)行代碼的問題。他們修復(fù)了存儲過程,因?yàn)檫@樣做比解釋過程更容易。有一個討厭的CHECK約束,它會觸發(fā)非常好的數(shù)據(jù)。測試團(tuán)隊(duì)對此進(jìn)行了處理。當(dāng)發(fā)布通過管道時,他們依次更改遷移腳本。
DBA被告知要發(fā)布此版本,因?yàn)槠髽I(yè)對其包含的新功能有很大的壓力,并且所有參與管道開發(fā)的人員都同意,經(jīng)過一個不穩(wěn)定的開始之后,現(xiàn)在已經(jīng)可以了。她是做什么的?這些更改已很好地記錄在腳本中。他們應(yīng)該處于源代碼控制中。她不能直接訪問源代碼控制系統(tǒng),只有開發(fā)中的Derek可以訪問SQL Compare。
Deb的難題是這個。準(zhǔn)備階段的數(shù)據(jù)庫是候選版本,并且其遷移腳本已準(zhǔn)備就緒,經(jīng)過測試并可以很好地簽出,但該數(shù)據(jù)庫不再是v6.3.5。在負(fù)責(zé)任地從登臺發(fā)布到生產(chǎn)之前,她需要它成為源代碼控制中的新版本6.3.6。
首先也是最重要的事情是創(chuàng)建一個表示臨時版本的時間點(diǎn)構(gòu)建腳本。SSMS可以做到這一點(diǎn),并且默認(rèn)設(shè)置很好。
從SSMS獲取構(gòu)建腳本
在SSMS的對象瀏覽器窗格上,單擊服務(wù)器的“數(shù)據(jù)庫”項(xiàng),然后右鍵單擊數(shù)據(jù)庫的名稱。您會看到一個上下文菜單。找到通向子菜單的“任務(wù)”項(xiàng)目。這有一個項(xiàng)目“Generate Scripts…”。單擊此,您將到達(dá)腳本編制向?qū)АT诮榻B性頁面之后,您將看到此內(nèi)容。
您會看到我輸入了想要作為腳本目標(biāo)的文件的名稱和位置。有一個“高級”按鈕,可讓您精確指定腳本的使用方式。這有點(diǎn)像向一位過于熱心的咖啡師點(diǎn)咖啡。幸運(yùn)的是,您可以忽略該按鈕,因?yàn)槟J(rèn)設(shè)置可以使我們滿意。單擊“下一步”,您將看到以下內(nèi)容:
您,或者說Deb DBA,現(xiàn)在差不多完成了。Deb現(xiàn)在要做的就是給腳本加注解,以描述誰在哪里做過什么以及在哪里做(她在每個評論中都包含一個#,以便于查找。)然后,她將腳本發(fā)送給開發(fā)中的Derek。
更新源代碼管理:將更改添加到對象源
下一步是將更改添加到源代碼管理中,為此,我們將使用SQL Compare。
您,或者說Derek,應(yīng)該創(chuàng)建一個目錄并將構(gòu)建腳本放入其中。該腳本應(yīng)該是目錄中的唯一文件。目標(biāo)是本地GitHub目錄中版本6.3.5的源代碼目錄。請注意:SQL Compare不正式支持使用SSMS構(gòu)建腳本作為源。您將看到一些警告,指出“忽略了非模式語句”,但是請堅(jiān)持并單擊“繼續(xù),而不解決錯誤 ”,并且SQL Compare將在源中生成其通常的對象列表,這些對象與目標(biāo)中的對象不同。
Derek現(xiàn)在可以將檢測到的更改部署到本地GitHub目錄,以更新對象級源,使其版本為6.3.6。他還可以節(jié)省6.3.5到6.3.6遷移腳本的初始剪切,該腳本將由SQL Compare強(qiáng)制生成。
在不同的情況下,目標(biāo)可能是空的源目錄,在這種情況下,Derek在開發(fā)系統(tǒng)上將具有有關(guān)Staging數(shù)據(jù)庫當(dāng)前版本的“參考構(gòu)建”。
將更改的文件提交到GitHub
我們假設(shè)您使用的是Github或Git。盡管開發(fā)中的Derek可以以自己的名字來進(jìn)行更改,但這并不安全,因?yàn)槿藗冇幸惶鞎涍@一插曲和怪罪Derek的全部細(xì)節(jié)。這里的目的是創(chuàng)建一個新版本,由從事Git列出工作的人員作為共同作者。為此,他們的電子郵件應(yīng)位于配置設(shè)置中。
如果Derek知道誰做了什么,則可以作為更改發(fā)行版的人來提交。例如,Timothy Tester可能已添加索引。可以Timothy的名義進(jìn)行這種更改。
Derek Developer現(xiàn)在對Deb進(jìn)行了批準(zhǔn)。現(xiàn)在,由于對遷移腳本的各種更改已在逐步顯現(xiàn)之前已經(jīng)在階段中進(jìn)行了有效的測試,因此Deb DBA在發(fā)布之前只有一項(xiàng)最終任務(wù)。她將遷移腳本中的版本號更改為6.3.6。
結(jié)論
可以很高興地假設(shè)我們都一如既往地實(shí)踐各種有關(guān)持續(xù)交付手冊的方法。問題是在數(shù)據(jù)庫應(yīng)用程序的部署中必須檢查許多因素。我們可以鼓勵所有人“向左移動”,以確保發(fā)布候選版本是完美的,但有時我們必須對務(wù)實(shí)的決定做出反應(yīng)。SQL Compare很靈活;它可以應(yīng)對偶發(fā)性問題,否則這些問題可能會阻止部署停滯不前。
任何數(shù)據(jù)庫驅(qū)動的應(yīng)用程序中的協(xié)作都應(yīng)涵蓋整個發(fā)行鏈,包括質(zhì)量保證和操作,以確保單個發(fā)行版的復(fù)雜性大大降低,發(fā)布頻率更高。如果團(tuán)隊(duì)決定通過處理較小的問題而不是延遲發(fā)布來減少候選發(fā)布者的分類,那么作為團(tuán)隊(duì)成員,我們當(dāng)然要確保團(tuán)隊(duì)流程能夠足夠靈活地做到這一點(diǎn)。
相關(guān)產(chǎn)品推薦:
SQL Prompt:SQL語法提示工具
SQL Toolbelt:Red Gate產(chǎn)品套包
SQL Monitor:SQL Server監(jiān)控工具
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: