2009-09-25 8 views
3

J'ai deux chaînes de connexion SQL Server, CX et CY.Copier la base de données SQL Server dans le code

Ce que je dois faire est

  1. Assurez-CY n'a pas de tables en elle.
  2. Sauvegarde de la base de données CX.
  3. Restaurez-le à CY.

N'ont pas trouvé ce que je cherche. Je ne veux pas d'outil pour le faire, je dois le faire en code C# au moment de l'exécution car l'action d'ajouter un nouveau client doit copier une base de données principale vers une base de données vide. Je ne peux pas utiliser un script prédéfini car je dois également copier des données et la base de données principale a pu être mise à jour quelques secondes avant l'ajout du nouveau client.

=== === MISE À JOUR

J'utilise Smo.Backup et Smo.Restore. Lorsque j'essaie de restaurer je reçois:

ERROR 3154 Le jeu de sauvegarde contient une sauvegarde d'une base de données autre que la base de données existante.

Quelqu'un peut-il me dire comment contourner ce problème? A part ça, j'ai une solution de travail!

Merci

Pete

+0

Salut Pete, à votre mise à jour (sachant que vous avez probablement abordé ce problème il y a plus d'un mois :)) - êtes-vous en train de définir la propriété "Restore.ReplaceDatabase" sur True? – Tao

Répondre

0

Je comprends votre désir de le faire en code C#, mais je pense vraiment juste appeler un outil de ligne de commande pour le faire pour vous serait plus facile.

Cela dit, this guy a un script qui ressemble à ce que vous voulez faire. Vous pourriez probablement envelopper dans un SPROC et l'appeler assez facilement.

0

Je pense que vous avez besoin de regarder dans le

SqlServer.Management.Smo.Backup class 

voir this technet article aussi, ce article pourrait être une référence, en fonction de vos besoins spécifiques.

+0

J'essaie cette approche, mais impossible de restaurer la sauvegarde à une nouvelle base de données. Des idées?(Consultez le texte de la question mise à jour). –

+0

Le message d'erreur indiqué semble indiquer que la propriété ReplaceDatabase de l'objet de restauration [SqlServer.Management.Smo.] N'est pas définie sur True; CY ne correspond pas à la base de données définie dans la sauvegarde, et par conséquent SQL envoie ce message (mieux, on peut avoir typo-ed le nom de base de données) En définissant explicitement ReplaceDatabase on dit à SQL qu'il est possible d'écraser le db existant . – mjv

+0

BTW, je supposais que c'était dans le contexte d'un utilitaire «amateur» qui permettrait d'automatiser ce processus de sauvegarde (avec des barres de progression, gestion des erreurs plus spécifiques, etc.). , comme indiqué dans la réponse d'Arthur. Vous pouvez appeler ces instructions TSQL, au moyen d'ADO ou autre, et éviter de traiter le modèle objet de SMO. – mjv

8

Une solution avec la base de données de sauvegarde:

1) Assurez-vous pas de tables

select COUNT(*) from sys.sysobjects where xtype = 'U' 

2) Sauvegarde

BACKUP DATABASE MyFirstDatabase TO DISK= @path WITH FORMAT 

3) Restaurer

RESTORE DATABASE MySecondDatabase FROM DISK = @path WITH REPLACE 

Voir SQL en ligne pour plus de détails: http://msdn.microsoft.com/en-us/library/ms186865.aspx

Questions connexes