Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Es läuft...

Begonnen von MartinHan, November 11, 2024, 23:43:50

⏪ vorheriges - nächstes ⏩

MartinHan

Hi,

jetzt habe ich die SP mit dem Restore: (nur der Kern!)

 DECLARE @restoreCommand NVARCHAR(MAX);
        SET @restorecommand = N'USE [master];' +
                         N'Alter DATABASE [' + @databasename + N'] SET SINGLE_USER WITH NO_WAIT;' +
                    N'Restore DATABASE [' + @DatabaseName + '] ' +
                              N'FROM DISK = ''' + @BackupPath + @backupmember  + N'.bak' +''' ' +
                              N'WITH  FILE = 1,  NOUNLOAD,  REPLACE,  STATS = 5;' +
               N'Alter DATABASE [' + @databasename + N'] SET MuLTI_USER ;'

        -- Restore ausführen
        EXEC sp_executesql @restoreCommand;

der Aufruf:

use [master];
go
execute restoresamedb 'DbAdcproduktion',
'D:\SQLServer\MSSQL16.ADCSQLSERVER\MSSQL\Backup\DbAdcProduktion\',
'2024-11-20-16-31-49'

Ich kann diese SP aus Access heraus aufrufen, nur sie tut es nicht.
Wenn ich den Aufruf in SSMS mache kommt diese Meldung:
=================================
backupPath: D:\SQL Server\MSSQL16.ADCSQLSERVER\MSSQL\Backup\DbAdcProduktion\
backupMember: 2024-11-20-16-31-49
databasename: DbAdcproduktion
=================================
Nachricht 50000, Stufe 16, Status 1, Prozedur restoresamedb, Zeile 56 [Batchstartzeile 2]
Fehler beim Erstellen des Restores: Fehler bei der ALTER DATABASE-Anweisung.

Sie läuft nur, wenn Access komplett geschlossen ist.

Zweite Frage: Wie kann ich das Protokoll des Aufrufs in Access sehen?

Danke!

Martin

Es gibt nichts gutes, außer, man tut es! EK

PhilS

Zitat von: MartinHan am November 21, 2024, 08:38:08Sie läuft nur, wenn Access komplett geschlossen ist.


Zweite Frage: Wie kann ich das Protokoll des Aufrufs in Access sehen?
Die Intention deines Backups+Restore ist ja eine Kopie der aktuellen Produktivumgebung als "Sandbox" zu erstellen.
Ist das bei deinem Restore Script so, dass eine Kopie der Datenbank erstellt wird? Für mich sieht es so aus, als würdest du mit dem Backup die aktuelle Produktiv-DB überschreiben wollen.  - Das geht natürlich nicht, solange die Access DB mit dieser Produktiv-DB verbunden ist.

Führst du den T-SQL-Batch über eine Pass-Through-Abfrage aus? Dann solltest du aufgetretene Fehler in der DbEngine.Errors-Collection finden.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MartinHan

Hi,

die ganze DB war ziemlich strubbelig, also habe ich alles neu installiert.
Die Daten in den Entwicklungsumgebung sind jetzt aktuell zu denen in der Produktion.

Komischerweise läuft jetzt die SP nicht mehr aus Access heraus.
Sie läuft in SSMS, sowohl der Execute mit der SP, als auch das T-Sql Backup Statement.

So rufe ich die Prozedur auf:

Set cmd = CreateObject("ADODB.Command")

procName = "[dbo].[FullDatabaseBackup]"

backupmember = year(Date) & "-" & Month(Date) & "-" & Day(Date) & "-" & Hour(Now()) & "-" & Minute(Now()) & "-" & Second(Now())

    ' Command-Objekt konfigurieren
    With cmd
        .ActiveConnection = connection
        .CommandText = procName
        .CommandType = 4 ' adCmdStoredProc

        ' Parameter hinzufügen
        .Parameters.Append .CreateParameter("@DatabaseName", 200, 1, Len(db), db)
        .Parameters.Append .CreateParameter("@BackupPath", 200, 1, Len(backuppath), backuppath)
        .Parameters.Append .CreateParameter("@Backupmember", 200, 1, Len(backupmember), backupmember)
       
        ' 200 = adVarChar, 1 = adParamInput, 50 = Länge

        ' Stored Procedure ausführen
        .Execute
       
    End With

connection ist ein Objekt, das ich als Global variable deklariert habe  und die ganz am Anfang, wenn ich in das Programm einsteige, belegt wird.
Die Verbindung klsppt, auch die Tabellen werden richtig connected.
Ich habe auch mal den Namen der SP bewußt falsch angegeben, es kommt dann sofort ein Fehler, das er die SP nicht findet. Sie wird also gefunden, nur läuft sie nicht ab...

macht mich kirre...

MfG

Martin
Es gibt nichts gutes, außer, man tut es! EK

MartinHan

Hi,

hat sich erledigt, es klappt jetzt...chatgpt hat mir das richtige Coding generiert.

Martin
Es gibt nichts gutes, außer, man tut es! EK