SQL Server 資料庫批量備份及批量恢復指令碼
阿新 • • 發佈:2021-07-14
測試資料庫版本 SQL server 2012
批量備份指令碼
設定好備份目錄,以及備份檔名格式,此處我們備份目錄為d:\backup 備份檔案格式為{dbname}.bak
1 DECLARE 2 @FileName VARCHAR(200), 3 @CurrentTime VARCHAR(50), 4 @DBName VARCHAR(100), 5 @SQL VARCHAR(1000) 6 7 SET @CurrentTime = CONVERT(CHAR(8),GETDATE(),112) 9 DECLARE CurDBName CURSORFOR 10 SELECT NAME FROM Master..SysDatabases where dbid>4 11 12 OPEN CurDBName 13 FETCH NEXT FROM CurDBName INTO @DBName 14 WHILE @@FETCH_STATUS = 0 15 BEGIN 16 --Execute Backup 17 SET @FileName = 'd:\backup\' + @DBName 18 SET @SQL = 'BACKUP DATABASE ['+ @DBName +'] TO DISK = '''+ @FileName + '.bak' + 19 ''' WITH NOINIT, NOUNLOAD, NAME = N''' + @DBName + '_backup'', NOSKIP, STATS = 10, NOFORMAT' 20 EXEC(@SQL) 21 22 --Get Next DataBase 23 FETCH NEXT FROM CurDBName INTO @DBName 24 END 25 26 CLOSE CurDBName 27 DEALLOCATE CurDBName
1 USE master 2 GO 3 RECONFIGURE --先執行一次重新整理,處理上次的配置 4 GO 5 EXEC sp_configure 'show advanced options',1 --啟用xp_cmdshell的高階配置 6 GO 7 RECONFIGURE --重新整理配置 8 GO 9 EXEC sp_configure 'xp_cmdshell',1 --開啟xp_cmdshell,可以呼叫SQL系統之外的命令 10 GO 11 RECONFIGURE 12 GO
批量恢復資料庫指令碼
1 declare 2 @backpath varchar(2000), 3 @execsql varchar(2000), 4 @datapath varchar(2000), 5 @lgname varchar(64), 6 @lgtype varchar(12), 7 @lgfilename varchar(64), 8 @i int 9 begin 10 set @backpath='d:\backup\'; 11 set @execsql='dir /b '+ @backpath +'\*.BAK'; 12 set @datapath='d:\Data'; 13 begin 14 if not exists (select * from sysobjects where name='backfiles') 15 create table backfiles(name varchar(2000)); 16 end 17 truncate table backfiles 18 insert into backfiles exec xp_cmdshell @execsql 19 20 DELETE backfiles WHERE upper(right(name,3))<>'BAK' OR NAME IS NULL 21 22 declare @fileName varchar(100), 23 @dbName varchar(100) 24 25 declare file_cur cursor for select name from backfiles; 26 open file_cur 27 fetch next from file_cur into @fileName 28 while @@fetch_status=0 29 begin 30 select @dbName=substring(@fileName,1,charindex('.bak',@filename)-1); 31 32 ---------------------------- 33 DECLARE @fileListTable TABLE ( 34 [LogicalName] NVARCHAR(128), 35 [PhysicalName] NVARCHAR(260), 36 [Type] CHAR(1), 37 [FileGroupName] NVARCHAR(128), 38 [Size] NUMERIC(20,0), 39 [MaxSize] NUMERIC(20,0), 40 [FileID] BIGINT, 41 [CreateLSN] NUMERIC(25,0), 42 [DropLSN] NUMERIC(25,0), 43 [UniqueID] UNIQUEIDENTIFIER, 44 [ReadOnlyLSN] NUMERIC(25,0), 45 [ReadWriteLSN] NUMERIC(25,0), 46 [BackupSizeInBytes] BIGINT, 47 [SourceBlockSize] INT, 48 [FileGroupID] INT, 49 [LogGroupGUID] UNIQUEIDENTIFIER, 50 [DifferentialBaseLSN] NUMERIC(25,0), 51 [DifferentialBaseGUID] UNIQUEIDENTIFIER, 52 [IsReadOnly] BIT, 53 [IsPresent] BIT, 54 [TDEThumbprint] VARBINARY(32) -- remove this column if using SQL 2005 55 ) 56 INSERT INTO @fileListTable EXEC('RESTORE FILELISTONLY FROM DISK = '''+@backpath+@fileName+'''') 57 set @execsql = ''; 58 set @execsql ='restore database '+'"'+@dbName+'"' + ' from disk='+CHAR(39)+@backpath+@fileName+CHAR(39) +' with ' ; 59 ----------------- 60 set @i = 1 61 declare bak_cur cursor for select 62 [LogicalName] 63 ,reverse(substring(reverse([PhysicalName]),0,charindex('\',reverse([PhysicalName])))) as filen_ame 64 ,[Type] 65 from @fileListTable 66 open bak_cur 67 fetch next from bak_cur into @lgname,@lgfilename,@lgtype 68 while @@FETCH_STATUS = 0 69 begin 70 /* 71 不考慮檔案重名的情況,統一恢復到同一目錄下 73 */ 74 set @execsql = @execsql + (case when @i = 1 then ' ' else ', ' end) + ' move '+CHAR(39)+@lgname+CHAR(39)+' to '+CHAR(39)+@datapath+'\'+ @lgfilename +CHAR(39) 75 76 set @i = @i + 1 77 fetch next from bak_cur into @lgname,@lgfilename,@lgtype 78 end 79 close bak_cur 80 deallocate bak_cur 81 82 ---------------------------- 83 print @execsql 84 exec (@execsql) 85 delete from @fileListTable 86 fetch next from file_cur into @fileName 87 end 88 close file_cur 89 deallocate file_cur 90 end
1 --關閉 2 EXEC sp_configure 'show advanced options','1' --確保show advances options 的值為1,這樣才可以執行xp_cmdshell為0的操作 3 GO 4 RECONFIGURE 5 GO 6 EXEC sp_configure 'xp_cmdshell',0 --關閉xp_cmdshell 7 GO 8 RECONFIGURE 9 GO 10 EXEC sp_configure 'show advanced options','0' --關閉show advanced options 11 GO 12 RECONFIGURE 13 GO