标签: data-tier-applications

如何在没有VerifyExtraction的情况下将MSSQLServer数据库提取为.dacpac?

我想用Server Management Studio提取MSSQLServer数据库的数据库模式.我使用Extract命令"Extract Data-tier Application .."

在数据库中有几个对另一个数据库的引用.因此,我得到以下错误.

提取数据库时出错:验证数据包的模式模型失败.错误SQL71562:验证元素[dbo]时出错.[x]有一个未解析的对象[dbo]的引用.[y].从此平台创建包时不支持外部引用.

问题是,SSMS使用带参数/ p的SQLPackage.exe :VerifyExtraction = True.当我使用控制台并在没有此参数的情况下调用SQLPackage.exe时,它默认使用/ p:VerifyExtraction = False,我可以创建.dacpac文件.

有没有办法配置SSMS以禁用验证?

database sql-server ssms data-tier-applications

21
推荐指数
2
解决办法
3万
查看次数

如何找到当前版本的SQL Server数据层应用程序?

我们正在使用SQL Server数据层应用程序(dacpac或DAC包),我很难找到当前版本的数据库.

有没有办法使用以下任何方法获取当前版本:

  1. 从SQL Server Management Studio中
  2. 通过SQL语句
  3. 以编程方式使用.NET代码

sql-server-2008-r2 data-tier-applications

11
推荐指数
1
解决办法
8342
查看次数

SQLCMD模式下的ServerConnection.ExecuteNonQuery

我正在使用Microsoft Data-Tier Application框架来创建基于DacPackage对象的部署脚本.我试图使用Microsoft.SqlServer.Management.Smo.Server类来执行此脚本...

SqlConnection deployConnection = new SqlConnection(connBuilder.ToString());
deployConnection.Open();
Server server = new Server(new ServerConnection(deployConnection));
server.ConnectionContext.ExecuteNonQuery(deployScript);
Run Code Online (Sandbox Code Playgroud)

然而,这错误...

Unhandled Exception: Microsoft.SqlServer.Management.Common.ExecutionFailureException:
  An exception occurred while executing a Transact-SQL statement or batch. --->
  System.Data.SqlClient.SqlException: Incorrect syntax near ':'.
Run Code Online (Sandbox Code Playgroud)

我知道这个问题的答案是我需要处于SQLCMD模式,但我不知道如何告诉我的ServerConnection在所述模式下执行.

我想我的问题不像我在标题中说的那样具体.我真正需要做的是通过.Net框架执行从DacPackage生成的脚本.谁能帮我这个?

c# sql-server sqlcmd data-tier-applications sql-server-data-tools

11
推荐指数
1
解决办法
7427
查看次数

数据库版本部署.实体框架迁移与SSDT DacPacs

我有一个带有SQL Server的以数据为中心的应用程序.它将被部署的环境不在我们的控制之下,并且没有DBA(它们都是小型企业),因此我们需要尽可能自动地分发每个应用程序/数据库更新的过程.

除了应用程序版本之间的正常变化(有时候是不可预测的),我们已经知道我们需要为每个版本分发一些新的种子数据.有时,此种子数据将与我们系统中的其他数据相关.例如:在v2-v3更新过程中,我们可能需要插入2个新行的某些主数据,在v5-v6更新过程中需要插入其他5行.

EF

我们已经检查了Entity Framework Db Migrations(可用于自4.3.1版本以来没有Code-First的现有数据库),它以更自动和受控的方式表示传统的顺序脚本(如Fluent Migrations).

SSDT

另一方面,凭借不同的理念,我们检查了SSDT及其dacpac,快照以及部署前和部署后脚本.

问题是:

  1. 哪些技术/哲学更适合所描述的案例?

  2. 可以使用的任何其他技术/哲学?

  3. 还有其他建议吗?

提前致谢.

database-migration data-tier-applications fluent-migrator sql-server-2012 entity-framework-4.3

9
推荐指数
1
解决办法
2914
查看次数

