翻譯|使用教程|編輯:楊鵬連|2020-07-24 10:55:17.290|閱讀 284 次
概述:當(dāng)決定使用Redgate的開發(fā),版本控制和部署工具自動(dòng)化SQL Server數(shù)據(jù)庫(kù)構(gòu)建和部署時(shí),Phil Factor解決了您需要回答的棘手問題。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
SQL Compare是一款比較和同步SQL Server數(shù)據(jù)庫(kù)結(jié)構(gòu)的工具?,F(xiàn)有超過150,000的數(shù)據(jù)庫(kù)管理員、開發(fā)人員和測(cè)試人員在使用它。當(dāng)測(cè)試本地?cái)?shù)據(jù)庫(kù),暫存或激活遠(yuǎn)程服務(wù)器的數(shù)據(jù)庫(kù)時(shí),SQL Compare將分配數(shù)據(jù)庫(kù)的過程自動(dòng)化。
如何部署SQL Server數(shù)據(jù)庫(kù)?
曾經(jīng)有一段時(shí)間,使用RDBMS的唯一方法是在使用大容量復(fù)制實(shí)用程序輸出其數(shù)據(jù)之后,將現(xiàn)有版本脫機(jī),然后從執(zhí)行的一個(gè)腳本中創(chuàng)建新版本以創(chuàng)建數(shù)據(jù)庫(kù)。然后,用導(dǎo)出的數(shù)據(jù)填充數(shù)據(jù)庫(kù),最后使系統(tǒng)恢復(fù)在線狀態(tài)。如何使用單個(gè)腳本達(dá)到這一點(diǎn)是另一回事。它可能最初是從實(shí)體關(guān)系圖表工具或某些其他設(shè)計(jì)工具生成的輸出。如果有更簡(jiǎn)單,更可靠的方法,即使是最狂熱的數(shù)據(jù)庫(kù)設(shè)計(jì)人員也不會(huì)手工剪切表構(gòu)建腳本。
該ALTER TABLE命令發(fā)布到SQL后。這為數(shù)據(jù)庫(kù)開發(fā)人員提供了在保留其數(shù)據(jù)的同時(shí)選擇更改現(xiàn)有數(shù)據(jù)庫(kù)的機(jī)會(huì),盡管只有少數(shù)情況下,RDBMS可以在沒有補(bǔ)充腳本的情況下做到這一點(diǎn)。如果使用了這種“遷移”腳本,那么會(huì)同時(shí)更改匹配的構(gòu)建腳本,以便隨后可以從頭開始創(chuàng)建“更改的”對(duì)象。
如今,開發(fā)和部署數(shù)據(jù)庫(kù)的方式取決于應(yīng)用程序和設(shè)置的類型。零售銀行或政府部門將不會(huì)容忍某些“初創(chuàng)”文化的做法。但是,任何組織都普遍認(rèn)為,必須有可能從源代碼構(gòu)建數(shù)據(jù)庫(kù),該源代碼存放在團(tuán)隊(duì)可見的存儲(chǔ)庫(kù)中。除此之外,開發(fā)團(tuán)隊(duì)還應(yīng)擁有選擇最合適的開發(fā)和發(fā)布系統(tǒng)的自由。
我建議,盡管現(xiàn)有數(shù)據(jù)庫(kù)應(yīng)用程序的發(fā)布過程應(yīng)以測(cè)試和使用保留現(xiàn)有數(shù)據(jù)的一個(gè)或多個(gè)遷移腳本為主導(dǎo),但是常規(guī)的自動(dòng)構(gòu)建是開發(fā)數(shù)據(jù)庫(kù)最快,最省心的方法,因此只要記錄并解決了每個(gè)潛在的數(shù)據(jù)遷移問題,便可以解決問題。
一個(gè)團(tuán)隊(duì)如何在沒有“敲頭”的情況下一起完成一個(gè)腳本?
使用單個(gè)構(gòu)建腳本文檔,很容易與更新產(chǎn)生沖突,這些更新會(huì)干擾其他開發(fā)人員的并發(fā)工作。解決方案是使用SQLCMD腳本,該腳本以正確的順序提取所需數(shù)量的獨(dú)立文件。然后,您可以像往常一樣使用源代碼控制來(lái)跟蹤每個(gè)對(duì)象的演變。該-i命令行選項(xiàng)允許你指定的文件列表。SQLCMD在按照指定的順序執(zhí)行它們之前檢查它們是否全部存在。每個(gè)組件文件都可以放在源代碼管理中。由于每個(gè)文件都可以依次列出:r<filename>在文件中使用SQLCMD命令,即使使用最復(fù)雜的數(shù)據(jù)庫(kù),也不會(huì)被迫擁有大型腳本文件,并且可以保證以指定的正確順序執(zhí)行它們。使用遷移腳本,每個(gè)發(fā)行版都需要自己的腳本,并且只能用于從一個(gè)版本遷移到下一個(gè)“目標(biāo)”版本。這在源代碼管理中,并且像其他任何文件一樣對(duì)待??梢暂p松地將它們鏈接在一起,以將目標(biāo)移動(dòng)到多個(gè)版本級(jí)別。
為什么這些單獨(dú)的腳本文件必須全部按順序排列?
甚至表也取決于所定義的其他SQL Server組件。例如,當(dāng)您擁有UDT(用戶定義的數(shù)據(jù)類型)時(shí),需要在表之前放置這些UDT。在還創(chuàng)建它們引用的對(duì)象之前,不能創(chuàng)建函數(shù)。您需要在創(chuàng)建的表中放置所有約束和引用,因此易于理解設(shè)計(jì),這意味著通常需要以正確的依賴關(guān)系順序來(lái)構(gòu)建表。這些僅僅是示例。出于不同的原因,必須按順序?qū)w移文件進(jìn)行排序:如果您需要移動(dòng)一個(gè)現(xiàn)有數(shù)據(jù)庫(kù)多個(gè)版本步驟。按照慣例,遷移腳本會(huì)從一個(gè)版本轉(zhuǎn)移到另一個(gè)版本。要升級(jí)兩個(gè)版本步驟,請(qǐng)先遷移到下一個(gè)版本,然后再遷移到下一個(gè)版本。
我不能僅將自己限制在不引起依賴關(guān)系的SQL Server對(duì)象上嗎?UDT和函數(shù)畢竟有點(diǎn)深?yuàn)W。
您將不是第一個(gè)嘗試這樣做的人,但是也許您將是第一個(gè)成功的人。無(wú)論如何,祝你好運(yùn)。
如何以正確的順序獲取所有源文件?
如果您繼承了混亂,則取決于混亂程度。如果您已經(jīng)擁有最新的工作數(shù)據(jù)庫(kù),則可以使用SSMS生成一個(gè)單文件構(gòu)建腳本,該腳本將告訴您正確的順序。如果沒有當(dāng)前的數(shù)據(jù)庫(kù)構(gòu)建,如果將所有文件放在一個(gè)目錄中,則完全有可能使SQL Compare從混亂(源)生成單個(gè)文檔構(gòu)建腳本(目標(biāo))。您只需將凌亂的目錄與空數(shù)據(jù)庫(kù)同步,或/empty2在SQL Compare中使用方便的開關(guān)即可。
如果您將源文件夾和目標(biāo)文件夾都設(shè)置為腳本文件夾,則它將源目錄中的混亂情況帶入目標(biāo)文件夾中,并且將它們整齊地整理。在使用它時(shí),它甚至可以像您的母親一樣工作,可以通過將每個(gè)表和例程的源代碼分別整齊地放置在一個(gè)目錄中(每個(gè)類型的數(shù)據(jù)庫(kù)對(duì)象都有一個(gè)子目錄,每個(gè)數(shù)據(jù)庫(kù)對(duì)象一個(gè)文件)來(lái)清理原始混亂。表或其他類型的數(shù)據(jù)庫(kù)對(duì)象:(同時(shí)使源和目標(biāo)成為源目錄)。
無(wú)論選擇哪種方式獲取單個(gè)文檔構(gòu)建腳本,都會(huì)告訴您構(gòu)建數(shù)據(jù)庫(kù)的正確順序。然后,您只需要?jiǎng)?chuàng)建一個(gè)SQLCMD文件即可,該文件指定了正確的腳本執(zhí)行順序,并且有了修改和擴(kuò)展數(shù)據(jù)庫(kù)的基礎(chǔ)。像SQL Change Automation這樣的工具也可以讓您建立腳本的部署順序,但是您必須更改文件名。無(wú)論如何,您都可以直接從該目錄進(jìn)行構(gòu)建,并且可以插入任何必要的DML腳本。相似文件可以依次管理一組遷移腳本,以將新版本發(fā)布到生產(chǎn)環(huán)境。
為什么不繼續(xù)從所有腳本文件生成單文檔構(gòu)建腳本呢?
時(shí)間,精力和可重復(fù)性。如果需要,熟練的數(shù)據(jù)庫(kù)開發(fā)團(tuán)隊(duì)不會(huì)考慮每天幾次重建數(shù)據(jù)庫(kù)。前幾天,我在一小時(shí)內(nèi)建立了一個(gè)數(shù)據(jù)庫(kù)二十次。這意味著他們可以很快地掉頭解決設(shè)計(jì)錯(cuò)誤,從而減少了嘗試不同策略或使用導(dǎo)致更多依賴關(guān)系的功能時(shí)受到的抑制。即使不是很重要,他們也要定期進(jìn)行操作,以便第一個(gè)知道依賴關(guān)系變化的人。
當(dāng)您使用SQL Compare創(chuàng)建單文檔腳本時(shí),它不只是執(zhí)行SQL文件,還會(huì)解析這些文件,使用它們構(gòu)建源數(shù)據(jù)庫(kù)的模型,然后將其與目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行比較。然后,它生成自己的SQL,以使目標(biāo)與源相同。對(duì)于構(gòu)建而言,這無(wú)關(guān)緊要,即使任何DML(例如添加擴(kuò)展屬性,插入?yún)⒖紨?shù)據(jù)或枚舉)都將丟失。但是,在創(chuàng)建部署腳本時(shí),狡猾的遷移步驟將不再存在。
遷移腳本方法解決的所有那些問題呢?
數(shù)據(jù)庫(kù)構(gòu)建沒有任何此類問題。遷移腳本解決了在保留現(xiàn)有數(shù)據(jù)的同時(shí)更新現(xiàn)有數(shù)據(jù)庫(kù)的問題,而不是構(gòu)建數(shù)據(jù)庫(kù)的問題。從頭開始建立數(shù)據(jù)庫(kù)然后將數(shù)據(jù)放入其中要比在其中存放數(shù)據(jù)要容易得多,就像在居民搬進(jìn)來(lái)之前蓋房子要容易一樣。遷移就像蓋一棟房子。房屋擴(kuò)建,房屋仍被占用;可能性差不多,但這是另一個(gè)問題。另外,如果使用ALTER TABLE語(yǔ)句升級(jí)數(shù)據(jù)庫(kù),則需要進(jìn)行額外的工作,以確保更改也反映CREATE在源代碼管理的構(gòu)建腳本中。
那為什么還要擔(dān)心遷移呢?
遷移對(duì)于部署很重要。一旦完成測(cè)試,并且團(tuán)隊(duì)對(duì)于發(fā)布候選版本適合發(fā)布并因此準(zhǔn)備好進(jìn)行部署管道(測(cè)試,UAT,登臺(tái)等)感到高興,他們就需要?jiǎng)?chuàng)建并徹底測(cè)試遷移腳本。
此遷移腳本僅在將數(shù)據(jù)庫(kù)從一個(gè)精確版本更改為另一精確版本時(shí)有用。當(dāng)您準(zhǔn)備進(jìn)行發(fā)布時(shí),您將專注于執(zhí)行遷移腳本。SQL Compare可以自動(dòng)生成一個(gè)初次遷移的腳本,但是如果您完成了重命名表或重新設(shè)計(jì)整個(gè)數(shù)據(jù)模型之類的尷尬事情,那么不可避免的是,您必須手動(dòng)剪切一些代碼以使其包含在內(nèi)。保留現(xiàn)有數(shù)據(jù)。這將需要測(cè)試,并且其中一些測(cè)試將需要在暫存中。
您可以不遷移就釋放數(shù)據(jù)庫(kù)嗎?
曾經(jīng)有一次只能建立SQL數(shù)據(jù)庫(kù),而不能更改。在那些日子里,我們必須使應(yīng)用程序脫機(jī),導(dǎo)出數(shù)據(jù),然后將數(shù)據(jù)導(dǎo)入新版本,然后再使其重新聯(lián)機(jī)。如果數(shù)據(jù)模型已更改,則需要一個(gè)特殊的例程來(lái)保存數(shù)據(jù),以便可以將其導(dǎo)入新的表結(jié)構(gòu)中,或者以導(dǎo)出格式(例如CSV)更改數(shù)據(jù)。您也可以將數(shù)據(jù)導(dǎo)入到同一服務(wù)器上現(xiàn)有數(shù)據(jù)庫(kù)的臨時(shí)版本中,并根據(jù)需要遷移數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行切片和切塊以適應(yīng)新模型。在整個(gè)應(yīng)用程序脫機(jī)的情況下,您將等待,鼓動(dòng)手指并嘗試忽略電話,而數(shù)據(jù)仍在滑動(dòng),您希望不會(huì)出現(xiàn)故障。
因此,既然我們有了一個(gè)遷移腳本,該腳本僅將精確版本移植到下一個(gè)版本,那么我們?nèi)绾螒?yīng)對(duì)可能存在的其他版本?
每個(gè)候選候選版本都帶有一個(gè)遷移腳本,該腳本將采用生產(chǎn)數(shù)據(jù)庫(kù)或任何存儲(chǔ)有數(shù)據(jù)的數(shù)據(jù)庫(kù),從當(dāng)時(shí)存在的生產(chǎn)版本到候選候選版本。為了脫離其他版本,請(qǐng)依次為每個(gè)版本應(yīng)用遷移腳本。
哇,所以我可以一個(gè)接一個(gè)地應(yīng)用每個(gè)遷移腳本來(lái)從頭開始構(gòu)建數(shù)據(jù)庫(kù)!
如果按順序執(zhí)行它們并具有完整的設(shè)置,它將這樣做,但是遷移腳本的重點(diǎn)是保留現(xiàn)有的應(yīng)用程序數(shù)據(jù)。當(dāng)包含第一個(gè)版本的現(xiàn)有表中的數(shù)據(jù)甚至不存在時(shí),您將如何從中獲取數(shù)據(jù)?
不。您要做的就是概括每個(gè)失敗的設(shè)計(jì)錯(cuò)誤和更正,而您將沒有數(shù)據(jù)。另一個(gè)問題是,任何構(gòu)建腳本都應(yīng)該成功執(zhí)行,否則就不會(huì)留下任何痕跡。這通常意味著在事務(wù)內(nèi)進(jìn)行操作,但是即使這樣事情也會(huì)變得復(fù)雜,有時(shí)您必須在事務(wù)外進(jìn)行部分操作。在這種情況下,您必須“撲朔迷離”。如果將一系列遷移腳本應(yīng)用在字符串中,則它們必須整齊地失敗,以便它們像啟動(dòng)前一樣離開數(shù)據(jù)庫(kù)。這不容易。
除非您還將每個(gè)更改都保存到對(duì)象的CREATE腳本中,否則您將無(wú)法從源代碼管理中受益,因?yàn)樗麄冎勒l(shuí)做了什么,何時(shí)做以及為什么做。您無(wú)法從遷移腳本中獲得此信息。這是基本的問責(zé)制和監(jiān)督。您如何對(duì)表的更改進(jìn)行審核跟蹤?
是的,但是在開發(fā)中使用遷移腳本似乎要簡(jiǎn)單得多
如果您是單個(gè)開發(fā)人員,則使用生產(chǎn)數(shù)據(jù)的副本,那么可以。但是,大多數(shù)數(shù)據(jù)庫(kù)開發(fā)人員都需要通過調(diào)整代碼來(lái)犯錯(cuò),嘗試一下并優(yōu)化性能。如果每個(gè)步驟都是一個(gè)遷移文件,那么這些文件將不可避免地堆疊在一起。在一個(gè)發(fā)行版中包含數(shù)百個(gè)遷移文件并不鮮見。在某些時(shí)候,您必須將它們合并為一個(gè)遷移。然后,您在該項(xiàng)目上還有另一個(gè)開發(fā)人員。您無(wú)意中更改了相同的遷移步驟,因?yàn)槟鷤z都在處理重要的表或過程集。然后,您必須通過合并兩個(gè)分支來(lái)解決這些沖突。然后,您發(fā)現(xiàn)該應(yīng)用程序具有人員的姓名和地址,也許其他詳細(xì)信息未加密。
即使您解決了所有這些問題并確定了如何在源代碼管理中維護(hù)源代碼,將遷移腳本與更新后的數(shù)據(jù)應(yīng)用于生產(chǎn)服務(wù)器時(shí),仍然可能會(huì)陷入困境。典型的例子是Null或O'Brien家族的成員同時(shí)注冊(cè)使用您的系統(tǒng)。
您如何處理表結(jié)構(gòu)中的更改,這些更改將導(dǎo)致數(shù)據(jù)不再導(dǎo)入?
當(dāng)您對(duì)一個(gè)或一組表進(jìn)行“重大更改”時(shí),您將準(zhǔn)備,測(cè)試并執(zhí)行準(zhǔn)備數(shù)據(jù)的遷移代碼。這可能是數(shù)據(jù)存儲(chǔ)位置的更改,但很可能是處理CHECK約束的更改,列可為性(NULL to NOT NULL)的更改或額外的唯一約束或外鍵。您執(zhí)行代碼來(lái)修復(fù)數(shù)據(jù),并確保將其放置在新構(gòu)建的正確位置和格式中。然后,將代碼添加到文件中,該文件將成為下一個(gè)版本的遷移腳本。
然后,您將數(shù)據(jù)另存為下一個(gè)構(gòu)建的新構(gòu)建數(shù)據(jù)。下次常規(guī)構(gòu)建可能會(huì)出錯(cuò),但是沒有人受傷。在準(zhǔn)備遷移腳本時(shí),這些錯(cuò)誤都是有價(jià)值的見解。
為什么要在開發(fā)中反復(fù)構(gòu)建數(shù)據(jù)庫(kù)呢?
即使只處理一個(gè)版本或數(shù)據(jù)庫(kù)變體,也可能至少有兩個(gè)數(shù)據(jù)庫(kù)副本在開發(fā)中。您將擁有一份副本,可以在不打擾其他任何人,拆除,重建和試驗(yàn)的情況下犯下難以言喻的罪行。您將擁有另一個(gè)共享的資源,可用于對(duì)已簽入的更改進(jìn)行回歸測(cè)試。您可能還有其他具有不同數(shù)據(jù)集或變體的對(duì)象。一切都必須與簽入的源代碼保持最新。您將擁有不同的標(biāo)準(zhǔn)數(shù)據(jù)集,因?yàn)?畢竟,測(cè)試端到端流程的最快方法是從一組定義的數(shù)據(jù)開始,然后查看是否得出正確的結(jié)果。
您還必須與應(yīng)用程序開發(fā)保持同步。通常,數(shù)據(jù)庫(kù)只是應(yīng)用程序的一小部分。如果整個(gè)應(yīng)用程序的開發(fā)人員都在進(jìn)行或測(cè)試重大更改,則需要至少提供一個(gè)數(shù)據(jù)庫(kù)副本,以與進(jìn)度保持同步,尤其是在應(yīng)用程序與數(shù)據(jù)庫(kù)緊密耦合的情況下,尤其如此。直接訪問表。他們將要測(cè)試他們的代碼,以使其支持并正在構(gòu)建的數(shù)據(jù)庫(kù)逐步升級(jí)。它可能與您正在嘗試的步驟版本不同。
我的數(shù)據(jù)庫(kù)是如此龐大,以至于我無(wú)法從頭開始構(gòu)建。我必須遷移它
構(gòu)建過程必須完全自動(dòng)化和優(yōu)化,因?yàn)樗^程緩慢且乏味。此外,正如我的數(shù)字朋友不斷提醒我的那樣,人類在疲倦時(shí)容易出錯(cuò)。插入數(shù)據(jù)可能是一個(gè)緩慢的過程,但是如果您在禁用約束的情況下使用本機(jī)BCP,則數(shù)據(jù)庫(kù)的大小必須相當(dāng)合理才能超過過夜的構(gòu)建。您很快會(huì)發(fā)現(xiàn),開發(fā)周期自然屬于使用夜間構(gòu)建的情況。如果您的開發(fā)團(tuán)隊(duì)處于截然不同的時(shí)區(qū),這可能很尷尬,但是我發(fā)現(xiàn)總是有一個(gè)“死角”可以安排常規(guī)構(gòu)建。
即使開發(fā)數(shù)據(jù)庫(kù)太大而無(wú)法進(jìn)行一整夜的構(gòu)建,也不必?fù)?dān)心。這不是一個(gè)新問題,并且有解決方案。大多數(shù)數(shù)據(jù)庫(kù)保存的數(shù)據(jù)對(duì)于數(shù)據(jù)庫(kù)的運(yùn)行是完全不必要的。我從來(lái)沒有找到一個(gè)數(shù)據(jù)庫(kù),其中沒有大量的無(wú)用和未引用的信息,甚至是圖像數(shù)據(jù),都在其中揮霍。我們稱其為“臥室碗櫥綜合征”。答案是先加載基本信息。然后,您可以使數(shù)據(jù)庫(kù)可用。然后,按其有用性將其余部分作為后臺(tái)進(jìn)程加載。沒有人會(huì)注意到。人類通常僅出于舒適性價(jià)值而保留數(shù)據(jù)。
構(gòu)建腳本和遷移腳本之間到底有什么區(qū)別?
構(gòu)建腳本和遷移腳本都將數(shù)據(jù)庫(kù)從一個(gè)版本移植到另一個(gè)版本。唯一的不同是,構(gòu)建腳本將其從基巖遷移到所需版本,同時(shí)忽略任何現(xiàn)有數(shù)據(jù),因?yàn)樵诖穗A段沒有任何數(shù)據(jù),而遷移腳本保留了現(xiàn)有數(shù)據(jù)并對(duì)兩個(gè)版本之間的數(shù)據(jù)進(jìn)行必要的更改。通常,將構(gòu)建腳本包裝在事務(wù)中仍然是一種好習(xí)慣,但通常不是這樣,因?yàn)樵诎l(fā)生錯(cuò)誤后很容易將其拖走。遷移腳本需要回滾和冪等(即,無(wú)意中再次運(yùn)行它不會(huì)造成損害)
我正在努力找出同步腳本和遷移腳本之間的區(qū)別?
術(shù)語(yǔ)“同步”具有誤導(dǎo)性。數(shù)據(jù)同步通常意味著將所有同步節(jié)點(diǎn)上的數(shù)據(jù)操作傳遞到其他節(jié)點(diǎn)。如果您在移動(dòng)設(shè)備上放了新的MP3,它會(huì)出現(xiàn)在筆記本電腦上,反之亦然。如果您在筆記本電腦上刪除該Rick Astley單曲,它將在手機(jī)上被刪除。數(shù)據(jù)庫(kù)同步腳本使目標(biāo)數(shù)據(jù)庫(kù)與源數(shù)據(jù)庫(kù)相同,同時(shí)保留其現(xiàn)有數(shù)據(jù),反之亦然。遷移腳本從一個(gè)版本到下一個(gè)版本增量獲取數(shù)據(jù)庫(kù)及其數(shù)據(jù)。沒有太大的區(qū)別。傳統(tǒng)上,遷移腳本傾向于“手工切割”,而同步腳本傾向于由第三方工具生成。它們對(duì)錯(cuò)誤回滾具有相同的要求。
遷移腳本是件好事嗎?
好?如果要升級(jí)現(xiàn)有的實(shí)時(shí)系統(tǒng),則它們?cè)诓渴鸸艿乐惺冀K是必不可少的。您使用它們的次數(shù)越多,您生產(chǎn)的無(wú)故障版本就越有可能。但是,在選擇候選版本之前,數(shù)據(jù)庫(kù)開發(fā)本身通常要好得多,并且構(gòu)建起來(lái)會(huì)更加靈活。
總結(jié)
數(shù)據(jù)庫(kù)開發(fā)人員的任務(wù)是使他人的生活盡可能輕松。這意味著要盡早考慮部署,安全,維護(hù),培訓(xùn),監(jiān)督和合規(guī)性問題。為此,數(shù)據(jù)庫(kù)必須處于對(duì)象級(jí)別的源代碼控制中,以便更廣泛的團(tuán)隊(duì)可以及早檢查潛在問題,并可以跟蹤更改。每次計(jì)劃要發(fā)布到生產(chǎn)數(shù)據(jù)庫(kù)系統(tǒng)的發(fā)行版時(shí),都必須在源代碼控制中附帶一個(gè)遷移腳本,該腳本將安全地將生產(chǎn)版本升級(jí)到新發(fā)行版。因此,必須為數(shù)據(jù)庫(kù)標(biāo)記正確的版本號(hào),以防止發(fā)生意外。
我建議定期建立數(shù)據(jù)庫(kù),通常是在一夜之間建立,但如有必要,可以更定期地建立數(shù)據(jù)庫(kù)。我建議在開發(fā)中使用干凈的例行構(gòu)建,而不是為此例行構(gòu)建創(chuàng)建并應(yīng)用新的遷移腳本,這既是因?yàn)樗∪チ瞬槐匾墓ぷ?,又因?yàn)樗膭?lì)使用標(biāo)準(zhǔn)數(shù)據(jù)集進(jìn)行例行回歸測(cè)試。但是,開發(fā)人員需要在發(fā)布之前仔細(xì)標(biāo)記潛在的數(shù)據(jù)遷移問題,因此在需要腳本之前就先進(jìn)行遷移腳本的工作。無(wú)論何時(shí)簽入“重大更改”,他們都會(huì)使用許多常規(guī)例程所需的例程來(lái)準(zhǔn)備數(shù)據(jù)。
相關(guān)產(chǎn)品推薦:
SQL Prompt:SQL語(yǔ)法提示工具
SQL Toolbelt:Red Gate產(chǎn)品套包
SQL Monitor:SQL Server監(jiān)控工具
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自: