SQL Backup die 3.
-
Samstag, 25. Juni 2011 18:16
Hi, ich erstelle mit BACKUP DATABASE DB1_SQL TO DISK='Filename.bak' WITH INIT,NOSKIP
Bekomme ich im Vorfeld eigentlich mit wie lang das Backupfile wird?Ich möchte aus der SQL Datenbank sehr viele Datensätze löschen (ca 2 Millionen) muss ich nachher eigentlich noch mit SQL Befehlen irgendwie aufräumen?
Und noch eine Frage, ich erstelle von der DB1_SQL (SQL Server Express 2008) ein Backup auf Festplatte.
Kann ich jetzt dies Backup zurück in dem selben SQL Server zurückspielen allerdings unter einem anderen Namen (z.B. DB_Test1), so das ich beide Datenbanken gleichzeitig benutzen könnte.Gruss
- Verschoben Thorsten Dörfler Sonntag, 26. Juni 2011 09:31 SQL Thema (aus:Visual Basic (ab Version 2002 / .NET))
- Typ geändert Bogdan Petru Roiu Dienstag, 5. Juli 2011 14:58 Keine Rückmeldung des Fragenstellender
Alle Antworten
-
Samstag, 25. Juni 2011 18:39
Hallo Mike,
zu 1: Weiß ich nicht, ich kanns mir aber nicht vorstellen.
zu 2: Kommt drauf an. Unter bestimmten Umständen wird der Speicherplatz nicht freigegeben. D.h. die Speicherplatzbelegung wird erstmal nicht geringer. Abhilfe kann man da (je nach Wiederherstellungsmodell ggfs. mit Vorarbeit) mit DBCC SHRINKDATABASE ... schaffen.
Schneller als ein DELETE FROM <Tabelle> wäre TRUNCATE TABLE <Tabelle>, ob man TRUNCATE verwenden kann, ist aber von einigen Faktoren abhängig.
zu 3: Siehe: http://msdn.microsoft.com/de-de/library/ms186858.aspx#copying_db_using_bnr
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Falk Krahl Sonntag, 26. Juni 2011 12:18
-
Sonntag, 26. Juni 2011 16:34Hallo Stefan,
wenn ich den Code ausführe (natürlich auf meine DB geändert)
bekomme ich folgende Fehlermeldung
Das Sicherungsmedium 'DBTest_SQLBackups' ist nicht vorhanden
BACKUP DATABASE AdventureWorks2008R2
TO AdventureWorks2008R2Backups ;
RESTORE FILELISTONLY
FROM AdventureWorks2008R2Backups ;
RESTORE DATABASE TestDB
FROM AdventureWorks2008R2Backups
WITH MOVE 'AdventureWorks2008R2_Data' TO 'C:\MySQLServer\testdb.mdf',
MOVE 'AdventureWorks2008R2_Log' TO 'C:\MySQLServer\testdb.ldf';
GO
Gibt es noch andere Beispiele (ausser mit SMO. Sollte schon alles mit T-SQL sein)
Gruss -
Sonntag, 26. Juni 2011 17:00
Hallo Mike,
dann poste bitte mal den von dir geänderten Code. Der wird dann wohl nicht stimmen bzw. hast Du dort das Sicherungsmedium falsch angegeben.
Wenn Du ein bestehendes Backup hast, brauchst Du nur das hier:
RESTORE DATABASE TestDB1 FROM DISK = 'X:\Ordner\Datenbanksicherung.bak'
WITH MOVE 'TestDB' TO 'X:\Ordner\TestDB1.mdf',
MOVE 'TestDB_Log' TO 'X:\Ordner\TestDB1.ldf';Die Namen hinter MOVE '...' kannst Du über
RESTORE FILELISTONLY FROM DISK = 'X:\Ordner\Datenbanksicherung.bak'
ermitteln.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Montag, 27. Juni 2011 07:12
Hallo Stefan,
ich habe im Moment folgendes an Code
Erst
USE MASTER
RESTORE FILELISTONLY FROM DISK ='L:\Backup\MyBackup.BAK'
Dann
RESTORE FILELISTONLY FROM DISK ='L:\Backup\MyBackup.BAK'
RESTORE DATABASE MynewDB FROM DISK ='L:\Backup\MyBackup.BAK'
WITH
MOVE 'MyBackup' TO 'L:\Backup\MynewDB_DBA.MDF',
MOVE 'MyBackup_LOG' TO 'L:\Backup\MynewDB_DBA_LOG.LDF'
Und
ALTER DATABASE MynewDB MODIFY FILE
(NAME = MyBackup_LOG,NEWNAME = MynewDB_LOG )
Wenn ich obigen Code ausführe, denn wird doch die Original Datenbank nicht angetastet, Backup der Orig. wird eingespielt und eine komplett neue Datenbank wird angelegt, das ist doch richtig so, oder?
Gruss -
Montag, 27. Juni 2011 08:41
Hallo Mike,
der Code sieht erst mal gut aus. Das Restore FileListOnly ist ja auch wirklich nur einmal notwendig. Dann kann man das zweite Statement schon schreiben.
Alternativ kannst Du auch auf der Datenbank, die gesichert wurde ein sp_helpfile ausführen um an die Infos zu kommen.Nun noch zu den anderen Fragen:
- Bekomme ich im Vorfeld eigentlich mit wie lang das Backupfile wird?
Nein, da das Backup alle Transaktionen mit wegschreibt, die während der Dauer des Backups anfallen, ist dies nicht vorhersagbar. Auch wird die Größe bei Komprimierung nicht vorhersagbar sein, ohne die Daten weiter zu analysieren.- Ich möchte aus der SQL Datenbank sehr viele Datensätze löschen (ca 2 Millionen) muss ich nachher eigentlich noch mit SQL Befehlen irgendwie aufräumen?
Was sinnvoll wäre, ist ein Reorg der gruppierten Indizes, um die Fragmentierung der Tabellen zu reduzieren. Falls Du die Löschungen in kleinere Transaktionen packst (immer nur 10.000 Sätze zum Beispiel) wird Dein Log auch nicht so riesig. Ansonsten wäre dies einer der seltenen Fälle, wo man eine Verkleinerung des Logs sinnvoll einsetzen könnte.Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu -
Montag, 27. Juni 2011 08:45
Hallo Christoph, danke für deine Antwort.
>Wenn ich obigen Code ausführe, denn wird doch die Original Datenbank nicht angetastet, Backup der Orig. wird eingespielt und eine komplett neue Datenbank wird angelegt, das ist >doch richtig so, oder?
Wollte nur noch mal zu der Frage sicher gehen, das mit der Original DB nichts passiert.
Gruss
-
Montag, 27. Juni 2011 08:51
Solange Du eine Session in der Original-Datenbank offen hast, wird jeder Restore-Versuch auf diese DB auf die Nase fallen.
Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu

