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提供多种发布部署的方法

  1. 如果你有权限可以通过VS直接连接SQL的,那么通过右键项目的“Publish”选项,即可以完成部署功能
  2. 如果你没有权限访问数据库,比如正式产品环境的数据库。这时候你就需要使用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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bitcount java_Java.math.BigInteger.bitCount()方法实例

全屏Java.math.BigInteger.bitCount()方法实例java.math.BigInteger.bitCount()返回此BigInteger的二进制补码表示的位&#xff0c;从它的符号位不同的数字。实现位向量样式集上BigIntegers的时候&#xff0c;此方法很有用。声明以下是java.math.BigInteger.bitCount()方法的声…

php 和jsp,jsp和php哪个好?jsp和php的简单比较

jsp和php这两个Web开发技术哪个好&#xff1f;这个问题应该会有很多人问&#xff0c;但是每种开发技术都有各自的优缺点&#xff0c;所谓的哪个好&#xff0c;不过是看你更擅长使用哪一种技术&#xff0c;所以今天我们来对比一下jsp和php&#xff0c;介绍jsp和php之间有什么区别…

【转】SharePoint 2010 Search Service -- 管理中心配置

今天配置了一下SharePoint Search&#xff0c;怕忘&#xff0c;赶紧记下来。 我参考了国外的一篇文章&#xff1a;Search Configuration in SharePoint 2010 首先&#xff0c;要查看以下User Profile Service, User Profile Synchronization Service是否运行正常&#xff0c;然…

【转】SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

前段时间工作很忙&#xff0c;好久没更新博客了&#xff0c;趁国庆休假期间&#xff0c;整理了两个之前积累很实用的企业集成组件&#xff0c;并在真正的大型项目中经受住了考验&#xff1a;.Net版SAP RFC适配器组件和SharePoint 2013修改AD域用户密码的WebPart。目前无法在网上…

php base64尺寸,PHP base64编码的图像显示不正确

我试图使用base64编码将图像(任何大小)发送到我创建的API。编码后的字符串会作为URL中的参数访问我的API。使用PHP构建的API。PHP base64编码的图像显示不正确一旦请求命中我的API&#xff0c;我想将图像存储到我的服务器上&#xff0c;并将文件名保存在数据库中。这是工作&…

Windows电脑SMB共享设置方法

SMB简介&#xff1a; SMB&#xff08;Server Message Block&#xff09;(*nix平台和Win NT4.0又称CIFS)协议是Windows平台标准文件共享协议&#xff0c;Linux平台通过samba来支持。SMB最新版本v3.0&#xff0c;在v2.0基础上针对WAN和分布式有改进。 建议使用原版wind…

php个人扫码支付,PHP个人发卡网源码,支持MA支付对接,扫码自动发货

PHP个人发卡网源码&#xff0c;支持MA支付对接&#xff0c;扫码自动发货。源码介绍个人发卡网源码&#xff0c;支持码支付对接&#xff0c;扫码自动发货.自适应网页&#xff0c;可为商品设置优惠套餐&#xff0c;后台管理功能丰富。前台发卡页面有点粗糙&#xff0c;已开源的可…

php网页表格样式,HTML5制作表格样式

废话不多说了&#xff0c;具体代码如下所示&#xff1a;表格*{margin: 0;padding: 0;}body{font: italic 20px Georgia, serif;letter-spacing: normal;background-color: #f0f0f0;}#content{width: 750px;padding: 40px;margin: 0 auto;background-color: #fff;border-left: 3…

SharePoint 开发TimerJob 介绍

项目需要写TimerJob&#xff0c;以前也大概知道原理&#xff0c;不过&#xff0c;开发过程中&#xff0c;还是遇到一些问题&#xff0c;网上看了好多博客&#xff0c;也有写的灰常好的&#xff0c;不过&#xff0c;自己还是想再写一下&#xff0c;也算是给自己一个总结&#xf…

linux php环境搭建 图文教程,linux php环境搭建教程

1) 安装依赖包yum -y install wget vim pcre pcre-devel openssl openssl-devel \libicu-devel gcc gcc-c autoconf libjpeg libjpeg-devel libpng \libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib \zlib-devel glibc glibc-devel glib2 glib2-devel ncurse…

