資料庫開發的持續整合 – Sql Server資料庫結構比較

來源:互聯網
上載者:User

本系列文章目錄
    資料庫開發的持續整合 - Sql Server 部署升級工具
    資料庫開發的持續整合 - Sql Server資料庫結構比較
    資料庫開發的持續整合 - 方法和流程
    資料庫開發的持續整合 - Liquibase的簡介和應用
    資料庫的持續整合 - CruiseControl.Net的項目配置

    上回說到了資料庫開發的持續整合的總的意圖,提供一個資料庫部署和升級的工具,接下來說說如何進行資料庫比較。

    在我的開發中資料庫比較工具主要需要兩種形式: 案頭工具和MsBuid任務。

    案頭工具推薦開源的DaBCoS3,基本夠用,有朋友推薦直接用VS2005,但我比較喜歡小巧一點的東東,因為不僅僅在資料庫開發的時候用。

    MsBuild任務很重要,在持續整合的時候可用來驗證升級指令碼是否正常工作。在CC.Net中加入SqlDeply任務(MsBuild),對產品系統資料庫的副本進行升級,然後使用MsBuild資料庫比較任務比較升級後的結構與開發資料庫是否相同。以此來驗證升級指令碼,相當於對升級指令碼做自動化的測試(當然還有迴歸測試),可大大節約人力。
    在網上搜尋一大圈,發現Red Gate提供的程式集不錯,但要$,放棄。繞了一大圈,回到M$,PowerTools被選中。要先裝Team Edition for Database。

    資料結構比較的MsBuild任務如此例:

<Project DefaultTargets="SchemaCompare" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="SqlSchemaCompareTask" AssemblyName="Microsoft.VisualStudio.TeamSystem.Data.PowerTools.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

    <PropertyGroup>
    <UpdateSql/>
    </PropertyGroup>

    <Target Name ="SchemaCompare">
    <SqlSchemaCompareTask
        SourceConnectionString="server=product;user id=sa;password=mypass"
        SourceDatabaseName="Northwind"
        TargetConnectionString="Data Source=.;Integrated Security=True;Pooling=False"
        TargetDatabaseName="Northwind"
        OutputPath= "."
        OutputFileName = "update.sql"

        ForceColumnOrder="true"
        IgnoreExtendedProperties="true"
        IgnoreStatistics="true" 
        IgnoreConstraintNames="true"
        IgnoreQuotedIdentifiersAndAnsiNullSettings="true"
        IgnoreTriggerOrder="true"
        IgnoreUsers="true"
        IgnoreWhiteSpace="true"

        DoNotOutputCommentHeader="true"
        NoTransactionalChangeScript="true"
        SkipSETStatements="true"
        ScriptCollationWhenDifferentFromDefault="true"
        />    

    <ReadLinesFromFile File="update.sql">
        <Output TaskParameter="Lines" PropertyName="UpdateSql" />
    </ReadLinesFromFile>    

    <!-- NOTE: If update.sql is emtpy, the two databases are same -->
    <Message Text="$(UpdateSql)" Condition="'$(UpdateSql)' != ''" />
    <Error Text="Soure database is different from the target" Condition="'$(UpdateSql)' != ''" />
    </Target>
</Project>

    注意:此例中SqlSchemaComapreTask的屬性目前已最佳化,用以確保在資料庫相同時產生的update.sql是空的,並以此來判斷兩個資料庫是否相等。這個任務用來產生升級指令碼的,這裡只用於比較兩個資料庫是否結構相同。

    資料庫資料比較的MsBuild任務如此例:<Project DefaultTargets="DataCompare" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="SqlDataCompareTask" AssemblyName="Microsoft.VisualStudio.TeamSystem.Data.PowerTools.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

    <Target Name ="DataCompare">
    <SqlDataCompareTask
        SourceConnectionString="server=product;user id=sa;password=mypass"
        SourceDatabaseName="Northwind"
        TargetConnectionString="Data Source=.;Integrated Security=True;Pooling=False"
        TargetDatabaseName="Northwind"
        OutputPath = "."
        OutputFileName = "TestDataCompare.sql"

        TrimTrailingSpaces="true"

        DisableTriggers="true"
        DisableKeys="false"
        DoNotOutputCommentHeader="true"
        DoNotUseTransactions="true" />
    </Target>
</Project>

 Update 20060617
     最終我選定了Java下的liquibase作為資料庫比較、升級、部署的工具,已應用在資料庫持續整合開發項目中(參見方法和流程),感覺不錯,唯一缺憾就是暫時還不支援.Net

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.