SQL Backup erstellen



  • Ok, danke. So weit geht es schon mal.



  • Naja gut, so richtig klappts noch nicht.

    Ich habe jetzt folgendes:

    // Backup in eine angegebene Datei erstellen
    Backup^ backup = gcnew Backup();
    backup->Action = BackupActionType::Database;
    backup->BackupSetDescription = "ArchiveDataBase:" + DateTime::Now.ToShortDateString();
    backup->BackupSetName = "Archive";
    backup->Database = "C:\\USERS\\DIRK\\DOCUMENTS\\REGALLAGER_DB_DATEI.MDF";  //Name der Datenbank?
    
    String^ destinationPath = "C:\\Users\\dirk\\Documents\\";
    String^ serverName = ".\SQLEXPRESS";
    String^ userName = " ";
    String^ password = " ";
    String^ databaseName = "REGALLAGER_DB_DATEI.MDF"  ;
    
    BackupDeviceItem^ deviceItem = gcnew BackupDeviceItem(destinationPath, DeviceType::File);
    //ServerConnection^ connection = gcnew ServerConnection(serverName, userName, password);
    //Server^ sqlServer = gcnew Server(connection);
    
     //Verbinden mit SQL Server  
    SqlConnection^ sqlConnection = 
          gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\dirk\\Documents\\Regallager_db_datei.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
    
    //"serverConnection" mit der "sqlConnection" Information
    Microsoft::SqlServer::Management::Common::ServerConnection^ serverConnection = 
    		gcnew Microsoft::SqlServer::Management::Common::ServerConnection(sqlConnection);
    
    Microsoft::SqlServer::Management::Smo::Server^ sqlServer  = gcnew Server(serverConnection);
    
    Database^ db = sqlServer->Databases[databaseName];
    //jetzt verbunden....
    
    backup->Initialize = true;
    backup->Checksum = true;
    backup->ContinueAfterError = true;
    
    backup->Devices-> Add(deviceItem);
    backup->Incremental = false;
    
    backup->ExpirationDate = DateTime::Now.AddDays(3);
    backup->LogTruncation = BackupTruncateLogType::Truncate;
    
    backup->FormatMedia = false;
    
    backup->SqlBackup(sqlServer);
    

    aber leider wird eine Failed Operation Exception geworfen. (bei backup->SqlBackup(sqlServer);

    Jetzt bin ich schon ein wenig Ratlos.

    😕



  • Na, schau Dir doch mal den Inhalt der Exception an...



  • Das sagt mir nichts.

    Es steht da:

    Fehler bei Sichern für Server 'SCHLEPPI\SQLEXPRESS'.

    Habe auch schon in den Details geschaut, aber da werde ich leider auch nicht schlau drauß.



  • OK, noch ein wenig "tiefer" in den Details rumgesucht finde ich folgendes:

    Unter InnerException steht:

    {"Für den EXPIREDATE-Parameter wurde ein ungültiger Wert angegeben.\r\nBACKUP DATABASE wird fehlerbedingt beendet."}



  • Halt,

    liegt an der Zeile

    backup->ExpirationDate = DateTime::Now.AddDays(3);

    habe sie auskommentiert, jetzt kommt ein neuer Fehler.

    {"Das Sicherungsmedium 'C:\\Users\\dirk\\Documents\' kann nicht geöffnet werden. Betriebssystemfehler 3(Das System kann den angegebenen Pfad nicht finden.).\r\nBACKUP DATABASE wird fehlerbedingt beendet."}



  • Na gut,

    Fehler gefunden.

    String^ destinationPath = "C:\\Users\\dirk\\Documents\\REGALLAGER_DB_DATEI.BK";

    sollte es heißen. Denke mal das ich es .bk nennen muss.

    Trotzdem danke für den Tipp, hätte mir die Details sonst nicht mehr so genau angeschaut. Na hoffentlich wird das wiederherstellen der DB aus dem BK nun nicht ganz so ne schwere Geburt.



  • Na so recht komme ich mit dem Restore noch nicht klar.

    Folgendes läßt sich zwar compilieren,

    Restore^ sqlRestore = gcnew Restore();
    
    String^ serverName = ".\\SQLEXPRESS";
    String^ filePath = "C:\\Users\\dirk\\Documents\\BackupDB\\REGALLAGER_DB_DATEI.BAK";
    String^ databaseName = "New_REGALLAGER_DB_DATEI.MDF";
    String^ databaseName2 = "REGALLAGER_DB_DATEI_log";
    String^ dataFilePath = "C:\\Users\\dirk\\Documents\\";
    String^ logFilePath = "C:\\Users\\dirk\\Documents\\";
    
    BackupDeviceItem^ deviceItem = gcnew BackupDeviceItem(filePath, DeviceType::File);
    sqlRestore->Devices->Add(deviceItem);
    sqlRestore->Database = databaseName;
    
     //Verbinden mit SQL Server  
    SqlConnection^ sqlConnection = 
          gcnew SqlConnection("Data Source=.\\SQLEXPRESS;Integrated Security=True;User Instance=True ");  //;Integrated Security=True;Connect Timeout=30;User Instance=True");
    
    //"serverConnection" mit der "sqlConnection" Information
    Microsoft::SqlServer::Management::Common::ServerConnection^ serverConnection = 
    		gcnew Microsoft::SqlServer::Management::Common::ServerConnection(sqlConnection);
    
    Microsoft::SqlServer::Management::Smo::Server^ sqlServer  = gcnew Server(serverConnection);
    
    Database^ db = sqlServer->Databases[databaseName];
    //jetzt verbunden....
    
    // Restore aus der angegebenen Datei
    String^ backupFileName = "C:\\Users\\dirk\\Documents\\BackupDB\\REGALLAGER_DB_DATEI.BAK";
    Restore^ restore = gcnew Restore();
    restore->Action = RestoreActionType::Files;
    restore->NoRecovery = true;
    
    restore->ReplaceDatabase = true; 
    restore->Database = databaseName;
            /* if (restore->PercentComplete != NULL)
             {
                restore->PercentComplete += restore->PercentComplete;
             }*/
    restore->Devices->Add(gcnew BackupDeviceItem(backupFileName, DeviceType::File));
    restore->SqlRestore(sqlServer);
    

    aber wieder habe ich eine Exception.

    *Die Datei 'C:\\Users\\dirk\\Documents\\Regallager_db_datei.mdf' kann nicht überschrieben werden.
    Sie wird von der 'C:\\USERS\\DIRK\\DOCUMENTS\\REGALLAGER_DB_DATEI.MDF'-Datenbank verwendet.\r\
    Die Datei 'Regallager_db_datei' kann nicht in 'C:\\Users\\dirk\\Documents\\Regallager_db_datei.mdf' wiederhergestellt werden.
    Verwenden Sie WITH MOVE, um einen gültigen Speicherort für die Datei zu identifizieren.\r\n
    Die Datei 'C:\\Users\\dirk\\Documents\\Regallager_db_datei_log.ldf' kann nicht überschrieben werden.
    Sie wird von der 'C:\\USERS\\DIRK\\DOCUMENTS\\REGALLAGER_DB_DATEI.MDF'-Datenbank verwendet.\r\
    Die Datei 'Regallager_db_datei_log' kann nicht in 'C:\\Users\\dirk\\Documents\\Regallager_db_datei_log.ldf'
    wiederhergestellt werden.
    Verwenden Sie WITH MOVE, um einen gültigen Speicherort für die Datei zu identifizieren.\r\n
    Beim Planen der RESTORE-Anweisung wurden Probleme gefunden.
    Vorausgehende Meldungen enthalten ausführliche Informationen.\r\n
    RESTORE DATABASE wird fehlerbedingt beendet.

    Ich habe jetzt zwar schon einiges Probiert, aber leider bin ich zu keiner Lösung gekommen.



  • Problem leider immer noch nicht gelöst 😞



  • Lesen hilft doch:

    Die Datei 'C:\\Users\\dirk\\Documents\\Regallager_db_datei.mdf' kann nicht überschrieben werden.
    Sie wird von der 'C:\\USERS\\DIRK\\DOCUMENTS\\REGALLAGER_DB_DATEI.MDF'-Datenbank verwendet.\r\
    Die Datei 'Regallager_db_datei' kann nicht in 'C:\\Users\\dirk\\Documents\\Regallager_db_datei.mdf' wiederhergestellt werden.
    Verwenden Sie WITH MOVE, um einen gültigen Speicherort für die Datei zu identifizieren.\r\n


Anmelden zum Antworten