Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden von SMO zum Kopieren einer Datenbank und von Daten

Nun, nachdem ich mich an den Microsoft-Support gewandt hatte, funktionierte es ordnungsgemäß, aber es ist langsam und mehr oder weniger nutzlos. Ein Backup und dann eine Wiederherstellung durchzuführen ist viel schneller und ich werde es verwenden, solange die neue Kopie auf demselben Server wie das Original laufen soll.

Der Arbeitscode lautet wie folgt:

ServerConnection conn = new ServerConnection("rune\\sql2008");
Server server = new Server(conn);

Database newdb = new Database(server, "new database");
newdb.Create();

Transfer transfer = new Transfer(server.Databases["source database"]);
transfer.CopyAllObjects = true;
transfer.CopyAllUsers = true;
transfer.Options.WithDependencies = true;
transfer.DestinationDatabase = newdb.Name;
transfer.DestinationServer = server.Name;
transfer.DestinationLoginSecure = true;
transfer.CopySchema = true;
transfer.CopyData = true;
transfer.Options.ContinueScriptingOnError = true;
transfer.TransferData();

Der Trick bestand darin, die DestinationDatabase-Eigenschaft festzulegen. Dies muss auch dann gesetzt werden, wenn das Ziel mit der Quelle identisch ist. Außerdem musste ich mich als benannte Instanz mit dem Server verbinden, anstatt die anderen Verbindungsoptionen zu verwenden.