Thema: Delphi MSSQL DB Restore Problem

Einzelnen Beitrag anzeigen

HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#15

AW: MSSQL DB Restore Problem

  Alt 15. Jan 2020, 08:40
Hmm..

Wie in den vorherigen Threads ja schon geschrieben, musst Du den SQL-Befehl manuell zusammen bauen:

(Verkürzt, auf das Wesentliche)

Delphi-Quellcode:
ADOQuery.SQL.Text := 'RESTORE DATABASE ' + ATargetDB;
ADOQuery.SQL.Add('FROM DISK = ' + QuotedStr(ASourceFile));
ADOQuery.SQL.Add('WITH ');
ADOQuery.SQL.Add('MOVE '+ QuotedStr(ADataBaseLogicalNameMDF) + ' TO '+QuotedStr(ATargetDBPhysicalNameMDF) + ' , ');
ADOQuery.SQL.Add('MOVE '+ QuotedStr(ADataBaseLogicalNameLDF) + ' TO '+QuotedStr(ATargetDBPhysicalNameLDF));
Erläuterung:

ATargetDB -> Datenbankname (z.B. DBName)
ASourceFile -> Filename (z.B. E:\Pfad des Backups\db_Name.bak)
ADataBaseLogicalNameMDF -> MDF Datenbankname im Backupfile (z.B. DBName)
ATargetDBPhysicalNameMDF -> MDF DateiName Ziel (z.B. C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\db_Name.MDF )
ADataBaseLogicalNameLDF -> LDF Logname im Backupfile (z.B. DBName_LOG)
ATargetDBPhysicalNameLDF -> MDF DateiName Ziel (z.B. C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\db_Name.LDF )

Bedenke aber, dass es hier Fallstricke gibt:
1.)
Es können mehr wie ein MDF oder LDF File im Backup enthalten sein, dann benötigst Du für jedes File eine separate 'MOVE ' Zeile.
2.)
Der Name des Datenbank-Files 'im' Backup kann sich vom Verwendeten Namen der Datenbank unterscheiden. Somit kann 'ATargetDB' und 'ADataBaseLogicalNameMDF' unterschiedlich sein.

Um dies zu Umgehen, musst Du vor dem Zusammenbau deines SQL-Befehls erstmal aus dem Backup-File diese Informationen auslesen.

Dies ist nicht ganz trivial und unterscheidet sich bei den verschiedenen Versionen des SQL-Servers geringfügig.

Musst Du mal googlen...
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat