Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 366
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Backup und Restore einer SQL-Server-Datenbank über SMO


Autor: Jürgen Bayer
Sprache: C#
Bewertung:
7.77 (3 votes)
Anzahl der Aufrufe: 10672
  
Kick it on dotnet-kicks.de  

Beschreibung:

SMO ermöglicht u.A. den Backup und Restore einer SQL-Server-Datenbank. Die Klasse SqlServerBackup setzt diese Technik ein. Beim Restore ist zu beachten, dass eine eventuell vorhandene Verbindung zu der Datenbank nach dem Restore ungültig wird und somit neu erstellt werden muss (am besten vor dem Restore schließen und nach dem Restore neu erzeugen und öffnen).

Abgelegt unter: SMO, SQL Server, Backup, Restore, Datenbank.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// **********************************************
// Dies ist eines der 322 Rezepte aus dem
// C# 2005 Premium Codebook. 
// Das Snippet wurde vom Autor mit freundlicher 
// Genehmigung von Addison Wesley 
// bei dotnet-snippets.de veröffentlicht.
// **********************************************

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

public class SqlServerBackup
{
   /// <summary>
   /// Wird beim Fortschritt des Backup oder Restore aufgerufen
   /// </summary>
   public event PercentCompleteEventHandler
      PercentComplete;

   /// <summary>
   /// Erzeugt ein Backup einer Datenbank 
   /// </summary>
   /// <param name="serverName">Der Name des SQL Servers</param>
   /// <param name="databaseName">Der Name der zu sichernden Datenbank</param>
   /// <param name="backupFileName">Der Name der Datei, in die das Backup geschrieben werden soll</param>
   /// <param name="useTrustedConnection">Gibt an, ob eine vertraute Verbindung verwendet werden soll</param>
   /// <param name="login">Login-Name für den Login falls keine vertraute Verbindung verwendet werden soll</param>
   /// <param name="password">Passwort für den Login falls keine vertraute Verbindung verwendet werden soll</param>
   public void CreateBackupToFile(string serverName, string databaseName,
      string backupFileName, bool useTrustedConnection, string login,
      string password)
   {
      // Verbindungsinformationen definieren
      ServerConnection serverConnection = new ServerConnection();
      serverConnection.ServerInstance = serverName;
      if (useTrustedConnection)
      {
         serverConnection.LoginSecure = true;
      }
      else
      {
         serverConnection.LoginSecure = false;
         serverConnection.Login = login;
         serverConnection.Password = password;
      }

      // Verbindung aufbauen
      Server server = new Server(serverConnection);
      try
      {
         server.ConnectionContext.Connect();

         // Backup in die angegebene Datei erstellen
         Backup backup = new Backup();
         backup.Action = BackupActionType.Files;
         backup.Database = databaseName;
         if (this.PercentComplete != null)
         {
            backup.PercentComplete += this.PercentComplete;
         }
         backup.Devices.Add(new BackupDeviceItem(
            backupFileName, DeviceType.File));
         backup.SqlBackup(server);
      }
      finally
      {
         try
         {
            // Verbindung zum SQL-Server abbauen
            server.ConnectionContext.Disconnect();
         }
         catch { }
      }
   }

   /// <summary>
   /// Restauriert ein Backup einer Datenbank 
   /// </summary>
   /// <param name="serverName">Der Name des SQL Servers</param>
   /// <param name="databaseName">Der Name der wiederherzustellenden Datenbank</param>
   /// <param name="backupFileName">Der Name der Datei, die das Backup enthält</param>
   /// <param name="useTrustedConnection">Gibt an, ob eine vertraute Verbindung verwendet werden soll</param>
   /// <param name="login">Login-Name für den Login falls keine vertraute Verbindung verwendet werden soll</param>
   /// <param name="password">Passwort für den Login falls keine vertraute Verbindung verwendet werden soll</param>
   public void RestoreFromFile(string serverName, string databaseName,
   string backupFileName, bool useTrustedConnection, string login,
   string password)
   {
      // Verbindungsinformationen definieren
      ServerConnection serverConnection = new ServerConnection();
      serverConnection.ServerInstance = serverName;
      if (useTrustedConnection)
      {
         serverConnection.LoginSecure = true;
      }
      else
      {
         serverConnection.LoginSecure = false;
         serverConnection.Login = login;
         serverConnection.Password = password;
      }

      // Verbindung aufbauen
      Server server = new Server(serverConnection);
      try
      {
         server.ConnectionContext.Connect();

         // Restore aus der angegebenen Datei
         Restore restore = new Restore();
         restore.Action = RestoreActionType.Database;
         restore.Database = databaseName;
         if (this.PercentComplete != null)
         {
            restore.PercentComplete += this.PercentComplete;
         }
         restore.Devices.Add(new BackupDeviceItem(
            backupFileName, DeviceType.File));
         restore.SqlRestore(server);
      }
      finally
      {
         try
         {

            // Verbindung zum SQL-Server abbauen
            server.ConnectionContext.Disconnect();
         }
         catch { }
      }
   }
}

Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Gøran Homberg schrieb am:  02.09.2009 12:16:59

Ich hatte beim Backupeinspielen ein wenig Probleme.

der Aufruf von
server.KillAllProcesses(databaseName);

nach dem Erstellen der neuen "Server"-Instanz hat geholfen :)


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.