SQLServer2019数据库备份与还原脚本(批量备份)
前⾔最近公司服务器到期,需要进⾏数据迁移,⽽数据库属于多⽽繁琐,通过图形化界⾯⼀个⼀个备份所需时间成本很⼤,所以想着写⼀个sql脚本来执⾏。
开始
数据库单个备份
数据库批量备份
数据库还原
数据库还原报错问题记录
总结
1.数据库单个备份
图形化界⾯备份这⾥就不展⽰了,可以⾃⾏百度,下⾯直接贴代码
USE MASTER
IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
DROP PROCEDURE BackupDataProc
go
create proc BackupDataProc
@FullName Varchar(200)--⼊参(数据库名)
as
begin
Declare @FileFlag varchar(50)
Set @FileFlag='C:\myfile\database\'+@FullName+'.bak'--备份到哪个路径(C:\myfile\database\)根据⾃⼰需求来定
BackUp DataBase @FullName To Disk=@FileFlag with init--核⼼代码
end
exec BackupDataProc xxx
执⾏成功后便会⽣成⼀个.bak⽂件到指定⽂件夹中,如图
2.数据库批量备份(时间有点长,请等待)
USE MASTER
if exists(SELECT * pes WHERE name = 'AllDatabasesNameType')
drop type AllDatabasesNameType
go
create type AllDatabasesNameType as table--⾃定义表类型⽤于存储数据库名称
(
rowNum int ,
name nvarchar(60),
filename nvarchar(300)
)
go
IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BachBackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
DROP PROCEDURE BachBackupDataProc
go
create proc BachBackupDataProc
@filePath nvarchar(300)--⼊参,备份时的⽬标路径
as
begin
Declare @AllDatabasesName as AllDatabasesNameType --⽤于存储系统中的数据库名
sqlserver备份表语句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)
begin
Declare @FileFlag varchar(500)
Declare @FullName varchar(50)
Select @FullName =name from @AllDatabasesName where rowNum = @i
Set @FileFlag=@filePath+@FullName+'.bak'
BackUp DataBase @FullName To Disk=@FileFlag with init
set @i = @i + 1
end
end
exec BachBackupDataProc 'C:\myfile\database\'
执⾏结果效果如下图:
3.数据库还原
IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[ReductionProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
DROP PROCEDURE ReductionProc
go
create proc ReductionProc
@Name nvarchar(200)--⼊参数据库名称
as
begin
Declare @DiskName nvarchar(500)
Declare @FileLogName nvarchar(100)
Declare @FileFlagData nvarchar(500)
Declare @FileFlagLog nvarchar(500)
Set @FileLogName = @Name + '_log'
Set @DiskName = 'C:\myfile\database\'+@Name+'.bak' ---(源)备份⽂件路径
Set @FileFlagData='C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\'+@Name+'.mdf'---(⽬标)指定数据⽂件路径Set @FileFlagLog='C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\'+@FileLogName+'.ldf'---⽬标)指定⽇志⽂件路径RESTORE DATABASE @Name --为待还原库名
FROM DISK = @DiskName ---备份⽂件名
WITH MOVE @Name TO @FileFlagData, ---指定数据⽂件路径
MOVE @FileLogName TO @FileFlagLog, ---指定⽇志⽂件路径
STATS = 10, REPLACE
end
go
exec ReductionProc xxx
执⾏后便能还原库(我是拿这三个库做测试,截的图可能没什么变化,你们可以尝试下)
4.数据库还原报错问题记录
当然还原的过程可能会遇到⼀些问题,⽐如:
1.版本不⼀样
2.SQL Sql 逻辑⽂件'XXXXX ' 不是数据库'YYY'的⼀部分。请使⽤ RESTORE FILELISTONLY 来列出逻辑⽂件名。
版本的话我试过了,⾼版本可以向下兼容,但是低版本不能向上兼容,可以统⼀版本来解决(如有更好的解决⽅案欢迎打扰)第⼆个问题呢就是脚本中‘MOVE' 他只能跟逻辑名,⽽有些数据库的逻辑名并不是数据库名称,所以需要替换⼀下,
下⾯是查询数据库逻辑名的sql语句:
USE MASTER
restore filelistonly from disk='D:\sql201database\Sence.bak'--根据⾃⼰的需求要变更路径
如图,
对于这些逻辑名与数据库名称不⼀致的情况可以单独拿出来重新执⾏⼀下即可:
USE MASTER --这⾥注意要使⽤MASTER,以免出现待还原库被占⽤的情况
RESTORE DATABASE Sence --为待还原库名
FROM DISK = 'D:\sql201database\Sence.bak' ---备份⽂件名
WITH MOVE 'Sence_Guangxi' TO 'D:\Database\Data\Sence.mdf', ---指定数据⽂件路径
MOVE 'Sence_Guangxi_log' TO 'D:\Database\Data\Sence_log.ldf', ---指定⽇志⽂件路径
STATS = 10, REPLACE
GO
5.总结
数据是⽆价的,对数据库操作时备份是必须的。
数据是⽆价的,对数据库操作时备份是必须的。
数据是⽆价的,对数据库操作时备份是必须的。(重要的事说三遍)
到此这篇关于SQL Server2019数据库备份与还原脚本,数据库可批量备份的⽂章就介绍到这了,更多相关SQL Server2019数据库备份与还原脚本,数据库可批量备份内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论