SQL Server2019数据库备份与还原脚本,数据库可批量备份


Posted in SQL Server onNovember 20, 2021

前言最近公司服务器到期,需要进行数据迁移,而数据库属于多而繁琐,通过图形化界面一个一个备份所需时间成本很大,所以想着写一个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文件到指定文件夹中,如图
SQL Server2019数据库备份与还原脚本,数据库可批量备份

2.数据库批量备份(时间有点长,请等待)

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\'

执行结果效果如下图:
SQL Server2019数据库备份与还原脚本,数据库可批量备份

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

执行后便能还原库(我是拿这三个库做测试,截的图可能没什么变化,你们可以尝试下)
SQL Server2019数据库备份与还原脚本,数据库可批量备份

4.数据库还原报错问题记录

当然还原的过程可能会遇到一些问题,比如:

1.版本不一样
2.SQL Sql 逻辑文件'XXXXX ' 不是数据库'YYY'的一部分。请使用 RESTORE FILELISTONLY 来列出逻辑文件名。

版本的话我试过了,高版本可以向下兼容,但是低版本不能向上兼容,可以统一版本来解决(如有更好的解决方案欢迎打扰)
第二个问题呢就是脚本中‘MOVE' 他只能跟逻辑名,而有些数据库的逻辑名并不是数据库名称,所以需要替换一下,

下面是查询数据库逻辑名的sql语句:
USE MASTER
restore filelistonly from disk='D:\sql201database\Sence.bak'--根据自己的需求要变更路径

如图,
SQL Server2019数据库备份与还原脚本,数据库可批量备份

对于这些逻辑名与数据库名称不一致的情况可以单独拿出来重新执行一下即可:

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数据库备份与还原脚本,数据库可批量备份内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

SQL Server 相关文章推荐
2021-4-5课程——SQL Server查询【3】
Apr 05 SQL Server
SqlServer 垂直分表(减少程序改动)
Apr 16 SQL Server
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
Jun 30 SQL Server
sql通过日期判断年龄函数的示例代码
Jul 16 SQL Server
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
Sep 04 SQL Server
SQL SERVER实现连接与合并查询
Feb 24 SQL Server
Sql Server之数据类型详解
Feb 28 SQL Server
MySQL 中如何归档数据的实现方法
Mar 16 SQL Server
SQL Server实现分页方法介绍
Mar 16 SQL Server
SQL Server数据库基本概念、组成、常用对象与约束
Mar 20 SQL Server
SQL Server内存机制浅探
Apr 06 SQL Server
MSSQL基本语法操作
Apr 11 SQL Server
SQL中的三种去重方法小结
Nov 01 #SQL Server
SQL Server表分区删除详情
Spark SQL 2.4.8 操作 Dataframe的两种方式
Windows环境下实现批量执行Sql文件
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
Sep 04 #SQL Server
sql server删除前1000行数据的方法实例
Aug 30 #SQL Server
SQLServer之常用函数总结详解
Aug 30 #SQL Server
You might like
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
给海归自荐信的建议
2013/12/13 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
农民致富事迹材料
2014/01/23 职场文书
学校安全责任书范本
2014/07/23 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书