Wie kann ich diese Datenbank Backup ausführen und Skripts aus meiner winform Anwendung wiederherstellen?

StackOverflow https://stackoverflow.com/questions/431033

Frage

Ich entwickle eine kleine Business-Anwendung, die SQL Server 2005-Datenbank verwendet.

Plattform: .NET Framework 3.5; Anwendungstyp: Windows-Anwendung; Sprache: C #

Frage:

Ich brauche die Sicherung von meiner Anwendung zu nehmen und wieder herzustellen. Ich habe die erforderliche Skript generiert aus SSME.

Wie führe ich diese bestimmte Skript (oder Scripts) von meiner Winform-Anwendung?

War es hilfreich?

Lösung

Sie können diese Skripte die gleiche Art und Weise führen Sie eine Abfrage ausführen, nur Sie keine Verbindung zu der Datenbank, die Sie wiederherstellen möchten, verbinden Sie stattdessen zu meistern.

Andere Tipps

Wenn der Computer, auf dem die Anwendung ausgeführt wird, die SQL Server-Client-Tools installiert sind, können Sie sqlcmd .

Wenn Sie es tun wollen programmatisch können Sie verwenden SMO

Tutorial

Verwenden Sie einfach Ihre Verbindung zur Datenbank (ADO nehme ich an?) Und Ihre Ebene TSQL Anweisungen über diese Verbindung an den Server senden.

Für die Sicherung möchten Sie wahrscheinlich xp_sqlmaint verwenden. Es hat die Fähigkeit, praktisch alte Sicherungen zu entfernen, und es schafft eine schöne Protokolldatei. Sie können es über etwas nennen wie: EXECUTE master.dbo.xp_sqlmaint N '' - S "[Server]" [ServerLogonDetails] -D [Database] -RPT "[BackupArchive] \ BackupLog.txt" [RptExpirationSchedule] -CkDB -BkUpDB "[BackupArchive]" -BkUpMedia DISK [BakExpirationSchedule] ''

(ersetzen Sie die [eckigen Klammern] mit geeigneten Werten).

Auch für die Sicherung, die Sie das Transaktionsprotokoll-Backup benötigen. So etwas wie: IF DATABASEPROPERTYEX ((SELECT db_name (dbid) FROM master..sysprocesses WHERE spid = @@ SPID), '' Erholung '') <> '' SIMPLE '' EXECUTE master.dbo.xp_sqlmaint N '' -S „[Server] "[ServerLogonDetails] -D [Database] -RPT "[BackupArchive] \ BackupLog_TRN.txt"[RptExpirationSchedule] -BkUpLog "[BackupArchive]" -BkExt TRN -BkUpMedia DISK [BakExpirationSchedule] ''

Ich würde empfehlen, die tatsächlichen Befehle speichern Sie in einer Datenbanktabelle (1 Zeile pro Befehl) und verwenden eine Art Vorlage Austauschschema verwenden die konfigurierbaren Werte zu handhaben. Dies würde es ermöglichen, für leichte Änderungen an die Befehle, ohne dass neuen Code zu implementieren.

Für die Wiederherstellung Sie müssen alle Verbindungen töten, außer für die internen SQL Server diejenigen. Grundsätzlich nehmen die Ergebnisse des „exec sp_who“ und für die Zeilen, die auf DB-Namen entsprechen, und hat einen Status, der nicht „Hintergrund“ ist, und ein cmd, die nicht einer der „Signal-Handler“, „LOCK MONITOR“, „lazy Writer“ ist "LOG WRITER", "CHECKPOINT SLEEP" a "töten" auf der spid tun. (zB: ExecuteNonQuery ( "kill 1283"))

Sie werden zu stoppen wollen und alle Ausnahmen von dem KILL-Befehl ignorieren. Es gibt nichts, was man dagegen tun kann. Wenn die Wiederherstellung kann nicht fortgesetzt werden, weil die bestehenden Verbindungen werden einen Fehler erhöhen.

Eine Gefahr mit dem Töten Verbindungen ist ADO Connection-Pool (mehr für asp.net Anwendungen als Windows-Anwendungen). ADO nimmt die eine Verbindung aus dem Verbindungspool abgerufen gilt ... und es reagiert nicht gut auf die Verbindungen, die getötet wurden. Die nächste Operation, die auf dieser Verbindung tritt fehl. Ich kann den Fehler nicht erinnern ... Sie könnte es zu stoppen können, nur, dass bestimmte Fehler und Griff ... auch mit 3.5 ich glaube, Sie den Verbindungspool spülen kann (so ... trap den Fehler, spülen Sie den Verbindungspool öffnen Sie die Verbindung, versuchen Sie den Befehl erneut ... hässlich, aber möglicherweise machbar).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top