SQLServer2019数据库备份与还原脚本(批量备份)

SQLServer2019数据库备份与还原脚本(批量备份)

2023年7月30日发(作者:)

SQLServer2019数据库备份与还原脚本(批量备份)前⾔最近公司服务器到期,需要进⾏数据迁移,⽽数据库属于多⽽繁琐,通过图形化界⾯⼀个⼀个备份所需时间成本很⼤,所以想着写⼀个sql脚本来执⾏。开始数据库单个备份数据库批量备份数据库还原数据库还原报错问题记录总结1.数据库单个备份图形化界⾯备份这⾥就不展⽰了,可以⾃⾏百度,下⾯直接贴代码USE MASTERIF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )DROP PROCEDURE BackupDataProcgocreate proc BackupDataProc@FullName Varchar(200)--⼊参(数据库名)asbeginDeclare @FileFlag varchar(50)Set @FileFlag='C:myfiledatabase'+@FullName+'.bak'--备份到哪个路径(C:myfiledatabase)根据⾃⼰需求来定BackUp DataBase @FullName To Disk=@FileFlag with init--核⼼代码endexec BackupDataProc xxx执⾏成功后便会⽣成⼀个.bak⽂件到指定⽂件夹中,如图2.数据库批量备份(时间有点长,请等待)USE MASTERif exists(SELECT * FROM WHERE name = 'AllDatabasesNameType')drop type AllDatabasesNameTypegocreate type AllDatabasesNameType as table--⾃定义表类型⽤于存储数据库名称(rowNum int ,name nvarchar(60),filename nvarchar(300))goIF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BachBackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )DROP PROCEDURE BachBackupDataProcgocreate proc BachBackupDataProc@filePath nvarchar(300)--⼊参,备份时的⽬标路径asbeginDeclare @AllDatabasesName as AllDatabasesNameType --⽤于存储系统中的数据库名Declare @i int --循环变量insert into @AllDatabasesName(name,filename,rowNum) select name,filename,ROW_NUMBER() over(order by name) as rowNum from sysdatabases where name not in('master','tempdb','model','msdb') --赋值set @i =1--循环备份数据库while @i <= (select COUNT(*) from @AllDatabasesName)beginDeclare @FileFlag varchar(500)Declare @FullName varchar(50)Select @FullName =name from @AllDatabasesName where rowNum = @iSet @FileFlag=@filePath+@FullName+'.bak'BackUp DataBase @FullName To Disk=@FileFlag with initset @i = @i + 1endendexec BachBackupDataProc 'C:myfiledatabase'执⾏结果效果如下图:3.数据库还原IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[ReductionProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )DROP PROCEDURE ReductionProcgocreate proc ReductionProc@Name nvarchar(200)--⼊参 数据库名称asbeginDeclare @DiskName nvarchar(500)Declare @FileLogName nvarchar(100)Declare @FileFlagData nvarchar(500)Declare @FileFlagLog nvarchar(500)Set @FileLogName = @Name + '_log'Set @DiskName = 'C:myfiledatabase'+@Name+'.bak' ---(源)备份⽂件路径Set @FileFlagData='C:Program FilesMicrosoft SQL ERVERMSSQLDATA'+@Name+'.mdf'---(⽬标)指定数据⽂件路径Set @FileFlagLog='C:Program FilesMicrosoft SQL ERVERMSSQLDATA'+@FileLogName+'.ldf'---⽬标)指定⽇志⽂件路径RESTORE DATABASE @Name --为待还原库名FROM DISK = @DiskName ---备份⽂件名WITH MOVE @Name TO @FileFlagData, ---指定数据⽂件路径MOVE @FileLogName TO @FileFlagLog, ---指定⽇志⽂件路径STATS = 10, REPLACEendgoexec ReductionProc xxx执⾏后便能还原库(我是拿这三个库做测试,截的图可能没什么变化,你们可以尝试下)4.数据库还原报错问题记录当然还原的过程可能会遇到⼀些问题,⽐如:1.版本不⼀样 Sql 逻辑⽂件'XXXXX ' 不是数据库'YYY'的⼀部分。请使⽤ RESTORE FILELISTONLY 来列出逻辑⽂件名。版本的话我试过了,⾼版本可以向下兼容,但是低版本不能向上兼容,可以统⼀版本来解决(如有更好的解决⽅案欢迎打扰)第⼆个问题呢就是脚本中‘MOVE' 他只能跟逻辑名,⽽有些数据库的逻辑名并不是数据库名称,所以需要替换⼀下,下⾯是查询数据库逻辑名的sql语句:USE MASTERrestore filelistonly from disk='D:'--根据⾃⼰的需求要变更路径如图,对于这些逻辑名与数据库名称不⼀致的情况可以单独拿出来重新执⾏⼀下即可:USE MASTER --这⾥注意要使⽤MASTER,以免出现待还原库被占⽤的情况RESTORE DATABASE Sence --为待还原库名FROM DISK = 'D:' ---备份⽂件名WITH MOVE 'Sence_Guangxi' TO 'D:', ---指定数据⽂件路径MOVE 'Sence_Guangxi_log' TO 'D:DatabaseDataSence_', ---指定⽇志⽂件路径STATS = 10, REPLACEGO5.总结数据是⽆价的,对数据库操作时备份是必须的。数据是⽆价的,对数据库操作时备份是必须的。数据是⽆价的,对数据库操作时备份是必须的。(重要的事说三遍)到此这篇关于SQL Server2019数据库备份与还原脚本,数据库可批量备份的⽂章就介绍到这了,更多相关SQL Server2019数据库备份与还原脚本,数据库可批量备份内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690652340a386867.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信