1

问题:

无法通过 Powershell 脚本部署 DACPAC。此脚本适用于大约 20 个已配置用于发布管理的其他数据库服务器。

工作环境:

  1. 视窗服务器 2008 R2
  2. 电源外壳 2.0
  3. SQL Server 2008 R2 64 位
  4. Visual Studio 高级版 2012 更新 4
  5. 适用于 Visual Studio 2012 的 SQL Server 数据工具
  6. Visual Studio 2013 Update 4 的发布管理部署程序

非工作环境

  1. 视窗服务器 2008 R2
  2. 电源外壳 2.0
  3. SQL Server 2012 64 位
  4. Visual Studio 高级版 2012 更新 4
  5. 适用于 Visual Studio 2012 的 SQL Server 数据工具
  6. Visual Studio 2013 Update 4 的发布管理部署程序

命令:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\sqlpackage.exe
  /Action:Publish
  /SourceFile:"\\<Server>\Builds\<BuildDefinition>\<BuildNumber>\Databases\Arsenal\Arsenal.dacpac"
  /Profile:"\\<Server>\Builds\<BuildDefinition>\<BuildNumber>\Deployment\Configuration\Databases\Publish_DEFAULT.xml"
  /p:TreatVerificationErrorsAsWarnings="True"
  /v:BuildNumber="<BuildNumber>"

在哪里:

Publish_DEFAULT.xml包含以下键:

<?xml version="1.0"?>
<Configurations>
  <Properties>
    <Property key="IncludeCompositeObjects" value="True" />
    <Property key="ScriptDatabaseOptions" value="True" />
    <Property key="BlockOnPossibleDataLoss" value="False" />
    <Property key="DropObjectsNotInSource" value="True" />
    <Property key="DropRoleMembersNotInSource" value="True" />
    <Property key="DropPermissionsNotInSource" value="True" />
    <Property key="DeployDatabaseInSingleUserMode" value="True" />
    <Property key="BackupDatabaseBeforeChanges" value="False" />
    <Property key="GenerateSmartDefaults" value="True" />
    <Property key="TreatVerificationErrorsAsWarnings" value="True" />
  </Properties>
  <SQLCmdVariables>
    <SQLCmdVariable key="BuildNumber" value="UNKNOWN" />
    <SQLCmdVariable key="DeployLoadTestData" value="False" />
    <SQLCmdVariable key="DeployPurgeData" value="False" />
  </SQLCmdVariables>
</Configurations>

日志

发布到数据库初始化部署(开始)初始化部署(失败)发生意外失败:算术运算导致溢出..

