我们当前的数据库接近200MB,但一旦应用程序上线,我们预计这将增长到一个大的数量.可能是,20-30 GB的数据.
我们计划使用"dacpac"(由数据库项目生成 - SSDT)在生产服务器上进行部署.将使用许多表创建数据库,并在查找表中创建大量初始数据.
但是,当我们使用"dacpac"(由数据库项目生成 - SSDT)升级生产服务器上的数据库时,关注的是未来的部署.
由于我没有使用dacpac进行部署的经验,任何人都可以建议我关注 -
最后,它是否比传统的手动编写sql脚本升级数据库更好?
sql-server data-tier-applications sql-server-2012 dacpac sqlpackage
使用SQLPackage.exe将DACPAC部署到Azure SQL数据库时,是否可以指定要创建的数据库的性能层?或者我是否需要创建数据库,然后发出单独的命令来降级/升级?
我已经在(https://msdn.microsoft.com/en-us/hh550080(v=vs.103).aspx上查看了(冗长的)文档,我看不出我在找什么.但它似乎是一个非常明显/可取的选择,所以也许我错过了一些东西,或者它在其他地方有记载?
我们的一个构建服务器刚刚更新到最新的“用于数据库工具的 Microsoft SQL Server 更新”(版本 12.0.60629.0),现在与我们拥有的 SqlPackage.exe 版本不兼容(在 C:\Program Files (x86) 中) \Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\SqlPackage.exe)。SQL Server 数据库项目(针对 SQL Server 2014)构建没有错误,但是当我们尝试使用 SqlPackage.exe 将 .dacpac 部署到目标服务器时,我们收到以下错误:
The Element or Annotation class PersistedResolvableAnnotation does
not contain the Property class Length.
Run Code Online (Sandbox Code Playgroud)
果然,将 model.xml 文件(在 .dacpac 内)与最新版本的成功构建进行比较,我在一些 Annotation 元素下看到了额外的“Length”和“Offset”属性:
<Annotation Type="PersistedResolvableAnnotation" Name="[$(MyLinkedServer)].[$(MyDatabase)]|[dbo].[SomeTableName]">
<Property Name="TargetTypeStorage" Value="ISqlSynonymTarget" />
<Property Name="Length" Value="63" />
<Property Name="Offset" Value="37" />
</Annotation>
Run Code Online (Sandbox Code Playgroud)
这些构建服务器只有 Visual Studio 2012 和 2013,而不是2015。很明显,这个最新的 SSDT 更新破坏了与 SqlPackage 的兼容性(并且网上还有其他迹象表明同一问题),但我的问题是:我该如何解决它?
我宁愿不尝试降级到以前的 SSDT 版本,但会在必要时这样做。我应该安装最新的数据层应用程序框架并改用其 …
我经常使用 EF 迁移来部署数据库,无论是从头开始还是为了进化。然而,我目前正在从事另一个使用 DACPAC 的团队项目,直到今天,这似乎也一样好。今天,我向缺少它的表添加了一个唯一键约束,正如您可能想象的那样,它爆炸了,导致通过 sqlpackage.exe 部署 DACPAC 失败。
我现在意识到故障绝不会回滚,所以现在我有一个处于部分转换状态的数据库,并且因为我有一个预部署脚本,该脚本指的是在预部署脚本运行后删除的列第一次,现在的状态使我无法再次运行 dacpac,因为它因此而失败。
我错误地认为 sqlpackage.exe 会将部署包装在事务中并在失败时回滚它。然后在意识到我的错误时,再次错误地假设我错过了某个地方的标志。
谁能告诉我如何在不破坏数据库的情况下安全地运行...
我在 Visual Studio 中有一个 SQL Server 数据库项目,并且删除了一个现有的存储过程。我在本地也有一个数据库,其中存在确切的存储过程。
当我在 Visual Studio 中对两者运行架构比较时,在生成的架构比较窗口中,我可以看到将在生成的部署脚本中删除的存储过程。但是,当我从 Powershell 脚本调用 sqlPackage.exe 时,生成的部署脚本不包含存储过程的 drop 语句。有趣的是,当我对存储过程进行更改时,它会包含在生成的部署脚本中,并带有一个更改语句。
为什么 sqlPackage.exe 在删除 drop 存储过程语句但将其包含以进行更改时省略了它?我觉得这是我需要提供给 sqlPackage.exe 的参数设置,但他们似乎选择退出,而不是选择加入(https://msdn.microsoft.com/library/hh550080(vs.103).aspx#Anchor_7)。
以下是我从 Powershell 发出的命令:
& 'sqlPackage' '/Action:Script' "/SourceFile:$sourceDacpacFile" "/TargetFile:$targetDacpacFile" "/OutputPath:$outputPath" "/TargetDatabaseName:$targetDatabaseName" "/p:AllowIncompatiblePlatform=$allowIncompatiblePlatform" "/p:BlockOnPossibleDataLoss=$blockOnPossibleDataLoss" "/p:DropIndexesNotInSource=$dropIndexesNotInSource"
Run Code Online (Sandbox Code Playgroud) 目前使用 SqlPackage.exe 命令行工具通过将 DacPac 文件与目标数据库进行比较来生成脚本。如果数据库尚不存在,这将创建数据库。
我们现在想将其切换为使用 Microsoft.Data.Tools.Msbuild Nuget 包(使用 C# 部署),但是当数据库容器不存在时使用 SchemaComparison 进行比较会失败。似乎没有太多与该包相关的文档。
该软件包中是否有任何工具可以让我在比较之前创建一个空的数据库容器?
我目前正在使用以下代码(与现有数据库进行比较时有效):
SchemaCompareDacpacEndpoint sourceDacpac = new SchemaCompareDacpacEndpoint(@"C:\DeployDB.dacpac");
SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
csb.DataSource = @".";
csb.InitialCatalog = "DeployTestDB";
csb.IntegratedSecurity = true;
SchemaCompareDatabaseEndpoint targetDatabase = new SchemaCompareDatabaseEndpoint(csb.ToString());
SchemaComparison comparison = new SchemaComparison(sourceDacpac, targetDatabase);
comparison.Options.DropObjectsNotInSource = true;
comparison.Options.BlockOnPossibleDataLoss = false;
comparison.Options.TreatVerificationErrorsAsWarnings = true;
comparison.Options.ScriptDatabaseOptions = true;
comparison.Options.GenerateSmartDefaults = true;
SchemaComparisonResult comparisonResult = comparison.Compare();
Run Code Online (Sandbox Code Playgroud)
此时,ComparisonResult 有一条错误消息:{Error SQL0: Cannot open database "DeployTestDB" requests by the login. 登录失败。用户“myUsername”登录失败。}
我们使用PowerShell脚本部署SQL数据库。该脚本使用SqlPackage.exe实用工具来发布我们的主数据库,在我们将SSDT升级到最新版本SSDT 2015时,它工作正常,当时它声明抛出以下错误。
PowerShell脚本行:
& "C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\SqlPackage.exe" /Action:Publish /SourceFile:"$DatabaseDacpacLocation" /TargetServerName:$DataServerSqlInstance /TargetDatabaseName:$Database /Variables:master="$MasterDatabase" /v:DatabaseName="$pDatabaseName" /p:ExcludeObjectType=Sequences
Run Code Online (Sandbox Code Playgroud)
错误:
未处理的异常:System.TypeInitializationException:Microsoft.SqlServer.Dac.DacPackage的类型初始值设定项引发了异常。---> System.TypeInitializationException:Microsoft.SqlServer.Dac.DacServices的类型初始值设定项引发了异常。---> System.TypeInitializationException:'SqlSchemaModelStaticState'的类型初始值设定项引发了异常。---> System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.SqlServer.TransactSql.ScriptDom,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91'或其依赖项之一。该系统找不到指定的文件。
deployment powershell dacpac sqlpackage sql-server-data-tools
我有一种情况,我必须将我的数据库版本(架构)与我的所有客户端(可能是不同的版本)进行比较,并部署必要的更改以使所有版本都相同。我正在寻找一种方法,可以自动将我的数据库架构与我的客户端架构进行比较,生成差异脚本并执行它以确保所有版本都相同。
我知道 Red Gate 和类似的工具,但问题是我需要从我的客户端获取模式(这很难获得)。
提前致谢。
我在 Azure 中有一个发布管道,我在其中传递了一个 .dacpac 工件(使用 VStudio 创建)以部署在本地 Sql Server 2016 中。它运行良好,但现在我想删除表、视图、函数和存储过程我的服务器通过 .dacpac。所以,我没有在我的VS项目,然后试图用选项部署/p:DropObjectsNotInSource=True沿/p:DoNotDropObjectType,甚至/p:ExcludeObjectType排除我不想被丢弃的东西。
但是不管这些过滤器如何,一旦作业开始,表就会被删除(如预期的那样),然后它会删除数据库用户。它还删除了我用于安装 Azure 代理的登录名的 db_owner 映射,然后尝试删除该登录名(这是配置为在部署期间进行身份验证的同一用户)。然后它失败并出现此错误:
Error SQL72014: .Net SqlClient Data Provider: Msg 15151, Level 16, State 1, Line 1 Cannot drop the user '<Domain>\<User>', because it does not exist or you do not have permission.
这很明显,因为刚刚删除了用户对数据库的权限。有什么建议可以避免这种情况,或者我唯一的选择是在完成后重新创建用户/权限?或者不完全使用该标志并通过部署后脚本执行所有“删除对象管道”?
作为参考,在我的发布任务上设置的附加参数是(它看起来很奇怪,但没有办法只指定我想要删除的对象):
/p:DropObjectsNotInSource=True /p:BlockOnPossibleDataLoss=false /p:DoNotDropObjectType="Aggregates,ApplicationRoles,Assemblies,AsymmetricKeys,BrokerPriorities,Certificates,ColumnEncryptionKeys,ColumnMasterKeys,Contracts,DatabaseRoles,DatabaseTriggers,Defaults,ExtendedProperties,ExternalDataSources,ExternalFileFormats,ExternalTables,Filegroups,FileTables,FullTextCatalogs,FullTextStoplists,MessageTypes,PartitionFunctions,PartitionSchemes,Permissions,Queues,RemoteServiceBindings,RoleMembership,Rules,SearchPropertyLists,SecurityPolicies,Sequences,Services,Signatures,SymmetricKeys,Synonyms,UserDefinedDataTypes,UserDefinedTableTypes,ClrUserDefinedTypes,Users,XmlSchemaCollections,Audits,Credentials,CryptographicProviders,DatabaseAuditSpecifications,DatabaseScopedCredentials,Endpoints,ErrorMessages,EventNotifications,EventSessions,LinkedServerLogins,LinkedServers,Logins,Routes,ServerAuditSpecifications,ServerRoleMembership,ServerRoles,ServerTriggers" /p:ExcludeObjectType="Aggregates,ApplicationRoles,Assemblies,AsymmetricKeys,BrokerPriorities,Certificates,ColumnEncryptionKeys,ColumnMasterKeys,Contracts,DatabaseRoles,DatabaseTriggers,Defaults,ExtendedProperties,ExternalDataSources,ExternalFileFormats,ExternalTables,Filegroups,FileTables,FullTextCatalogs,FullTextStoplists,MessageTypes,PartitionFunctions,PartitionSchemes,Permissions,Queues,RemoteServiceBindings,RoleMembership,Rules,SearchPropertyLists,SecurityPolicies,Sequences,Services,Signatures,SymmetricKeys,Synonyms,UserDefinedDataTypes,UserDefinedTableTypes,ClrUserDefinedTypes,Users,XmlSchemaCollections,Audits,Credentials,CryptographicProviders,DatabaseAuditSpecifications,DatabaseScopedCredentials,Endpoints,ErrorMessages,EventNotifications,EventSessions,LinkedServerLogins,LinkedServers,Logins,Routes,ServerAuditSpecifications,ServerRoleMembership,ServerRoles,ServerTriggers"
我想忽略 DevOps 发布管道中特定架构的更改。我正在尝试找到它的 Sqlpackage.exe 命令。我在这里检查了文档:https://learn.microsoft.com/en-us/sql/tools/sqlpackage/sqlpackage-publish ?view=sql-server-ver15 但找不到它。我正在使用 DACPAC 部署,如下所示:
请问对此有什么帮助吗?
azure dacpac sqlpackage azure-devops azure-pipelines-release-pipeline
sqlpackage ×10
dacpac ×6
sql-server ×6
azure ×2
azure-devops ×2
deployment ×2
sql ×2
azure-pipelines-release-pipeline ×1
c# ×1
powershell ×1
sqlcompare ×1
ssms ×1