SQLServer中如何进行数据库单个和批量备份
Admin 2022-08-05 群英技术资讯 1445 次浏览
这篇文章主要讲解了“SQLServer中如何进行数据库单个和批量备份”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。前言最近公司服务器到期,需要进行数据迁移,而数据库属于多而繁琐,通过图形化界面一个一个备份所需时间成本很大,所以想着写一个sql脚本来执行。
图形化界面备份这里就不展示了,可以自行百度,下面直接贴代码
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文件到指定文件夹中,如图

USE MASTER
if exists(SELECT * FROM sys.types 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 --用于存储系统中的数据库名
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\'
执行结果效果如下图:

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
执行后便能还原库(我是拿这三个库做测试,截的图可能没什么变化,你们可以尝试下)

当然还原的过程可能会遇到一些问题,比如:
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
数据是无价的,对数据库操作时备份是必须的。
数据是无价的,对数据库操作时备份是必须的。
数据是无价的,对数据库操作时备份是必须的。(重要的事说三遍)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了如何用注解编写创建表的SQL语句,感兴趣的小伙伴们可以参考一下
小编新安装了sqlserver用navicat进行连接时出现一系列问题,不知道该怎么解决,小编小编给大家分享一篇教程关于Navicat连接SQL Server数据:报错08001-命名管道提供程序的问题,感兴趣的朋友一起看看吧
这篇文章主要介绍了SQLServer存储过程中事务的使用方法,简短的代码带大家更好的学习使用SQLServer存储过程中事务,感兴趣的小伙伴们可以参考一下
这篇文章主要是SQl语句的练习,本文教大家如何用SQL查询语句求出用户的连续登陆天数,有需要的朋友可以借鉴参考下,希望能够有所帮助
这篇文章主要介绍了SQL SERVER提交事务回滚机制,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008