SQL Bachup / restore



  • Hallo ich bin jetzt schon seit ein paar Tagen am verzweifeln.

    Ich habe zwar schon in einem anderem Thread schon mal das gleiche gefragt, aber vielleicht finde ich hier eine Antwort.

    Einfach Aufgabe.

    Ich habe ein Visual C++ (Windows Forms) Projekt. In diesem Projekt ist eine Datenbank integriert. Diese habe ich auch mit Visual erstellt usw. Auf dieser Datenbank kann ich mit der Forms Anwendung speichern, löschen etc...

    Jetzt möchte ich die Datenbank komplett sichern können
    (so in der art wie speichern unter soll es dann aussehen, sagen wo und wies heißen soll zb.: meinBackup , Enter drücken fertig)
    und später mal wieder genau den gesicherten Zustand wiederherstellen können.

    Ich hab zwar jetzt schon einiges Rumprobiert mit SMO oder T-SQL aber klappen tut es nicht wirklich.

    So erstelle ich im Moment mein Backup (es wird zumindest eine .bak Datei erstellt)

    String^ strCon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\dirk\\Documents\\Regal_db.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
    String^ strSQL = "SELECT FachNr FROM Arti_table where ArtNR ="; 
    
    // 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\\REGAL_db.mdf";  //Name der Datenbank?
    
    String^ destinationPath = "C:\\Users\\dirk\\Documents\\BackupDB\\REGAL_back.mdf.bak";
    String^ serverName = ".\\SQLEXPRESS";
    String^ userName = " ";
    String^ password = " ";
    String^ databaseName = "REGAL_back.mdf.bak"  ;
    
    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\\Regal_db.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);
    

    und so versuche ich die DB wieder herzustellen:

    String^ filePath = "C:\\Users\\dirk\\Documents\\";
    String^ databaseName = "REGAL_db.mdf";
    
    //Verbinden mit SQL Server  
    SqlConnection^ sqlConnection = 
          gcnew SqlConnection("Data Source=.\\SQLEXPRESS;Integrated Security=True;User Instance=True ");  
    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\\REGAL_back.mdf.BAK";
    Restore^ restore = gcnew Restore();
    restore->Action = RestoreActionType::Database; //Files;
    restore->NoRecovery = false;
    restore->ReplaceDatabase = true; 
    restore->Database = databaseName;
    restore->Devices->Add(gcnew BackupDeviceItem(backupFileName, DeviceType::File));
    restore->SqlRestore(sqlServer);
    

    Leider wirft das Restore eine Exception, die da lautet:

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

    Ich wäre echt froh, wenn mir hier jemand sagen könnte, wie ein Backup / Restore geht.



  • Crosspost.

    Hier wird das Thema bereits behandelt:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-234406.html


Anmelden zum Antworten