專案管理實踐【六】自動同步資料庫【Using Visual Studio with Source Control System to synchronize database automaticall__資料庫

來源:互聯網
上載者:User

在上一篇專案管理實踐【五】自動編譯和發布網站中,我們講解了如何使用MSBuild+Robocopy+WebDeployment來自動編譯和部署網站,今天,我們來看一下,如何使用MSBuild +SVN來自動同步資料庫。

首先,將我們項目中的資料庫檔案和資料庫記錄檔放到某個目錄下,這裡放到StartKitDB目錄下,然後在該目錄下建立一個名為StartKitDB的文字檔,修改副檔名為proj,實際上,在理論上任何副檔名都可以,然後,使用記事本或其他程式開啟檔案,將下面的內容複寫到其中,儲存。

<?xml version="1.0" encoding="utf-8"?>

<Project DefaultTargets="All" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<!-- 需要引入MSBuild Community Tasks -->

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

<PropertyGroup>

<!--資料庫連接字串,可以根據需要修改-->

<ConnectionString>Server=.;Integrated Security=True</ConnectionString>

</PropertyGroup>

 

<ItemGroup>

<!--資料庫檔案-->

<DBFiles Include="StartKitDB.mdf;StartKitDB_log.ldf"/>

</ItemGroup>

<Target Name="ALL">

<!--重啟SqlServer服務-->

<ServiceController ServiceName="mssqlserver" Action="Restart" />

<!--分離資料庫-->

<Exec Command="OSQL -S . -E -n -Q &quot;EXEC sp_detach_db 'StartKitDB','True'&quot;" IgnoreExitCode="false" />

<!--停止SqlServer服務-->

<ServiceController ServiceName="mssqlserver" Action="Stop" />

<!--刪除舊版本的資料庫檔案-->

<Delete Files="C:\StartKitDB\$(DBFiles)" />

<!--複製最新版本的資料庫檔案到指定位置-->

<Copy SourceFiles="@(DBFiles)" DestinationFolder="C:\StartKitDB" />

<!--啟動SqlServer服務-->

<ServiceController ServiceName="mssqlserver" Action="Start" />

<!--附加複製過來的最新版本的資料庫檔案到資料庫中-->

<Exec Command="OSQL -S . -E -n -Q &quot;EXEC sp_attach_db @dbname = N'StartKitDB',@filename1 = N'C:\StartKitDB\StartKitDB.mdf', @filename2 = N'C:\StartKitDB\StartKitDB_log.ldf'&quot;" IgnoreExitCode="false" />

</Target>

</Project>

當然了,如果我們希望:當我們提交最新的資料庫檔案和記錄檔到伺服器後,自動從伺服器分離舊版本的資料庫,同時附加最新版本的資料庫,那麼我們就要藉助CCNET和SVN伺服器,所以我們首先要把存放資料庫檔案、記錄檔及StartKitDB.proj檔案的StartKitDB檔案夾,納入到我們的版本控制中。但是,如果我們簡單的把這個檔案添加到我們的StartKit項目的程式碼程式庫中,那麼,當我們提交資料庫更新時,就會自動編譯整個StartKit項目,而這時候,我們項目可能並沒有更新,所以我們要把資料庫和項目分開為二個程式碼程式庫。

我們按照在專案管理實踐教程二、原始碼控制 中的講解,使用VisualSVN Server添加一個程式碼程式庫【Repository】StartKitDB,然後,使用TortoiseSVN把上面的三個檔案遷入到SVN伺服器上,最後,按照專案管理實踐【三】每日構建 的講解,在CCNET上添加一個項目【Project】,一定根據實際情況修改相應的檔案路徑,把tasks的子節點msbuild下的projectFile節點值配置為我們上面建立的StartKitDB.proj檔案。

注意:你在CCNET中配置把SVN伺服器上的資料庫檔案遷出的位置不要和上面的StartKitDB.proj檔案中的位置相同,具體原因嘛。你可以先自己想想。
OK,搞定啦。你可以提交一次資料庫到SVN伺服器,試試看有沒有效果,怎麼樣。成功了吧。嘿嘿…

這種方法適合在開發過程中使用,如果我們已經部署了項目或者已經交付給了使用者,那麼使用者可能已經添加和更新的很多資料,此時和我們開發時在SVN上的最新版本也不一致了,這時候考慮到使用者資料的安全,我們可能需要給使用者的是資料庫更新指令碼,而且要保證使用者的資料安全,那麼這時候,怎麼辦呢。我在Visual Studio 2008中如何比較二個資料庫的架構【Schema】和資料【Data】並同步做了比較詳細的講解,大家可以做個參考。

如果你對我講解的這些內容不熟悉,建議你從頭開始看這個系列的教程:專案管理實踐系列教程。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.