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提供多種發布部署的方法
首先先介紹下如果生成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数据库的自动化部署到生产环境和版本控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可转债存在哪些优势?主要在四个方面
- 下一篇: 怎么办信用卡额度高?信用卡额度相关问题分