0

我想将数据库从服务器 a(2008)复制到 b(2012)。通常我只是做一个备份并在目标上恢复它。

拥有功能 - 复制数据库向导 - 将使我的任务更容易一些,因为我必须移动相当多的数据库。我正在使用SMO 方法,遇到了几个可以解决的问题,但现在我遇到了以下错误:

      Event Name: OnError
 Message: An error occurred while transferring data. See the inner exception for details.
StackTrace:    at Microsoft.SqlServer.Management.Smo.Transfer.TransferData()
   at Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer()
InnerException-->User, group, or role 'x' already exists in the current database.
StackTrace:    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Microsoft.SqlServer.Management.Smo.Transfer.ExecuteStatements(SqlConnection destinationConnection, IEnumerable`1 statements, SqlTransaction transaction)
   at Microsoft.SqlServer.Management.Smo.Transfer.TransferData()
 Operator: CH\a
 Source Name: b
 Source ID: c
 Execution ID: d
 Start Time: 26.07.2091 11:30:57
 End Time: 26.07.2091 11:30:57
 Data Code: 0

在向导中,我选择不复制登录对象或其他任何内容。所以据我了解,它应该做一个数据库的“普通”副本,而不是别的。

如果您对为什么会发生此错误有任何建议,我将不胜感激!

4

1 回答 1

0

在 SQL Server 上,登录与数据库用户不同。登录授予对服务器的访问权限,并且可能能够根据分配的权限访问多个数据库,而数据库用户只能被授予对其数据库中特定事物的访问权限。

除了设置transfer.CopyAlLogins = false;,您还需要设置

transfer.CopyAllRoles = false;
transfer.CopyAllUsers = false;
于 2019-07-26T10:45:35.737 回答