【转】The password supplied with the username Domain\UserName was not correct. AD密码定期更换

起因 今天想进入SharePoint 2013 Central Administration创建一个WebApplication&#xff0c;尽然发生了错误&#xff1a; The password supplied with the username Domain\UserName was not correct. Verify that it was entered correctly and try again 具体如下图&#x…

第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现

一. 前奏-Timer类实现定时任务 在没有引入第三方开源的定时调度框架之前&#xff0c;我们处理一些简单的定时任务同时都是使用Timer类&#xff0c; DotNet中的Timer类有三个&#xff0c;分别位于不同的命名空间下&#xff0c;分别是&#xff1a; ①.位于System.Windows.Forms里…

php 自动验证类,Thinkphp实现自动验证和自动完成

这篇文章主要介绍了Thinkphp实现自动验证和自动完成的相关资料,需要的朋友可以参考下Thinkphp的自动验证和自动完成都是根所表单提交的内容来的&#xff0c;对部分数据进行规则验证和处理后插入到数据库。1、自动验证格式&#xff1a;array(array(验证字段1,验证规则,错误提示,…

第二节:比较DateTime和DateTimeOffset两种时间类型并介绍Quartz.Net中用到的几类时间形式(定点、四舍五入、倍数、递增)

一. 时间的类型 1. 背景 这里为什么要介绍时间类型呢&#xff0c;明明是定时调度篇&#xff0c;原因是在定时任务中&#xff0c;任务什么时间开始执行&#xff0c;什么时间结束执行&#xff0c;要用到各种各样的时间模式&#xff0c;虽然这不能算是一个复杂的问题&#xff0c;但…

第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)

一. 五大构件 引言&#xff1a; Quartz.Net的五大构件 1. 调度器&#xff1a;Scheduler 2. 作业任务&#xff1a;Job 3. 触发器&#xff1a; Trigger 4. 线程池&#xff1a; SimpleThreadPool 5. 作业持久化&#xff1a;JobStore 二. Scheduler详解 1. 创建Scheduler的两…

第五节: Quartz.Net五大构件之Trigger的四大触发类

一. WithSimpleSchedule&#xff08;ISimpleTrigger&#xff09; 1. 用途&#xff1a;时、分、秒上的轮询(和timer类似)&#xff0c;实际开发中&#xff0c;该场景占绝大多数. 2. 轮询的种类&#xff1a;永远轮询和限定次数轮询. 3. 参数中的几个函数&#xff1a; A.执行间隔…

oracle-物理模型实现,生产电算系统的设计与开发(JSP,Oracle)

生产电算系统的设计与开发(,Oracle)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文9500字,程序代码,Oracle数据库,答辩PPT)本系统是基于B/S模型的&#xff0c;采用Myeclipse集成开发环境&#xff0c;以JAVA作为开发语言&#xff0c;数据库则是采用Oracle实现数据的存…

第六节: 六类Calander处理六种不同的时间场景

背景介绍及其使用 该章节主要补充介绍&#xff0c;在前一章四类触发器的基础上配合六大Canlander来动态删减某些时间&#xff0c;来满足更多的应用场景。 1. DailyCalendar&#xff1a;动态排除某天的某些字段. &#xff08;需求&#xff1a;每天8-23点执行,每隔1s执行一次,但…

第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :

一. 简介 1. 什么是哑火 由于某些原因导致触发器(trigger)在该触发的时候没有得到触发,后续对应的解决策略即为哑火策略。(个人理解) 2. 哑火触发的条件 ①&#xff1a;所有的工作线程都在忙碌&#xff0c;导致某些trigger得不到触发.(如&#xff1a;simplethreadpool 默认是…

第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案

一. 简介 揭秘&#xff1a; SimpleThreadPool是Quartz.Net中自带的线程池&#xff0c;默认个数为10个&#xff0c;代表一个Scheduler同一时刻并发的最多只能执行10个job&#xff0c;超过10个的job需要排队等待。 二. 四种配置方案 1. NameValueCollection的方式 需要利用StdSch…