每次通过 Management Studio 的界面操作备份或还原数据库,对于单个数据库还好,要是一次要做多个。那就还是用脚本快些,下面有两段脚本分享一下。

====================================================================
备份
====================================================================

生成备份脚本的脚本

d:\databak\为存在目录

SELECT 'BACKUP DATABASE ' + name + ' TO  DISK = N''d:\databak\' + name + '.bak''
WITH NOFORMAT, NOINIT,
NAME = N''' + name + '-完整 数据库 备份'',
SKIP, NOREWIND, NOUNLOAD, STATS = 10'
FROM sys.databases
where database_id>4 -- 跳过系统库
order by database_id
go

执行后生成如下脚本,复制如下脚本将正式执行备份:

BACKUP DATABASE
DataBaseName TO DISK = N'd:\databak\DataBaseName.bak'
WITH NOFORMAT,
NOINIT,
NAME = N'DataBaseName-完整 数据库 备份',
SKIP,
NOREWIND,
NOUNLOAD,
STATS = 10

====================================================================
还原
====================================================================

生成还原脚本的脚本

请先填写参数表:

@源路径

@目标路径

数据库名列表

@是否执行(是否直接执行还原)

@是否删除(是否删除数据库及关闭连接,慎用!!!)

/**
Author:HRZhao;
Date:2015-03-24
Version: V3 2019-08-26
*/ USE master
GO
SET nocount on
declare @srcPath varchar(500);
declare @tarPath varchar(500);
declare @是否执行 int;
declare @是否删除 int; CREATE TABLE #DATABASE(
id int identity(1,1),
name varchar(255)
)
--参数表--可同时多个库-------------------------------------------
INSERT INTO #DATABASE(name)
SELECT 'DataBaseName0'
--UNION ALL SELECT 'DataBaseName1'
--UNION ALL SELECT 'DataBaseName2'
--UNION ALL SELECT 'DataBaseName3'
--UNION ALL SELECT 'DataBaseName4'
---路径----------------------------------------------
SET @是否执行 = 1;--是否直接执行,若否,只打印还原语句
SET @是否删除 = 0;--是否删除数据库及关闭连接 /*** 慎用!!! ***/
SET @srcPath = 'G:\DBDATA\';
SET @tarPath = 'G:\SQLData\SQL00\';
--参数表End--------------------------------------------------- DECLARE @newLine varchar(500);
SET @newLine = CHAR(10) --+ CHAR(13);
DECLARE @dbName varchar(500);
DECLARE @fName varchar(500); PRINT ' USE master'+@newLine+' GO';
-------------WHILE---------------------
DECLARE @I INT;
SELECT @I = MAX(id) FROM #DATABASE;
WHILE @I IS NOT NULL
BEGIN
SELECT @dbName = name FROM #DATABASE WHERE id = @I;
IF ISNULL(@dbName,'')<>''
BEGIN
CREATE TABLE #TABLE(
LogicalName VARCHAR(255),
PhysicalName VARCHAR(255),
Type VARCHAR(255),
FileGroupName VARCHAR(255),
Size BIGINT,--NUMERIC
MaxSize BIGINT,--NUMERIC
FileId BIGINT,
CreateLSN BIGINT,
DropLSN BIGINT,
UniqueId VARCHAR(255),
ReadOnlyLSN BIGINT,
ReadWriteLSN BIGINT,
BackupSizeInBytes BIGINT,
SourceBlockSize BIGINT,
FileGroupId BIGINT,
LogGroupGUID VARCHAR(255),--
DifferentialBaseLSN VARCHAR(255),
DifferentialBaseGUID VARCHAR(255),
IsReadOnly BIGINT,
IsPresent BIGINT,
TDEThumbprint VARCHAR(255)
) declare @sql varchar(1000);
set @sql = 'RESTORE FILELISTONLY FROM DISK = N'''+@srcPath+@dbName+'.bak'''
insert into #TABLE exec (@sql) declare @logicalName_d varchar(500);
declare @logicalName_l varchar(500);
--set @logicalName_d = 'MTNOH_AAA_Resource';
--set @logicalName_l = 'MTNOH_AAA_Resource_log';
SELECT @logicalName_d = LogicalName FROM #TABLE WHERE [Type] = 'D';
SELECT @logicalName_l = LogicalName FROM #TABLE WHERE [Type] = 'L'; set @logicalName_d = case when @logicalName_d IS NULL THEN @dbName ELSE @logicalName_d END;
set @logicalName_l = case when @logicalName_l IS NULL THEN @dbName+'_log' ELSE @logicalName_l END;
set @fName = @dbName + '.bak'; create table #temp(
dbName varchar(500),
fName varchar(500),
srcPath varchar(500),
tarPath varchar(500)
) DECLARE @RESULT varchar(8000);
INSERT INTO #temp select @dbName,@fName,@srcPath,@tarPath; --删除进程
IF @是否删除 = 1
BEGIN
DECLARE @delSql nvarchar(max)
DECLARE tb cursor local for
SELECT s=' KILL '+cast(spid as varchar) +';'
FROM master..sysprocesses
WHERE dbid=db_id(@dbname) SET @delSql = NULL; open tb
fetch next from tb into @delSql
while @@fetch_status=0
begin
PRINT @delSql
IF @是否执行 = 1
EXEC(@delSql);
fetch next from tb into @delSql
end
close tb
deallocate tb IF EXISTS (SELECT name FROM sys.databases WHERE name = @dbname)
BEGIN
SET @delSql = ' DROP DATABASE ['+@dbname+']';
PRINT @delSql;
IF @是否执行 = 1
EXEC(@delSql)
END
END SELECT @RESULT = @newLine
--+ CASE WHEN @是否执行 = 1 THEN '' ELSE 'USE master ' END
+ @newLine + ' RESTORE DATABASE ' +@dbName
+ @newLine +' FROM DISK = '''+@srcPath+fName+''''
+ @newLine + ' WITH MOVE '''+@logicalName_d+''' TO '''+tarPath+dbName+'.mdf'','
+ @newLine + ' MOVE '''+@logicalName_l+''' TO '''+tarPath+dbName+'_log.ldf'','
+ @newLine + ' STATS = 10, REPLACE '
+ @newLine + CASE WHEN @是否执行 = 1 THEN '' ELSE ' GO ' END
from #temp; PRINT @RESULT;
IF @是否执行 = 1
EXEC(@RESULT);
TRUNCATE TABLE #temp;
DROP TABLE #temp;
TRUNCATE TABLE #TABLE;
drop table #TABLE;
END
DELETE #DATABASE WHERE id = @I;
SELECT @I = MAX(id) FROM #DATABASE;
END TRUNCATE TABLE #DATABASE
DROP TABLE #DATABASE;
SET nocount OFF
GO

