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()方法的声…

java character是什么意思_Java Character 类

利用Character提取字符串中的大写字母和小写字母&#xff1a;public class UpperLowerCase {/** 利用Character类提取字符串中的大写字母和小写字母* auther Anthony-Z*/public static void main(String[] args) {String sr1 "I Like JAVA ! I learn Java everyday."…

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

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

jQuery Ajax 如何设置Timeout

$.get()与$.post()方法是$.ajax的高级封装 全局属性 $.ajaxSetup({timeout:5000}); $.ajax方法有timeout属性可设置&#xff0c;单位也是毫秒。 Azure App Service MVC下&#xff0c;全局属性才起作用&#xff0c;不知为何

php调用sql数据库代码怎么写,PHP读取SQL文件并导入数据库(示例)

/*** 读取 sql 文件并写入数据库* version 1.01 demo.php* author xingshaocheng* edit: www.jbxue.com*/class DBManager{var $dbHost ;var $dbUser ;var $dbPassword ;var $dbSchema ;function __construct($host,$user,$password,$schema){$this->dbHost $host;$thi…

如何修改SharePoint服务器场管理员帐户和密码

最近需要修改MOSS服务器场的管理员帐户&#xff0c;用 "%commonprogramfiles%\Microsoft Shared\Web server extensions\12\BIN\Stsadm.exe" -o updatefarmcredentials -userlogin [username] -password [password] 这条命令去修改发现没有修改成功&#xff0c;这个…

php中sisson用法,thinkPHP中session()方法用法详解

本文实例讲述了thinkPHP中session()方法用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;系统提供了Session管理和操作的完善支持&#xff0c;全部操作可以通过一个内置的session函数完成。用法session(name,name,value)参数name(必须)&#xff1a;如果传入数组 则…

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

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

PHP获取表单数据的方法有几种,如何实现PHP获取表单数据与HTML嵌入PHP脚本

如何实现PHP获取表单数据与HTML嵌入PHP脚本导语&#xff1a;如何实现PHP获取表单数据与HTML嵌入PHP脚本&#xff0c;下面是小编给大家提供的操作讲解&#xff0c;大家可以参考阅读&#xff0c;更多详情请关注应届毕业生考试网。常用的自动全局变量如下所示&#xff1a;1、GET方…

【转】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;并将文件名保存在数据库中。这是工作&…

软件测试之-测试用例写作规范

通用测试用例写作规范 软件测试用例得出软件测试用例的内容&#xff0c;其次&#xff0c;按照软件测试写作方法&#xff0c;落实到文档中&#xff0c;两者是形式和内容的关系&#xff0c;好的测试用例不仅方便自己和别人查看&#xff0c;而且能帮助设计的时候考虑的更周。 一…

php后静态绑定,详解PHP后期静态绑定分析与应用

基础知识1. 范围解析操作符 (::)可以用于访问静态成员&#xff0c;类常量&#xff0c;还可以用于覆盖类中的属性和方法。self&#xff0c;parent 和 static 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。parent用于调用父类中被覆盖的属性或方法(出现在哪…

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;已开源的可…

NtLmSsp

NTLMSSP (NT LAN Manager Security Support Provider)&#xff0c;是微软提供的安全支持接口协议&#xff0c;常用于SMB共享。估计你是从linux的fstab配置文件看来的选项吧。这个是参数指定了linux挂载smb网络共享时使用的加密方法。 NtLmSsp&#xff08;NT LM安全性支持提供者…

php让代码重新运行一次,脚本运行时是否可以动态重新加载PHP代码?

我有一个使用PHPSockets的多人游戏服务器,因此完全用PHP编写.目前,每当我对PHP服务器脚本进行任何更改时,我都必须终止该脚本,然后重新开始.这意味着任何在线用户都会断开连接(通常不会出现问题,因为目前没有这么多用户).现在我正在重写服务器脚本以使用自定义PHP类并对其进行一…

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…

【转】如何写出让同事无法维护的代码

译者&#xff1a;陈皓 &#xff08;左耳朵耗子&#xff09; 译文&#xff1a;http://coolshell.cn/articles/4758.html 对&#xff0c;你没看错&#xff0c;本文就是教你怎么写出让同事无法维护的代码。 一、程序命名 容易输入的变量名。比如&#xff1a;Fred&#xff0c;as…