每次通过 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. item Collaborative Filtering

    算法步骤: 1.计算物品相似度 2.根据用户购买记录,推荐相似物品   物品相似度定义: A.    购买i的人里面,有多少比例购买了j    缺点(推荐系统需要能挖掘长尾信息,此处若j很热门,则w趋 ...

  2. #include <QPushButton>

    类QPushButton 命令按钮 #include "mainwindow.h" #include <QApplication> int main(int argc, ...

  3. java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**

    原文出处:http://cmsblogs.com/?p=1412 在上篇博文(java中文乱码解决之道(一)—–认识字符集)中,LZ简单介绍了主流的字符编码,对各种编码都是点到为止,以下LZ将详细阐述 ...

  4. mongodb 2.6.6 在window10下的安装

    首先感谢波仔的知道,其次感叹下WIN10的牛叉,兼容性还不错. 首先,下载mongodb 2.6.6 安装包,可惜,官网太慢,还得注册.不过还好,我是个好人:http://pan.baidu.com/ ...

  5. bootstrap注意事项(一)

    1.移动设备优先 移动设备优先是 Bootstrap 3 的最显著的变化. 在之前的 Bootstrap 版本中(直到 2.x),您需要手动引用另一个 CSS,才能让整个项目友好的支持移动设备. 现在 ...

  6. 使用meaven打包过程中遇到的一些问题

    开始使用如下代码进行打包 <build> <!-- mvn assembly:assembly -Dmaven.test.skip=true --> <plugins&g ...

  7. JS 精粹(三)

    (一)基本问题 JS的数据类型(不是数据结构)分:简单数据类型(undefined\null\boolean\string\number\symbol).复杂数据类型(object). 对象是可变的键 ...

  8. 内存管理之三——Cocos2d-x学习历程(七)

    1.容器---2.0版本 Cocos2d-x引擎为我们提供了CCArray.CCDictionary等Objective-C风格的容器.使用Cocos2d-x容器的一个重要原因在于Cocos2d-x的 ...

  9. mysql--外键(froeign key)

    如果一个实体的某个字段指向另一个实体的主键,就称为外键被指向的实体,称之为主实体(主表),也叫父实体(父表).负责指向的实体,称之为从实体(从表),也叫子实体(子表) 作用:用于约束处于关系内的实体增 ...

  10. Android Fragment StartActivityForresult调用实例

    fragment里面的onActivityResult 怎样才能被调用,很简单,就一句话, startActivityForResult(intent, getActivity().RESULT_FI ...