未处理的异常:System.OverflowException:算术运算导致溢出。在 System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean IntegratedSecurity, Boolean & marsCapable) 在 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin (ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) 在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo) 的 trustServerCert,布尔集成安全,布尔 withFailover ,1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 次重试,DbConnectionOptions userOptions)在 Microsoft.Data.Tools.Schema.CommandLineTool.DacServiceUtil.<>c__DisplayClass8的 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1 retry) at System.Data.SqlClient.SqlConnection.Open() at Microsoft.Data.Tools.Schema.Common.SqlClient.ReliableSqlConnection.<OpenConnection>b__0() at Microsoft.Data.Tools.Schema.Common.SqlClient.RetryPolicy.<>c__DisplayClass4.<ExecuteAction>b__3(RetryState retryState) at Microsoft.Data.Tools.Schema.Common.SqlClient.RetryPolicy.ExecuteAction[R](Func2 func, Nullable 1 token) at Microsoft.Data.Tools.Schema.Common.SqlClient.RetryPolicy.ExecuteAction(Action1 action, Nullable 1 token) at Microsoft.Data.Tools.Schema.Common.SqlClient.ReliableSqlConnection.OpenConnection() at Microsoft.Data.Tools.Schema.Common.SqlClient.ReliableConnectionHelper.OpenConnection(String connectionString, Boolean useRetry) at Microsoft.Data.Tools.Schema.Common.SqlClient.ReliableConnectionHelper.OpenConnection(SqlConnectionStringBuilder csb, Action1 usingConnection, Predicate 1 cancelToken)。 1 catchException, Boolean useRetry) at Microsoft.Data.Tools.Schema.Common.SqlClient.ReliableConnectionHelper.GetServerAndDatabaseVersion(String connectionString, ServerAndDatabaseInfo& info) at Microsoft.Data.Tools.Schema.Sql.SqlDatabaseSchemaProviderFamily.DetermineDatabaseSchemaProvider(String connectionString) at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentEndpointServer.GetProviderType(DatabaseSchemaProviderFamily connectionSniffer, String connectionString, Type& providerType, Boolean& validDataSource) at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentEndpointServer.OnInit(ErrorManager errors, String targetDBName) at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment..ctor(SqlDeploymentConstructor constructor) at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentConstructor.ConstructServiceImplementation() at Microsoft.SqlServer.Dac.DacServices.CreatePackageToDatabaseDeployment(String connectionString, IPackageSource packageSource, String targetDatabaseName, DacAzureDatabaseSpecification creationDefaults, DacDeployOptions options, ErrorManager errorManager) at Microsoft.SqlServer.Dac.DeployOperation.<>c__DisplayClass3.<>c__DisplayClass5.<CreatePlanInitializationOperation>b__1() at Microsoft.Data.Tools.Schema.Sql.Dac.OperationLogger.Capture(Action action) at Microsoft.SqlServer.Dac.DeployOperation.<>c__DisplayClass3.<CreatePlanInitializationOperation>b__0(Object operation, CancellationToken token) at Microsoft.SqlServer.Dac.Operation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context) at Microsoft.SqlServer.Dac.ReportMessageOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context) at Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context) at Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context) at Microsoft.SqlServer.Dac.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context) at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, DacLoggingContext loggingContext, CancellationToken cancellationToken) at Microsoft.SqlServer.Dac.DacServices.InternalDeploy(IPackageSource packageSource, Boolean isDacpac, String targetDatabaseName, DacAzureDatabaseSpecification creationDefaults, DacDeployOptions options, CancellationToken cancellationToken, DacLoggingContext loggingContext) at Microsoft.SqlServer.Dac.DacServices.Deploy(DacPackage package, String targetDatabaseName, Boolean upgradeExisting, DacDeployOptions options, Nullableb__0(DacServices 服务)在 Microsoft.Data.Tools.Schema.CommandLineTool.DacServiceUtil.ExecuteDeployOperation(字符串 connectionString,字符串文件路径,MessageWrapper messageWrapper,布尔 sourceIsPackage,布尔 targetIsPackage,Func 1 generateScriptFromPackage, Func2 generateScriptFromDatabase)在 Microsoft.Data.Tools.Schema.CommandLineTool。 DacServiceUtil.DoDeployAction(DeployArguments parsedArgs, Action1 writeError, Action2 writeMessage, Action`1 writeWarning, CancellationToken cancelToken) 在 Microsoft.Data.Tools.Schema.CommandLineTool.Program.PerformAction(CommandLineArguments parsedArgs) 在 Microsoft.Data.Tools.Schema.CommandLineTool.Program.DoDeployActions(CommandLineArguments parsedArgs) 在 Microsoft。 Data.Tools.Schema.CommandLineTool.Program.Run(String[] args) 在 Microsoft.Data.Tools.Schema.CommandLineTool.Program.Main(String[] args)

附加评论:

两种环境之间的唯一区别是 SQL Server 的版本......但是,我确实有一台运行 SQL Server 2012 的服务器!

我以服务的身份运行了 Powershell 脚本:Microsoft Deployment Agent ... 相同的日志文件错误;但是,sqlpackage.exe 抛出以下错误:

问题签名:问题事件名称:CLR20r3 问题签名 01:sqlpackage.exe 问题签名 02:12.0.2743.1 问题签名 03:5438200c 问题签名 04:System.Data 问题签名 05:4.0.30319.18408 问题签名 06:52310bef 问题签名 07: 28b2 问题签名 08:6e 问题签名 09:System.OverflowException 操作系统版本:6.1.7601.2.1.0.272.7 区域设置 ID:1033 附加信息 1:d90e 附加信息 2:d90ee7d582c41ae7b6b96ca9c0463ab1 附加信息 3:5e41 附加信息 4:5e411ccaac60cb66751cc900cf

4

2 回答 2

1

问题

此服务器已从 SQL Server 2005 升级到 SQL Server 2012,并通过发布管理启用了 DACPAC 部署 (SSDT)。升级步骤与所有其他工作数据库服务器不同。SSDT & RM 安装在 SQL Server 2012 之后(不是之前)

解决方案

使用以下步骤重建数据库服务器:

  • 将域用户和组添加到本地组:管理员(重新启动)
  • 添加角色:
    • Web 服务器 (IIS)(重新启动)
  • 添加功能:
    • 桌面体验(重启)
    • 远程服务器管理工​​具
    • SMTP 服务器
    • SNMP 服务
    • Windows Powershell 集成脚本环境 (ISE)
    • Windows 进程激活服务
    • WinRM IIS 扩展
  • 安装窗口更新(重新启动)
  • 安装虚拟克隆驱动器
  • 为 Visual Studio 2013 Update 4 安装和配置 Release Management Deployer
  • 注册服务器:DEVSQL2 与发布管理服务器
  • 配置 powershell (set-executionpolicy remotesigned)
  • 为 Visual Studio 2012 安装 SQL Server Data Tools (SSDT)
  • 安装窗口更新(重新启动)
  • 安装 SQL Server 2005(64 位)(默认实例)
  • 安装 Server 2005 Enterprise(64 位)更新 4(默认实例)
  • 安装窗口更新(重新启动)
  • 配置 SQL Server 外围应用
  • 配置 SQL Server 报告服务 (SSRS)
  • 配置“默认”目录
  • 移动 tempdb 文件
  • 创建“标准”登录名/角色
  • 恢复“黄金”数据库
  • TFS 项目的 RM 部署 -已通过
  • 安装 SQL Server 2012 Enterprise(64 位)(默认实例)
  • 安装窗口更新(重新启动)
  • TFS 项目的 RM 部署 -已通过
于 2015-01-19T13:39:40.547 回答
1

与其尝试直接发布 DACPAC,不如生成更改脚本(发布配置文件中的复选框选项)并运行针对数据库生成的 T-SQL?另一种选择是在 sqlpackage.exe 文件夹中打开命令提示符并直接运行命令以查看是否会提供更清晰的错误消息。此外,直接针对数据库运行发布配置文件是否有效?Visual Studio 可能会对此有所了解。

于 2015-01-15T20:42:20.673 回答