[英]Restore Backups automatically using SQL Server
通常的情況是,我嘗試使用以下腳本自動還原備份列表。 我將所有備份都放在同一個文件夾中,然后將備份的名稱放在表中以便於檢索。 最后,我放置了一個游標,該游標每次都指向備份並進行還原。 現在,在執行腳本時,出現以下錯誤:
消息3234,級別16,狀態2,第82行邏輯文件'OP38MLG_db_201903040000_DATA'不是數據庫'OP38MLG_db_201903040000'的一部分。 使用RESTORE FILELISTONLY列出邏輯文件名。 消息3013,級別16,狀態1,第82行RESTORE DATABASE正在異常終止。
當我獨立還原每個備份時,操作成功結束,但是當我嘗試還原列表時出現錯誤。
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
-- specify database backup directory
SET @path = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\'
DECLARE @backuppath NVARCHAR(256) -- path for backup files
DECLARE @datapath VARCHAR(256) -- path for data files
DECLARE @logpath VARCHAR(256) -- path for log files
DECLARE @backupfileName VARCHAR(256) -- filename for backup
DECLARE @datafileName VARCHAR(256) -- filename for database
DECLARE @logfileName VARCHAR(256) -- filename for logfile
DECLARE @logName VARCHAR(256) -- filename for logfile
DECLARE @dataName VARCHAR(256)
-- specify database backup directory
SET @backuppath = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\'
SET @datapath = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\'
SET @logpath = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\'
print 'backup path is ' + @backuppath
print 'data path is ' + @datapath
print 'log path is ' + @logpath
/*Table to hold each backup file name in*/
CREATE TABLE #List(fname varchar(200),depth int, file_ int)
INSERT #List
EXECUTE master.dbo.xp_dirtree @backuppath, 1, 1
SELECT * FROM #List
DECLARE files CURSOR FOR
SELECT fname FROM #List
OPEN files
FETCH NEXT FROM files INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @cleanname AS VARCHAR(255)
SET @cleanname = REPLACE(@name, '.BAK', '')
PRINT @cleanname
SET @backupfileName = @backuppath + @name
SET @datafileName = @datapath + @cleanname + '.MDF'
SET @logfileName = @logpath + @cleanname + '_log.LDF'
SET @logName = @cleanname + '_log'
SET @dataName = @cleanname + '_DATA'
print 'backup file is ' + @backupfileName
print 'data file is ' + @datafileName
print 'log file is ' + @logfileName
USE [master]
RESTORE DATABASE @cleanname
FROM DISK = @backupfileName
WITH FILE = 1,
MOVE @dataName TO @datafileName,
MOVE @logName TO @logfileName,
NOUNLOAD, STATS = 5
FETCH NEXT FROM files INTO @name
END
CLOSE files
DEALLOCATE files
DROP TABLE #List
GO
我期望在輸出中將還原備份,並且可以在數據庫欄中看到它們,但是實際輸出是我上面提到的錯誤。
SQL Server數據庫由多個“ 邏輯文件 ”組成。 還原數據庫時,您需要說出這些文件的存儲位置。 您正在執行此操作,但是您的代碼對這些邏輯文件的名稱進行了假設。 您假設它們是FileName _Data和FileName _Log 。 錯誤消息告訴您在這種情況下是錯誤的。 如果可以運行以下查詢,請查看LogicalName字段以查看此.BAK文件的實際值。
RESTORE FILELISTONLY FROM DISK = N'C:\MyBackups\OP38MLG_db_201903040000.bak'
多年來,這件事在我身上發生了很多次。 找出實際的邏輯文件名總是令人驚訝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.