MSSQL数库备份与还原脚本(多个库时很方便)的更多相关文章

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

    前言 最近公司服务器到期,需要进行数据迁移,而数据库属于多而繁琐,通过图形化界面一个一个备份所需时间成本很大,所以想着写一个sql脚本来执行. 开始 数据库单个备份 数据库批量备份 数据库还原 数据库 ...

  2. MongoDB整库备份与还原以及单个collection备份、恢复方法

    mongodb数据库维护离不开必要的备份.恢复操作,而且一般不会出错,所以我们在使用的时候大部分时候使用备份和恢复操作就可以了   mongodump.exe备份的原理是通过一次查询获取当前服务器快照 ...

  3. MongoDB整库备份与还原以及单个collection备份、恢复

    备份前的检查> show dbsMyDB 0.0625GBadmin (empty)bruce 0.0625GBlocal (empty)test 0.0625GB> use MyDBsw ...

  4. SQL SERVER完整、差异和事务日志备份及还原(脚本和GUI实现) [原创]

    一.完整备份.差异备份和事务日志备份的脚本 --完整备份数据库 BACKUP DATABASE Test_Bak TO DISK = 'E:\20150609_75\bak\Test_bak_full ...

  5. MSSQL的表备份成INSERT脚本的存储过程

    USE [SupplyChain]GO/****** Object: StoredProcedure [dbo].[ExpData] Script Date: 2015-12-18 10:23:08 ...

  6. sharepoint 备份和还原site脚本

    <个人积累,转载请注明出处> Backup-SPSite "http://www.abc.com/sites/TestWorkflowCenter" -path C:\ ...

  7. MySQL数据备份与还原(mysqldump)

    一 mysqldump指令实现数据备份.mysql指令实现数据还原 经常有朋友问我,DBA到底是做什么的,百科上说:数据库管理员(Database Administrator,简称DBA),是从事管理 ...

  8. Neo4j数据进行备份、还原

    一.neo4j备份方式 neo4j数据库的备份还原分为两种: offline 和 online. Offline backup - dump Dump a database into a single ...

  9. day 50 MySQL数据备份与还原(mysqldump)

      MySQL数据备份与还原(mysqldump)   一 mysqldump指令实现数据备份.mysql指令实现数据还原 经常有朋友问我,DBA到底是做什么的,百科上说:数据库管理员(Databas ...

随机推荐

  1. C# 分析搜索引擎url 得到搜索关键字

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. 短路与&&和按位与&的区别

    条件1&&条件2,短路与&&如果条件1为假则不判断条件2:而按位与&如果条件1为假仍旧判断条件2

  3. 图片缩放JavaScript原生实现

    function scalImg(aLi){ for(var i=0,l=aLi.length;i<l;i++){ var oImg = new Image(), oLi = aLi[i], i ...

  4. 在win7下php查询数据库, 连接被重置

    解决方法一 将 php5 目录下的libmysql.dll拷贝至 windows/system32和apache/bin下 解决方法二 在apache/conf/httpd.conf文件中添加 Loa ...

  5. KMP模式匹配 三(弦)

    原文请訪问我的博客:xiaoshig.sinaapp.com KMP模式匹配 三(串) Time Limit:1000MS     Memory Limit:131072KB     64bit IO ...

  6. 动画原理——绘制正弦函数&环绕运动&椭圆运动

    书籍名称:HTML5-Animation-with-JavaScript 书籍源码:https://github.com/lamberta/html5-animation  1.正弦函数.x位置递增, ...

  7. SSRS(rdl报表)分页显示表头和冻结表头

    <TablixRowHierarchy>          <TablixMembers>            <TablixMember>            ...

  8. [iOS]手把手教你实现微信小视频

    本文个人原创,转载请注明出处,谢谢. 前段时间项目要求需要在聊天模块中加入类似微信的小视频功能,这边博客主要是为了总结遇到的问题和解决方法,希望能够对有同样需求的朋友有所帮助. 效果预览: 这里先罗列 ...

  9. doGet与doPost的区别

    转自:http://blog.csdn.net/luoweifu/article/details/7865243   目录(?)[-] 不同点一 不同点二 输入表单inputhtml Serlvlet ...

  10. 提示constructor无法location的原因

    1.缺少对应属性的set方法 2.缺少确实没有对应的方法 3.对应的构造方法中参数类型不匹配 4.java对象不会在寻找构造函数时执行数据类型的强制类型转换,没有对应的类型就返回异常,不会自动强制转换 ...