我正在使用PowerShell将Visual Studio 2012上构建的dacpac部署到SQL Azure,并运行我认为可能与某些版本不兼容的问题.当我从visual studio执行时,发布工作正常,但是当我使用PowerShell执行它时抛出异常.
这是我在Powershell中所做的
[System.Reflection.Assembly]::Load("Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91") | out-null
[System.Reflection.Assembly]::Load("Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91") | out-null
[System.Reflection.Assembly]::Load("Microsoft.SqlServer.ConnectionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91") | out-null
[System.Reflection.Assembly]::Load("Microsoft.SqlServer.Management.Dac, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91") | out-null
Trap
{
PrintException($_.Exception);
$fileStream.Close()
return;
}
$sqlServerFullName = $sqlServerName + ".database.windows.net"
$serverConnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($sqlServerFullName, $adminLogin, $admingPwd)
$serverconnection.Connect()
$dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverConnection)
$fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
Write-Host "Reading contents from $dacpacPath..."
$dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
Run Code Online (Sandbox Code Playgroud)
上面代码中的最后一行是崩溃的以下错误(内部异常值)而不是继续进行
The stream cannot be read to construct the DacType.
There is an error in XML document …
Run Code Online (Sandbox Code Playgroud) sql-server powershell dac azure-powershell azure-sql-database
我很难确定如何使用Visual Studio 2012实际创建甚至打开DAC应用程序.我使用的是SQL Server 2012.我安装了SSDT.
从Visual Studio创建:
根据在线文档,我应该能够看到一个名为"Data Tier Application"的项目模板,但我看到的只是SQL Server数据库项目.它们是一样的吗?
从SSMS创建:
在在线视频中,演示者使用SSMS - >数据库 - >右键单击 - >创建项目菜单项,并在向导后弹出VS项目.我没有这个菜单项,我所拥有的是任务 - >导出为数据层应用程序.这会创建DACPAC文件而不是VS项目,我无法弄清楚如何从VS打开dacpac.
信息:我们有一个第三方应用程序,我们用于在我们公司生产.此程序使用DSN通过ODBC连接到我们的SQL Server 2012数据库.此应用程序在Server 2003(MADC 2.8)下正常工作,但是当我将它带到Server 2008 x86(DAC 6.0)时,我的连接失败,"用户XXX的Microsoft OLE DB提供程序SQL Server登录失败".我有一种感觉,这是因为在服务器2008及更高版本(在DAC 6.0中进行了更改)的Windows服务器上,"持久安全信息"的默认值从True变为False.我没有权限更改应用程序内部的连接字符串,因为它是第三方.如本文所示
问题:有没有办法更改ADO.Net的行为,以便在连接字符串之外将此值默认为True而不是False.我希望能够至少证明或反驳这是引起问题的特征.
注意:我意识到这是一个巨大的安全问题,篡改了此设置,如果更改它们以确保服务器和应用程序是隔离的,我们将采取正确的预防措施.
解决方案:由@William提供.如果要将SQL Server第3方应用程序从Server 2003更新到Server 2008+并且您正在获得上面的连接,那么在2003年您没有这样做,请将SQL帐户的密码设置为空白(暂时或仅在暂存时,这是在生产中留空非常危险),以便在提供空白密码时测试应用程序是否再次运行.如果是,则应用程序不在连接字符串中设置持久安全信息,并且默认为true的值现在默认为false.您的应用程序可能仅限于在服务器2003下使用,并且可能无法在服务器2008+上正常运行.我无法找到将默认值恢复为true的方法.
我正在使用数据层应用程序框架(DACFx)尝试从我的数据库中的表的子集导出模式和数据.
var dacServices = new DacServices(connectionString);
dacServices.ExportBacpac("database.bacpac", database, tables);
Run Code Online (Sandbox Code Playgroud)
我知道支持的内容有一些限制,我已经解决了与代码(存储过程等)有关的问题.但是,我已经使用Windows用户/登录进行了阻止.我不确定如何绕过它.
例外细节:
One or more unsupported elements were found in the schema used as part of a data package.
Error SQL71564: The element User: [Domain\User] has property AuthenticationType set to a value that is not supported in Microsoft Azure SQL Database v12.
Error SQL71564: The element Login: [Domain\User] has property IsMappedToWindowsLogin set to a value that is not supported in Microsoft Azure SQL Database v12.
Run Code Online (Sandbox Code Playgroud)
我发现Azure SQL不支持Windows身份验证.但是没有选择简单地忽略用户,登录等吗?
我已经阅读了各种帖子,声称你可以只登录登录和用户.然后在导出后重新创建它们.不幸的是,我不能这样做,因为这些对象被用于活动连接.我还读到有些人通过备份/恢复然后将用户放在辅助设备上来解决这个问题.这可能会起作用,但肯定会有更好的方法,而不是努力.
解编译代码,我可以看到ExportBacpac方法创建的位置:
DacExtractOptions …
Run Code Online (Sandbox Code Playgroud) 我们正在使用Sql Server数据库项目使用SqlPackage.exe从DacPac创建部署脚本.我们在各种环境中设置了不同的SQL Server文件组.在部署时,我们要排除文件组,因为我们希望在默认文件组中创建对象.在数据库项目设置中,默认文件组不会从PRIMARY更改.
这在尝试部署到默认文件组不是 PRIMARY 的环境时会出现问题,因为包含以下代码...
ALTER DATABASE [$(DatabaseName)]
MODIFY FILEGROUP [PRIMARY] DEFAULT;
Run Code Online (Sandbox Code Playgroud)
有没有办法防止在部署SQL中生成此问题?
我很高兴地编写了一个使用Sql Server数据库项目的产品,直到我们发现升级问题,生活一直很好.
当我们创建表,存储过程和各种其他数据库文件时,一旦部署到客户,他们就可以将自己的列添加到我们的dacpac创建的表中.
我们正在使用DacFx进行部署(Microsoft.SqlServer.Dac),并为坚持DBA部署的客户提供原始dacpac.
虽然在使用SSMS或类似工具时问题可能仍然存在,但我确信使用"正确"代码时,我们应该能够以某种方式通过代码部署来防止这种情况.
有没有人有同样的问题,可能找到了解决方案?
更新,添加部署设置的屏幕截图.从图像中可以看出,"已在目标中删除对象但未在项目中"对象设置已经关闭.
我很高兴能够使用DAC Fx和声明式数据库开发.对我来说,主要的障碍是如何处理跨架构的几个不同版本的复杂数据迁移.在旧世界中,我们可以按顺序运行所有升级脚本,这可以保证在数据迁移时架构处于正确状态.当升级路径是动态的时,这是如何工作的?
例如,假设现有实例上有多个版本的架构(DACPAC1-4):
如果我需要能够支持将DACPAC1-3服务器升级到最新的DACPAC4,我现在必须以足够聪明的方式编写我的部署前和部署脚本,以检测目前哪个DACPAC在目标上并正确处理数据迁移按顺序排列.此外,我不能简单地重复使用我最初编写的天真的部署后脚本,因为它们依赖于模式的中间版本.
提前感谢任何建议!
此调用DacServices.Deploy
一直适用于SQL Server LocalDB 2014,但在安装SQL Server LocalDB 2016时失败:
string dacConnectionString = $"Server=(localdb)\\mssqllocaldb; Integrated Security=true; database={DatabaseName}";
var dacServices = new DacServices(dacConnectionString);
dacServices.Message += (sender, args) => Console.WriteLine($"{args.Message.Prefix}: {args.Message.Message}"); // Log dacpac deploy messages
dacServices.Deploy(LoadDacPac(), DatabaseName, true, new DacDeployOptions()
{
BlockOnPossibleDataLoss = false
});
Run Code Online (Sandbox Code Playgroud)
DacServices.Deploy
LocalDB 2016 抛出的异常是:
Microsoft.SqlServer.Dac.DacServicesException was unhandled by user code
HResult=-2146233088
Message=Could not deploy package.
Source=Microsoft.SqlServer.Dac
StackTrace:
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, DacDeployOptions options, CancellationToken …
Run Code Online (Sandbox Code Playgroud) 我们有一个 DACPAC (sqlproj) 解决方案,其中包含一些表和一个运行一些 DML 查询的部署后脚本。如果 DML 查询失败(我提出严重性 = 20 的错误),我想回滚所有更改 - 包括 dacpac 完成的 DDL 更改和部署后文件更改。当我升级现有目标数据库时,这特别有用。
我正在努力在 DACPAC 发布时进行原子数据库升级 - 仅当部署后脚本中的所有内容都成功时,才应发布 DACPAC 解决方案中提到的所有 DDL 更改。
由于 DACPAC DDL 更改是在调用部署后脚本之前提交的,因此我认为使用 DacServices.GenerateDeployScript 将所有 DAC 更改生成为单个脚本文件将会有所帮助。看起来不太直截了当。
有没有人尝试过类似的事情(并且失败/通过)?
我面临着许多挑战,例如...创建/更改数据库不应该在事务中。回滚根本没有发生。
[编辑 11 月 10 日]:将 dacpac 生成的部署脚本粘贴到此处,以便我可以更好地解释我的问题(希望如此)
/*
Deployment script for 9Nov
This code was generated by a tool.
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
*/
GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, …
Run Code Online (Sandbox Code Playgroud) 我创建了一个 SQL 数据库,并尝试使用 SQL Server Management Studio 中的“将数据库部署到 SQL Azure 向导”将该数据库部署/移动到 Azure 云。但我在尝试部署它后遇到了错误。我正在使用 SQL 身份验证来使用我的凭据登录。我还尝试安装数据迁移应用程序。
在用作数据包一部分的架构中发现一个或多个不受支持的元素。错误 SQL71624:权限“CONNECT”对于 Microsoft Azure SQL 数据库 v12 中的目标对象“guest”无效。(微软.SqlServer.Dac)
纽扣:
好的
我不明白这个错误是什么意思,也不明白为什么会发生这个错误。我在互联网上寻找可能的解决方案,但找不到任何信息。请帮我。
编辑:更新为状态它没有挂起,只需要年龄!
我正在尝试使用dacpac更新现有的sql server数据库.
我可以使用下面的(剥离)示例在30秒内创建一个新的SQL Server数据库.我遇到的问题是使用相同的dacpac,重新运行程序(因此它更新现有数据库而不是重新创建)需要20分钟.
如果时差到期是什么呢?全面使用了redgate的SqlCompare后,我觉得时间不容乐观.
部署方法的第三个参数是UpgradeExisting,我将其设置为true - 这是我需要做的还是我错过了什么?
void Deploy(string TargetConnectionString, string TargetDatabaseName, string pathToSourceDACPAC)
{
DacServices dacServices = new DacServices(TargetConnectionString);
//Set up message and progress handlers
dacServices.Message += new EventHandler<DacMessageEventArgs>(dbServices_Message);
dacServices.ProgressChanged += new EventHandler<DacProgressEventArgs>(dbServices_ProgressChanged);
//Load the DACPAC
DacPackage dacpac = DacPackage.Load(pathToSourceDACPAC);
//Set Deployment Options
DacDeployOptions dacOptions = new DacDeployOptions();
dacOptions.AllowIncompatiblePlatform = true;
//Deploy the dacpac
dacServices.Deploy(dacpac, TargetDatabaseName, true, dacOptions);
}
//Event handlers...
void dbServices_Message(object sender, DacMessageEventArgs e)
{
OutputThis("DAC Message", e.Message.ToString());
}
void dbServices_ProgressChanged(object sender, DacProgressEventArgs e)
{ …
Run Code Online (Sandbox Code Playgroud) 我正在STM32f3Discovery板上编写一个程序,该程序应该使用DAC生成正弦波。我有几个文件,在下面列出。
Utilities.h:
#ifndef UTILITIES_H
#define UTILITIES_H
/** @brief Configure GPIOE, pin 9 (LED) as output PP
*/
void GPIOE_init( void );
/** @brief Configure Timer 2, event frequency - 100Hz
*/
void Timer_init( void );
/** @brief Configure interrupt handler
*/
void NVIC_config( void );
/** @brief Configure and enable DAC channel 1 on pin PA4,
* with TIM2 TRGO as trigger
*/
void DACch1_config( void );
/** @brief Configure DMA to work with DAC
*/
void DMA_config( void ); …
Run Code Online (Sandbox Code Playgroud) dac ×12
sql-server ×8
dacpac ×2
ado.net ×1
azure ×1
c ×1
c# ×1
cloud ×1
dma ×1
localdb ×1
mdac ×1
powershell ×1
sqlpackage ×1
stm32 ×1