日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL SERVER data tier application 的作用及如何使用SSDT进行SQL数据库的自动化部署到生产环境和版本控制

發布時間:2023/12/10 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL SERVER data tier application 的作用及如何使用SSDT进行SQL数据库的自动化部署到生产环境和版本控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個是管理員用來發布數據庫所有的腳本用的,自SQL2008以后,微軟開始將數據庫的開發整合到VS2010上,用戶可以將數據所有的相關對象打包成一個DAC包,讓管理通過extract data-tier application發布到服務器上。就好像你把代碼變成dll去發布一樣,而不用管里面寫的內容。register as data-tier appliccation 反之亦然。
?

簡介

在開發過程,我們常常會遇到數據庫環境部署的問題,當部署正式環境中,數據庫產生的多文件腳本在管理上就容易出現混亂,特別是你還沒有權限訪問正式環境的情況,就更為困難。SSDT為我們提供了很好的解決方案。

SSDT: Sql Server Data Tool,數據庫工具,這里主要針對其作用于數據庫版本控制的功能。

在VS中,SSDT主要添加了兩項功能:SQL Server Database Project和DACPAC(Data-Tier Application Package)

簡單介紹下DACPAC,DACPAC文件包含整個數據庫的信息和SQL相關的查詢數據。當部署新版本數據庫到一個文件中時,DACPAC類似于備份功能,會將數據部署到每一張表中。

SQL Server DataBase Project

顧名思義,SSDP就是一個SQL數據庫的項目。添加一個數據庫項目,可以導入相關的數據庫信息,如存儲過程、試圖等等。還可以擁有DACPAC文件,用于備份和版本控制功能。

如何添加?

1、在項目中添加SQL Server Database Project

2、將數據庫導入到項目中

3、創建Data文件夾以及部署后執行的“PostDeployment”Sql腳本。創建后,SSDT還提供一系列的功能便于對比,如語法、數據對比等。

數據庫的發布

SSDT提供多種發布部署的方法

  • 如果你有權限可以通過VS直接連接SQL的,那么通過右鍵項目的“Publish”選項,即可以完成部署功能
  • 如果你沒有權限訪問數據庫,比如正式產品環境的數據庫。這時候你就需要使用DACPAC進行部署
  •     首先先介紹下如果生成DACPAC文件,在數據庫項目中,右鍵“Snapshot Project”,將會生成當前數據庫的版本,存在于文件夾Snapshots下,如下圖

        

        其次關于部署DACPAC方式也包含兩種:

        a. 通過Sql Server 2012的Tasks里的Upgrade DACPAC功能實現

    ?

        

        b. 通過運行Code方式實現

        如果在MVC項目下,你可以將code寫于Global.asax的Application_Start方法下,這里舉例用新建Console Application的方式執行。

        

        在Proram下,我們添加入下代碼

        1. 針對單個DACPAC文件部署到正式環境。

    ?

    class Program{static void Main(string[] args){try{//1. 單個DACPAC文件的部署const string ConnectionStringName = "Data Source=.;initial catalog=Template;Integrated Security=True;";//可以寫到app.config中var dacPackage = DacPackage.Load(ConnectionStringName);var dacServices = new DacServices(ConnectionStringName);var targetDatabaseName = (new SqlConnectionStringBuilder(ConnectionStringName)).InitialCatalog;dacServices.Deploy(dacPackage, targetDatabaseName, true);}catch (Exception ex){Console.WriteLine(ex.ToString());}Console.WriteLine("<Press any key to exit.>");Console.ReadKey();} }

    ?

        2. 針對Snapshots下多個DACPAC文件一鍵部署,則需要對比數據庫快照的版本號,部署最新版本

    ?

    //2. Snapshots文件夾下多個DACPAC文件的部署,通過遍歷需要判斷版本號部署const string SnapshotFolder = "Snapshots";foreach (var dacpacFileName in Directory.GetFiles(SnapshotFolder, "*.dacpac").OrderBy(name => name)){var databaseVersion = GetCurrentDacVersionFromDatabase(ConnectionStringName);if (dacPackage.Version <= databaseVersion){continue;}var dacDeployOptions = new DacDeployOptions { RegisterDataTierApplication = true };dacServices.Deploy(dacPackage, targetDatabaseName, true, dacDeployOptions);}

    ?

        需要一個方法來判斷當前的版本號

    ?

    private static Version GetCurrentDacVersionFromDatabase(string connectionString){var returnValue = new Version();const string SqlStatement = "SELECT TOP 1 type_version FROM msdb.dbo.sysdac_instances_internal WHERE instance_name = db_name()";try{using (var connection = new SqlConnection(connectionString)){connection.Open();using (var command = new SqlCommand(SqlStatement, connection)){using (var reader = command.ExecuteReader()){if (reader.Read()){var stringVersion = reader[0].ToString();Version.TryParse(stringVersion, out returnValue);}}}}}catch{}return returnValue;}

    小結和注意事項

    1、在做部署的時候,應記得在本地備份一個數據庫

    2、需要有文檔,注釋升級了哪些數據庫內容

    3、”Publish”用于可以連接數據庫,DACPAC部署用于無權限連接數據庫

    4、在用Code部署DACPAC文件的時候,需要注意判斷下版本號

    5、SSDT的安裝目錄 C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\

    如果使用的是VS2012或者最低版本的VS,路徑C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\,因為SSDT最新版本為了避免與VS的目錄發生沖突進而將安裝目錄放于120。

    總結

    以上是生活随笔為你收集整理的SQL SERVER data tier application 的作用及如何使用SSDT进行SQL数据库的自动化部署到生产环境和版本控制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。