1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| --https://www.datalytyx.com/restore-multiple-sql-databases-backup-files/
-- L'idéal c'est de backuper sur un share directement sur une autre machine si on veut faire un restore ailleurs. On gagne le temps de la copie
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
-- specify database backup directory
SET @path = '\\ShareDrive1\sql\backup\'
-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
--WHERE name NOT IN ('master','model','msdb','tempdb') -- exclude these databases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
-- LE RESTORE
DECLARE @name VARCHAR(256) -- database name
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
-- specify database backup directory
SET @backuppath = 'D:\Database\Backup\Test\'
SET @datapath = 'D:\Database\DATA\'
SET @logpath = 'L:\Database\LOG\'
print 'backup path is ' + @backuppath
print 'data path is ' + @datapath
print 'log path is ' + @logpath
--Table to hold each backup file name in
DROP TABLE #files -- remove any previous instance
CREATE TABLE #files(fname varchar(200),depth int, file_ int)
INSERT #files
EXECUTE master.dbo.xp_dirtree @backuppath, 1, 1
SELECT * FROM #files
DECLARE files CURSOR FOR
SELECT fname FROM #files
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'
print 'backup file is ' + @backupfileName
print 'data file is ' + @datafileName
print 'log file is ' + @logfileName
RESTORE DATABASE @cleanname
FROM DISK = @backupfileName
WITH NORECOVERY,
MOVE @cleanname
TO @datafileName,
MOVE @logName
TO @logfileName
FETCH NEXT FROM files INTO @name
END
CLOSE files
DEALLOCATE files |
Partager