Konsistente Datensicherung SQL Server 2005 Express

dermoebelprofi

Aktives Mitglied
2. Juni 2008
13
0
Hallo,

ich bin gerade in den Vorbereitungen für die Live-Schaltung meiner Wawi in Verbindung mit dem JTL- Shop 2.
Da es im SQL Server 2005 Express leider keinen Wartungplan gibt habe ich mir ein Script für die Sicherung der Datenbanken organisiert dieses kann ich über die geplanten Tasks auch sehr schön laufen lassen und erhalte nach Fertigstellung eine E-Mail mit dem Log-File. Soweit so gut...

Mein einzige Frage ist ob die DB zum Zeitpunkt der Sicherung überhaupt konsistent ist?
Gibt es eine Art "Wartungsmodus" oder ähnliches in den man den SQL Server versetzen kann, damit die Änderungen während des Backups gepuffert werden und anschließend wieder in die Datenbank laufen. Sollte während der Sicherung z.B. ein Datensätz angelegt oder geändert werden wäre meine Datenbank nicht wirklich konsistent.

Hier einmal der Code des Backup-Scripts:
Code:
DECLARE @dateString CHAR(12), @dayStr CHAR(2), @monthStr CHAR(2), @hourStr CHAR(2), @minStr CHAR(2) 
--month variable 
IF (SELECT LEN(CAST(MONTH(GETDATE()) AS CHAR(2))))=2 
   SET @monthSTR=CAST(MONTH(GETDATE()) AS CHAR(2)) 
ELSE 
   SET @monthSTR= '0' + CAST(MONTH(GETDATE()) AS CHAR(2)) 
--day variable 
IF (SELECT LEN(CAST(DAY(GETDATE()) AS CHAR(2))))=2 
   SET @daySTR=CAST(DAY(GETDATE()) AS CHAR(2)) 
ELSE 
   SET @daySTR='0' + CAST(DAY(GETDATE()) AS CHAR(2)) 
--hour variable 
IF (SELECT LEN(DATEPART(hh, GETDATE())))=2 
   SET @hourStr=CAST(DATEPART(hh, GETDATE()) AS CHAR(2)) 
ELSE 
   SET @hourStr= '0' + CAST(DATEPART(hh, GETDATE()) AS CHAR(2)) 
--minute variable 
IF (SELECT LEN(DATEPART(mi, GETDATE())))=2 
   SET @minStr=CAST(DATEPART(mi, GETDATE()) AS CHAR(2)) 
ELSE 
   SET @minStr= '0' + CAST(DATEPART(mi, GETDATE()) AS CHAR(2)) 
--name variable based on time stamp 
SET @dateString=CAST(YEAR(GETDATE()) AS CHAR(4)) + @monthStr + @dayStr + @hourStr + @minStr 
--================================================================= 
DECLARE @IDENT INT, @sql VARCHAR(1000), @DBNAME VARCHAR(200) 
SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND NAME NOT IN ('TEMPDB') 
WHILE @IDENT IS NOT NULL 
BEGIN 
   SELECT @DBNAME = NAME FROM SYS.DATABASES WHERE database_id = @IDENT 
/*Change disk location here as required*/ 
   SELECT @SQL = 'BACKUP DATABASE '+@DBNAME+' TO DISK = ''C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\'+@DBNAME+'_db_' + @dateString +'.BAK'' WITH INIT' 
   EXEC (@SQL) 
   SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND database_id>@IDENT AND NAME NOT IN ('TEMPDB') 
END

Hoffe es kann mir jemand eine Auskunft dazu geben, ich würde mich sehr drüber freuen!

Vielen Dank für die Hilfe
Ingo
 

dermoebelprofi

Aktives Mitglied
2. Juni 2008
13
0
Danke für den Link!

Aber hier weiß ich ja leider auch nicht ob ich wirklich einen konsistenten Datenbankstand habe?

Von der Art der Sicherung nehmen sich die beiden Methoden nicht viel, ich sichere halt zusätzlich noch die Systemdatenbanken mit, was im Fehlerfall kein Nachteil sein muss.

Was mir wichtig ist, ist dass ich sicherstellen kann dass zum Zeitpunkt der Sicherung keine Transaktion in die DB läuft.
 

Dealux-GmbH

Sehr aktives Mitglied
5. März 2007
8.676
7
Düsseldorf
Einfach die Automatische Sicherung immer nachts um 03:23.42 Uhr machen, da wird wohl keiner an der WaWi arbeiten oder? Also wir hatten bisher noch nie Probleme mit Backups, mit der Methode des Links.
 

dermoebelprofi

Aktives Mitglied
2. Juni 2008
13
0
:wink: klar, dass werde ich dann wohl auch machen!

Dachte nur vielleicht gibt es so eine Möglichkeit auch im SQL Server, ich kenne diese Funktion aus der Oracle-DB, ist einfach noch mal auf Nummer Sicher beim Backup.

Aber danke für die Hilfe!
Ingo
 

Dealux-GmbH

Sehr aktives Mitglied
5. März 2007
8.676
7
Düsseldorf
Hab mich noch nicht mit MSSQL-DBs genauer auseinander gesetzt. Aber habe mal auf ner Internetseite was gelesen, was ich ziemlich passend zu diesem Thema fand:

Datenbank sind wie Leberwurst und Politik. Weiß man ein mal wie es gemacht wird, wünscht man sich es besser doch nicht zu wissen. ;)
 

dermoebelprofi

Aktives Mitglied
2. Juni 2008
13
0
Irgendwie doch sehr treffend :p

Eigentlich sind ja alle DBs sehr ähnlich, die Oberfläche für die Administration ist immer etwas anders und die Verarbeitung unterscheidet sich etwas, aber eigentlich muss man im laufenden Betrieb sehr wenig administrieren.

Ich hab schon viel mit DBs gearbeitet, vor allem aber mit dem SQL Server 2005 und MySQL, allerdings gibt es in der "Vollversion" einen Wartungsplan, der nimmt einem viel Scriptarbeit ab...dafür kostet es aber auch gutes Geld :wink:

Ich denke es sollte mit dem Backup schon klappen, die Rücksicherungstests waren ja auch erfolgreich, aber es war für mich einfach interessant zu wissen ob diese Möglichkeit besteht!

Also vielen Dank und frohes Schaffen!
Ingo