我想将数据库从服务器 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: CHa
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
在向导中,我选择不复制登录对象或其他任何内容。因此,据我了解,它应该做数据库的"普通"副本,而不是其他任何东西。
如果您对为什么会发生此错误有任何建议,我将不胜感激!
在 SQL Server 上,登录名与数据库用户不同。登录名授予对服务器的访问权限,并且可能能够访问多个数据库,具体取决于分配的权限,而数据库用户只能被授予对其数据库中特定内容的访问权限。
除了设置transfer.CopyAlLogins = false;
您还需要设置
transfer.CopyAllRoles = false;
transfer.CopyAllUsers = false;