数据层应用程序版本号存储在 Visual Studio 项目中的什么位置?

我有一个实用程序,可以填充 AssemblyInfo.cs 文件中的版本号。现在我需要实现一项功能来调整 Visual Studio 数据层应用程序 (DACPAC) 的版本号。

我发现如果打开项目属性并单击“数据层应用程序属性”按钮,我可以手动调整数字。但我找不到这个数字存储在项目文件中的位置,所以我不知道如何从我的实用程序自动更新它。

你知道版本号存储在哪里吗?

version-numbering visual-studio-project data-tier-applications sql-server-data-tools

6
推荐指数
2
解决办法
1941
查看次数

使用 DACFx 3.0 API 升级 DACPAC - 如何检查现有数据库的当前 DAC 版本?

我目前正在重写我团队的数据库部署 Powershell 脚本以使用 DACFx 3.0 API 而不是 2.0。我已成功使用新的控制器类使 DACPAC 升级成功Microsoft.SqlServer.Dac.DacServices

剩下的唯一问题是:如何从现有数据库中获取当前 DACPAC 版本号?

作为部署脚本的一部分,我们将其与要升级到的 DACPAC 版本进行比较,以确定是否需要部署。这也用于决定是否运行与数据库相关的测试,因此这样我们就可以减少大量的构建时间。

旧的 DacFx2.0 API 位于Microsoft.SqlServer.Management.Dac命名空间中,因此在旧的 Powershell 脚本中,我们只需DacStore从数据库连接创建一个对象并从中获取 Version 属性:

我们的旧 POWERSHELL 脚本

$dacStore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverConnection)
Write-Host "The following data-tier applications (instances) exist in the DAC store:"
foreach($dacInstance in $dacStore.DacInstances) 
{
    Write-Host Instance Name: $dacInstance.Name
    Write-Host DAC Type Application Name: $dacInstance.Type.Name
    Write-Host DAC Type Version: $dacInstance.Type.Version <--- **** this is what I need ****
}
...
Run Code Online (Sandbox Code Playgroud)

现在的问题是 3.0,API 存在于 …

powershell data-tier-applications sql-server-2012 dacpac

6
推荐指数
1
解决办法
1472
查看次数

Dacpac不得丢弃额外的列

我很高兴地编写了一个使用Sql Server数据库项目的产品,直到我们发现升级问题,生活一直很好.

当我们创建表,存储过程和各种其他数据库文件时,一旦部署到客户,他们就可以将自己的列添加到我们的dacpac创建的表中.

我们正在使用DacFx进行部署(Microsoft.SqlServer.Dac),并为坚持DBA部署的客户提供原始dacpac.

虽然在使用SSMS或类似工具时问题可能仍然存在,但我确信使用"正确"代码时,我们应该能够以某种方式通过代码部署来防止这种情况.

有没有人有同样的问题,可能找到了解决方案?

更新,添加部署设置的屏幕截图.从图像中可以看出,"已在目标中删除对象但未在项目中"对象设置已经关闭.

DeploymentOptions

sql-server dac data-tier-applications dacpac

6
推荐指数
1
解决办法
1956
查看次数

数据层应用程序框架(DAC Fx)中的复杂数据迁移

我很高兴能够使用DAC Fx和声明式数据库开发.对我来说,主要的障碍是如何处理跨架构的几个不同版本的复杂数据迁移.在旧世界中,我们可以按顺序运行所有升级脚本,这可以保证在数据迁移时架构处于正确状态.当升级路径是动态的时,这是如何工作的?

例如,假设现有实例上有多个版本的架构(DACPAC1-4):

  • DACPAC1:tableA存在且具有宝贵的客户端数据
  • DACPAC2:tableA已弃用,由tableB和规范化的tableC取代; 添加新表格
    • 部署后脚本:将数据从tableA移动到新的tableB和tableC; 下降表A.
  • DACPAC3:tableC有一个新的可空列columnX
    • 部署后脚本:基于tableD填充可空列
  • DACPAC4:tableC.columnX不可为空

