Obecná diskuse 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:34
     
     
    Hallo 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