每次通过 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. #include <mutex>

    多线程初级 #include <iostream> #include <thread> #include <windows.h> #include <mute ...

  2. Debug, Release区别

    Debug, Release区别 Debug附加了很多调试信息,主要用于调试,所以文件大 Release就是经过优化的版本,去除了调试信息,进行了代码优化,所以文件较小,同时速度要快于Debug De ...

  3. instance variables may not be placed in categories

    Avoid Properties in Categories Objective-C分类中是不允许增加成员变量的(Instance variables may not be placed in cat ...

  4. UI标签库专题十三:JEECG智能开发平台 ckfinder(ckfinder插件标签)

    1. ckfinder(ckfinder插件标签) 1.1. 參数 属性名 类型 描写叙述 是否必须 默认值 name string 属性名称 是 null value string 默认值 否 nu ...

  5. Body joints angle using Kinect

    http://stackoverflow.com/questions/12608734/body-joints-angle-using-kinect-checking-time-interval?rq ...

  6. Hibernate 报错:this project is not a myeclipse hibernate project . assuming hibernate 3 cap

    问题描述:  web 项目中 打开 hibernate.cfg.xml 文件时 提示:The project is not a myEclipse hibernate project. 并且:在 db ...

  7. DML

    DML(Data Manipulation Language 数据操控语言),使用insert.update.delete进行数据库的操作.DML一:插入语句 标准的插入语句 insert into ...

  8. javascript高级知识点——指定上下文实现

    代码信息来自于http://ejohn.org/apps/learn/. 当我们将一个对象的点击事件绑定到一个事件触发元素时会发生什么? <ul id="results"&g ...

  9. C++ 数据结构学习一(顺序表)

    //SequentialList.h 顺序表模板类 #ifndef SEQUENTIAL_LIST_HXX#define SEQUENTIAL_LIST_HXX using std::cout; us ...

  10. 立体像对DEM提取

    版权声明:本教程涉及到的数据仅练习使用,禁止用于商业用途. 目录 1.概述 2.详细操作步骤 第一步:输入立体像对 第二步:定义地面控制点 第三步:定义连接点 第四步:设定DEM提取参数 第五步:输出 ...