如果我需要能够支持将DACPAC1-3服务器升级到最新的DACPAC4,我现在必须以足够聪明的方式编写我的部署前和部署脚本,以检测目前哪个DACPAC在目标上并正确处理数据迁移按顺序排列.此外,我不能简单地重复使用我最初编写的天真的部署后脚本,因为它们依赖于模式的中间版本.

提前感谢任何建议!

data-migration dac data-tier-applications

5
推荐指数
1
解决办法
788
查看次数

dacpac可用于管理具有大量数据的数据库吗?

我们当前的数据库接近200MB,但一旦应用程序上线,我们预计这将增长到一个大的数量.可能是,20-30 GB的数据.

我们计划使用"dacpac"(由数据库项目生成 - SSDT)在生产服务器上进行部署.将使用许多表创建数据库,并在查找表中创建大量初始数据.

但是,当我们使用"dacpac"(由数据库项目生成 - SSDT)升级生产服务器上的数据库时,关注的是未来的部署.

由于我没有使用dacpac进行部署的经验,任何人都可以建议我关注 -

  1. 部署是否取决于数据量?或者,它只是取决于架构的变化?例如,如果目标数据库是20-30 GB,那么升级它需要多长时间?
  2. 我们如何版本数据库架构?
  3. 如果出现任何问题,是否可以回滚升级过程?

最后,它是否比传统的手动编写sql脚本升级数据库更好?

sql-server data-tier-applications sql-server-2012 dacpac sqlpackage

5
推荐指数
1
解决办法
668
查看次数

bacpac 还原到 SQL Server 的内存使用情况

我刚刚将.bacpac文件恢复到本地 SQL Server 实例 (64b v12.0.4213),备份来自 azure sql 实例。

由于 OOM 异常,它失败了几次。我关闭了机器上的所有内容,在恢复结束时,SQL Server 服务实例消耗了 700MB 文件中的 13GB 内存!

幸运的是,恢复完成了,但似乎内存没有被释放/垃圾收集。当我写这篇文章时,它的内存仍然是 12GB。

这是一个已知问题吗?有什么方法可以恢复.bacpac并选择要忽略的表吗?您可以通过正常的数据恢复来完成此操作,最令人反感的表是 dbo.[Logs] 表、obvs。

sql-server ssms data-tier-applications azure-sql-database

4
推荐指数
1
解决办法
6045
查看次数

数据层应用程序 - 后期部署

这是一件很简单的事情,甚至在这里问我是否让我感到愚蠢,但由于我长期坚持这一点,我会在这里问.我正在开发visual studio中的数据层应用程序.我有常见的东西,如表,存储过程和一些后期部署数据.默认情况下,数据层应用程序随附Scripts/Post-Deployment文件夹.在这个文件夹中有一个名为Script.PostDeployment.sql的文件.为了更有条理,我在Post-Deployment中创建文件夹作为StaticData和TestData.我创建数据的插入语句位于这些文件夹中.所以,基于这个结构,我将以下代码添加到我的Script.PostDeployment.sql:

    /*
Post-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be appended to the build script.       
 Use SQLCMD syntax to include a file in the post-deployment script.         
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the post-deployment script.       
 Example:      :setvar TableName MyTable                            
               SELECT * FROM [$(TableName)]                 
--------------------------------------------------------------------------------------
*/

:r .\StaticData\States.sql
:r .\TestData\Logins.sql
Run Code Online (Sandbox Code Playgroud)

问题是上面的代码不起作用.对于某些starnge原因,deploy命令只是忽略路径并在Scripts/Post-Deployment中查找States.sql和Logins.sql,而不是在相应的子文件夹中查找.其他人遇到过类似的东西?非常简单的问题,但带我永远解决这个问题.我尽力解释,但提出问题,我可以尝试让事情更清楚.谢谢!

sql-server visual-studio data-tier-applications

3
推荐指数
1
解决办法
3149
查看次数