2016-04-06 23 views
0

Ben SMO kullanarak bir veritabanı kopyalamak deneyin "kullanıcı zaten var", ama hata alıyorum:Kopya veritabanı:

"User, group, or role '%' already exists in the current database"

Kodum: önceden

var conn = GetServerConnection(); 
var server = new Server(conn); 

var sourceDb = server.Databases[sourceDatabase.Name]; 

var destinationDbName = GetNameForDatabase(dbName); 

var destinationDb = new Database(server, destinationDbName); 
destinationDb.Create(); 

var transfer = new Transfer(sourceDb) { 
    DestinationDatabase = destinationDbName, 
    DestinationServer = server.Name, 
    DestinationLoginSecure = true, 
    CopySchema = true, 
    CopyAllTables = true, 
    CopyData = true, 
    CopyAllUsers = false, 
}; 

transfer.Options.WithDependencies = true; 
transfer.Options.ContinueScriptingOnError = true; 
transfer.TransferData(); 

Teşekkür herhangi bir öneri için!

+0

'CopyAllLogins' ve/veya' CopyAllRoles' özelliklerini kapatmaya çalışın. – Dennis

+0

Aşağıdaki kodu ekledim: 'CopyAllRoles = false, CopyAllLogins = false' ama aynı hatayı alıyorum – Sergiu

cevap

0

Veritabanı sunucusundan kaynak veritabanına herhangi bir eşleşme var mı? Kopyalamayı denemeden önce bunları kaldırmayı deneyin.

Veritabanı aynı veritabanında bir test veritabanı oluşturmak için Veritabanını Kopyala sihirbazını kullanarak kopyalıyordum ve bu hatayı aldım. Sorun, kaynak veritabanının bu veritabanına bir kullanıcı girişi eşlenmiş olmasıdır. Tüm bunların bir yerinde, Veritabanını Kopyala sihirbazı, hedef veritabanına bir kullanıcı düz bir kopya ile eklemeye çalışıyordu, ancak aynı kullanıcıyı eşleme yoluyla da ekliyordu. Hile, kaynak veritabanının eşlemesini kaldırmak, ardından veritabanını kopyalamak ve daha sonra eşlemeyi kaynağa ekledi (hedefe zaten eklendi).