2016-11-03 6 views
0

Ich habe unten Skript verwendet, um Datenbanken wiederherzustellen, wo ich .bak Dateiname manuell angegeben habe. Ich muss den automatisierten Prozess zur Wiederherstellung von Datenbasen durchführen. Also habe ich versucht, gespeicherte Prozedur mit xp_DirTree zu verwenden, um den Namen der .bak-Datei vom Remote-Server-Ordner zu erhalten. aber die gespeicherte Prozedur wird ohne Ergebnisse ausgeführt. Wenn ich den lokalen Pfad ausprobiert habe, kann ich .bak Dateien in Ordner sehen. Zuerst dachte ich, es ist ein Erlaubnisproblem, aber die Berechtigungen sind in Ordnung. Könnte mir jemand vorschlagen, was der Fehler verursacht?Wie wird der Name der .bak-Datei automatisch aus dem wiederherzustellenden Verzeichnis abgerufen?

Skript Datenbanken wiederherstellen:

CREATE TABLE #CustomerrestoreFiles(
backupfile VARCHAR(100)) 
--Drop Table #CustomerrestoreFiles (backupfile) 
VALUES 

('Customer_backup_2016_09_15_203001_9888161'), 
('Customer_backup_2016_10_10_203001_7101588'), 
('Customer_backup_2016_10_14_203001_6621303'), 
('Customer_backup_2016_10_15_203001_5397847'), 
('Customer_backup_2016_10_16_203002_0291343'), 
('Customer_backup_2016_10_17_203002_2861353') 


DECLARE @CustomerDBfileToRestore VARCHAR(100), @backupLocation varchar(500), @mdfLocation varchar(500), @ldfLocation varchar(500) 

DECLARE restorecursor CURSOR FOR 
SELECT backupfile FROM #CustomerrestoreFiles 

OPEN restorecursor 

FETCH NEXT FROM restorecursor 
INTO @CustomerDBfileToRestore 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @backupLocation = 'F:\Customer bak files' + '\' + @CustomerDBfileToRestore + '\' + @CustomerDBfileToRestore +'.bak' 
    SET @mdfLocation = 'F:\Files\Customer_Restore_Files\' + @CustomerDBfileToRestore + '.mdf' 
    SET @ldfLocation = 'F:\Files\Customer_Restore_Files\' + @CustomerDBfileToRestore + '.ldf' 
    RESTORE DATABASE @CustomerDBfileToRestore 
    FROM DISK = @backupLocation 

    WITH FILE = 1, 

    MOVE 'Customer_Data' TO @mdfLocation, 
     MOVE 'Customer_Log' TO @ldfLocation, 
    NOUNLOAD, REPLACE, STATS = 1 

    FETCH NEXT FROM restorecursor 
    INTO @CustomerDBfileToRestore 
END 
CLOSE restorecursor 
DEALLOCATE restorecursor 

Antwort

0

Ich wette, das ein Netzlaufwerk Problem zugeordnet ist. Das Laufwerk kann vom SQL-Benutzer nicht gesehen werden. Versuchen Sie stattdessen, UNC zu benennen. Der folgende Artikel kann sich als nützlich erweisen.

How to backup a database to a network drive

+0

Danke. Ich habe auch den UNC-Weg ausprobiert. aber immer noch leere Ergebnisse. – Amelia

Verwandte Themen