SQL ежедневное восстановление - PullRequest
0 голосов
/ 28 апреля 2020

Пытались и не смогли написать скрипт, который ежедневно восстанавливает файл резервной копии базы данных SQL.

Резервная копия файла имеет следующий формат Backup_28_04_2020. Мне нужен скрипт, чтобы взять последний файл и восстановить его в базе данных под названием [CallDatabase]. Это дата, которая меня отталкивает, потому что она меняется каждый день.

Любая помощь приветствуется.

БД SQL server 2016.

Сценарий, который я пытаюсь описать ниже , Сценарий анализируется, но завершается с ошибкой ниже.

"Ошибка преобразования типа данных varchar в nvarchar. [SQLSTATE 42000] (Ошибка 8114). Шаг не выполнен."

DECLARE @FileName varchar(255), @PathToBackup varchar(255), @RestoreFilePath varchar(1000)
DECLARE @Files TABLE (subdirectory varchar(255), depth int, [file] int)
 SET NOCOUNT ON

 SET @PathToBackup = 'H:\'

 -- insert into our memory table using dir tree and a single file level
 INSERT INTO @Files
 EXEC master.dbo.xp_DirTree @PathToBackup,1,1

 SELECT TOP 1 
    @FileName = [subdirectory]
 FROM 
    @Files
 WHERE
    -- get where it is a file
    [file] = 1
 AND    
    subdirectory LIKE 'Backup_%.bak'
 ORDER BY
    -- order descending so newest file will be first by naming convention
    subdirectory DESC

IF LEFT(REVERSE(@PathToBackup), 1) != '\'
BEGIN
    SET @PathToBackup = @PathToBackup + '\'
END

SET @RestoreFilePath = @PathToBackup + @FileName

SELECT @RestoreFilePath

RESTORE DATABASE [CallDatabase] 
FROM DISK = @RestoreFilePath
WITH FILE = 1,  NOUNLOAD,  REPLACE,  STATS = 10

1 Ответ

0 голосов
/ 28 апреля 2020

Я думаю, вам нужно предоставить больше деталей при восстановлении БД. Кроме того, delcare @RestoreFilePath as nvarchar (1000):

DECLARE @DBNAME SYSNAME = 'CallDatabase'    --'DBName'
DECLARE @DATA NVARCHAR(MAX) = 'H:\' + @DBNAME + '.mdf'    --'Path of data file'
DECLARE @LOG NVARCHAR(MAX) = 'H:\' + @DBNAME + '.ldf'     --'Path of log file'

RESTORE DATABASE [CallDatabase] 
FROM DISK = @RestoreFilePath
WITH FILE = 1,  
MOVE N'CallDatabase_Data' TO @DATA,  
MOVE N'CallDatabase_Log' TO @LOG, 
NOUNLOAD,  REPLACE,  STATS = 10

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...