2016-09-19 3 views
0

Es ist mir gelungen, eine Funktion zu schreiben, die es mir ermöglicht, eine SQL Server-Datenbank zu sichern, aber ich habe Probleme mit der Wiederherstellung und Verwendung der gesicherten Version.RESTORE DATABASE wird abnormal beendet

Mein Code:

Try 
     Dim confirmBackUp As MsgBoxResult 
     confirmBackUp = MsgBox("Are you sure you want to restore?") 

     If confirmBackUp = MsgBoxResult.Yes Then Else Exit Sub 
     Dim cmd As New OleDbCommand 
     con = New OleDbConnection() 

      ' con.Connectionstring is read from an .ini file, but the string is correct 

     con.Open() 
     cmd.CommandType = CommandType.Text 
     cmd.CommandText = "RESTORE DATABASE MaintenanceControl FROM DISK='c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\Backup\MaintenanceControl.bak'" 
     cmd.Connection = con 
     cmd.ExecuteNonQuery() 

     MsgBox("Database Restored", MsgBoxStyle.OkOnly, "Success") 
     con.Close() 

    Catch ex As Exception 
     errorLog(ex.Message, ex.StackTrace) 
     MsgBox("Could not restore database, refer to error log") 

    End Try 

Aber auf der .ExecuteNonQuery() Linie, erhalte ich die folgende Fehlermeldung;

RESTORE DATABASE wird abnormal beendet.

RESTORE kann die Datenbank 'MaintenanceControl' nicht verarbeiten, da sie von dieser Sitzung verwendet wird. Es wird empfohlen, dass die master-Datenbank beim Ausführen dieser Operation verwendet wird.

Was ist das Problem? Liegt es daran, dass con auch der Name der Verbindung zur Live-Datenbank ist und keine neue Zeichenfolge erhalten sollte?

EDIT

ich jetzt die Initial Catalog Teil der Verbindung zum 'Master', wie con.close() vor con = New OleDbconnection hinzugefügt und festgelegt haben, aber der Fehler ist jetzt bekomme ich

RESTORE DATABASE wird abnormal beendet. Der exklusive Zugriff konnte nicht abgerufen werden, da die Datenbank verwendet wird.

+0

Zeigt Ihre Verbindungszeichenfolge auch auf die MaintenanceControl-Datenbank? Eine Wiederherstellung in einer Datenbank, mit der Sie verbunden sind, könnte das Problem sein - die Fehlermeldung scheint dies zu bestätigen. – phillyd

+1

Haben Sie versucht 'Master verwenden; gehen; cmd.CommandText =" RESTORE DATABASE MaintenanceCo ..... '?" – artm

+0

@phillyd Beim Öffnen des Programms zeigt "con" auf die Live-Version von MaintenanceControl, yeah –

Antwort

0

Wenn Sie in Ordnung sind mit Abwurf und die Datenbank neu zu erstellen, können Sie diese Anweisung verwenden, die Sie es fallen können:

alter database MaintenanceControl set single_user with rollback immediate; 
drop database SomeDatMaintenanceControl base; 

und erstellen Sie dann die Datenbank von Grund auf, wie Sie benötigen.

Durch das Löschen der Datenbank wird die Datenbank zerstört, sodass bei der Wiederherstellung keine Verbindung mehr möglich ist. Dann erstellen Sie die Datenbank sauber.

Verwandte Themen