AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MSSQL DB Restore Problem
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL DB Restore Problem

Ein Thema von Pet04 · begonnen am 14. Jan 2020 · letzter Beitrag vom 15. Jan 2020
Antwort Antwort
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

MSSQL DB Restore Problem

  Alt 14. Jan 2020, 12:00
Datenbank: MSSQL • Version: 2017 • Zugriff über: Ado
Hallo Zusammen,

Ich habe folgenden Problem.
Ich möchte eine Datenbank (Backupdatei .bak Datei) von einem SQL Server 2008 R2 Express nach SQL 2017 Express einspielen.

Dabei muss ich nun mit move den Pfade für den 2017er Server Ordner angeben.

Dabei scheitere ich momentan an die Syntax.

Mein alter Code, ohne Pfadangebe "MOVE TO" :

Code:
  ...
          with ADOQ1 do
          begin
         
            ProgressBar2.Position := 50;
            SQL.clear;
            SQL.Text := 'restore database :DBName from '
                        +'Disk = :BakPfadName ';              
            Parameters.ParamByName('BakPfadName').Value := sTemp;
            Parameters.ParamByName('DBName').Value := sDBName;
            ExecSQL();
          end; (*with*)
          …


Über das MM Studio funktioniert es:

Code:
RESTORE DATABASE [db_Name] FILE = N'db_Name' FROM DISK = N'E:\Pfad des Backups\db_Name.bak' WITH FILE = 1, MOVE N'db_Name' TO N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\db_Name.mdf', MOVE N'db_Name_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\db_Name.LDF', NOUNLOAD, REPLACE
Wie muss die Syntax aussehen, dass ich die Pfade, MDF und LDF als Variable / Parameter übergeben kann ?

Beispielcode wäre schön.


Vielen Dank.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: MSSQL DB Restore Problem

  Alt 14. Jan 2020, 12:22
Na offensichtlich so, wenn das funktioniert?!
das Statement unten ist jedenfalls etwas 'ausführlicher' formuliert, behandelt mögliche widechar Zeichen, liefert zusätzliche Option (die aber vielleicht default sind. usw. usw.

Wieso verwendest Du das nicht so, wenn es funktioniert?



Über das MM Studio funktioniert es:

Code:
RESTORE DATABASE [db_Name] FILE = N'db_Name' FROM DISK = N'E:\Pfad des Backups\db_Name.bak' WITH FILE = 1, MOVE N'db_Name' TO N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\db_Name.mdf', MOVE N'db_Name_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\db_Name.LDF', NOUNLOAD, REPLACE
Gruß, Jo
  Mit Zitat antworten Zitat
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: MSSQL DB Restore Problem

  Alt 14. Jan 2020, 12:27
weil nicht immer das MM Studio auf den PC's ist und ich es gerne mit Delphi lösen will.
Ich habe ein kleines DB-Tool welches meine DB erstellt, sichert und wiederherstellt.
Der DB Name ändert sich auch.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: MSSQL DB Restore Problem

  Alt 14. Jan 2020, 13:07
Darum geht es nicht, sondern um die Formulierung de Statements, das im MMStudio etwas ausführlicher scheint. Mal abgesehen von der eckigen Klammer um den DBNamen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: MSSQL DB Restore Problem

  Alt 14. Jan 2020, 13:40
Das funktionierende Statement müsstest du 1:1 in Deinen Code übernehmen können. - zur Probe
Dann / dort sollte es ebenfalls funktionieren. In der Umgebung, aus der das MM Studio Statement stammt.

Dann muss natürlich die Parameterierung angepasst werden, damit es wieder dynamisch ist.

Ich weiß nicht was ich übersehe oder ob es Dir nicht klar ist. p80286 hat es auch geschrieben.

Was Du aus MM Studio gezeigt hast, ist SQL und SQL führst Du auch in Deinem Client aus.
Wie die Parameter richtig zu befüllen sind (Verzeichnis, Pfadnamen, .. und wie Du sie dynamisch bestimmst, musst Du allerdings selbst wissen.

Analogie:
wenn Du MM Studio hast und damit eine Tabelle abfragst, funktioniert es natürlich. Funktioniert es in Deinem Programm dann nicht, wenn kein MM Studio da ist? Nein, Du kannst die gleiche Abfrage einer Tabelle auch in Deinem Programm laufen lassen.

Ach so: mir fällt gerade ein, dass Du unter MM Studio vielleicht einen anderen User verwendest. Backup / Restore ist ja etwas administratives und der SQL(?) User, den Du im Client verwendest hat dazu vielleicht nicht die Rechte.
Gruß, Jo

Geändert von jobo (14. Jan 2020 um 13:42 Uhr)
  Mit Zitat antworten Zitat
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: MSSQL DB Restore Problem

  Alt 14. Jan 2020, 14:30
der erste Code funktioniert ja.
Nun möchte ich ihn mit den Parametern erweitern, woran ich momentan schreitere.

dbPath2 ist die Pfadangabe vom SQL Server 2017

Code:
 with ADOQ1 do
          begin
            dbPath2 := dbPath +sDBName+'.mdf';
            log := dbPath +sDBName+'_log.ldf';
         
            ProgressBar2.Position := 50;
            SQL.clear;        
            SQL.Text := 'restore database :DBName from '
                    //    +'Disk = :BakPfadName with Replace';
                          +'Disk = :BakPfadName WITH FILE = 1, Replace, MOVE :DBName TO :dbPath2, MOVE :logfile TO :log  ';
            Parameters.ParamByName('BakPfadName').Value := sTemp;
            Parameters.ParamByName('DBName').Value := sDBName;
            Parameters.ParamByName('dbPath2').Value := dbPath2;
            Parameters.ParamByName('logfile').Value := sDBName+'_log';
             Parameters.ParamByName('log').Value := log;
            ExecSQL();
Ich glaube, dass hier der Fehler bzw. die Syntax falsch ist.
Code:
 
SQL.Text := 'restore database :DBName from '                  
            +'Disk = :BakPfadName WITH FILE = 1, Replace, MOVE :DBName TO :dbPath2, MOVE :logfile TO :log  ';
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz