0

我正在使用 msdeploy(版本 2)将数据库从机器 A 传输到机器 B。

在机器 A 上的数据库中有一些用户在机器 B 上不存在,因此传输(部分)失败并显示以下消息:

Error Code: ERROR_SQL_EXECUTION_FAILURE
More Information: An error occurred during execution of the database script. 
The error occurred between the following lines of the script: "3" and "5". 
The verbose log might have more information about the error. 
The command started with the following: "CREATE USER [someDomain\someUser] FOR LOGIN [someDomain" 
Windows NT user or group 'someDomain\someUser' not found. 
Check the name again. http://go.microsoft.com/fwlink/?LinkId=178587

数据库似乎被转移了,除了用户创建。有谁知道这次失败后数据库处于什么状态?

有什么方法可以在没有用户(或者没有特定用户的情况下更好)的情况下使用 msdeploy 传输数据库?

4

1 回答 1

1

Web 部署使用 SMO(SQL 管理对象)编写脚本并将脚本应用于 SQL 数据库,并使用 dbfullsql 提供程序公开大多数 SMO 设置(因此,这些选项中的大多数:http: //msdn.microsoft.com/en -us/library/microsoft.sqlserver.management.smo.transfer_properties.aspx)。如果由于这种登录不存在或用户未找到错误而要跳过用户,您应该能够通过添加脚本选项来做到这一点:copyAllUsers=false 到同步源。例如:

msdeploy.exe -verb:sync -source:dbfullsql="Data Source=.\SQLExpress;Initial Catalog=MySourceDb;User Id=localUser;Password=LocalPass",copyAllUsers=false -dest:dbfullsql="Data Source=RemoteSQLServer;Initial目录=MyDestDb;用户 ID=remoteUser;密码=RemotePass"

顺便说一句,我很惊讶你注意到数据库似乎已经同步了——我希望情况并非如此。如果您有权限,Web Deploy 将创建数据库,如果它在最初尝试建立连接时不存在,但您的失败发生在脚本执行的早期,我相信 Web Deploy dbfullsql 同步由默认(数据库创建与脚本执行是分开的,不进行事务处理)。因此,数据库可能存在于它没有预先同步的地方,但我不希望数据存在于其中。

于 2012-04-30T21:42:50.607 回答