Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzo di SMO per copiare un database e dati

Bene, dopo aver contattato l'assistenza Microsft l'ho fatto funzionare correttamente, ma è lento e più o meno inutile. Fare un backup e quindi un ripristino è molto più veloce e lo userò finché la nuova copia dovrebbe risiedere sullo stesso server dell'originale.

Il codice di lavoro è il seguente:

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();

Il trucco era impostare la proprietà DestinationDatabase. Questo deve essere impostato anche se la destinazione è la stessa dell'origine. Inoltre ho dovuto connettermi al server come istanza denominata invece di utilizzare le altre opzioni di connessione.