MSSQL数库备份与还原脚本(多个库时很方便)
每次通过 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数库备份与还原脚本(多个库时很方便)的更多相关文章
- SQL Server2019数据库备份与还原脚本,数据库可批量备份
前言 最近公司服务器到期,需要进行数据迁移,而数据库属于多而繁琐,通过图形化界面一个一个备份所需时间成本很大,所以想着写一个sql脚本来执行. 开始 数据库单个备份 数据库批量备份 数据库还原 数据库 ...
- MongoDB整库备份与还原以及单个collection备份、恢复方法
mongodb数据库维护离不开必要的备份.恢复操作,而且一般不会出错,所以我们在使用的时候大部分时候使用备份和恢复操作就可以了 mongodump.exe备份的原理是通过一次查询获取当前服务器快照 ...
- MongoDB整库备份与还原以及单个collection备份、恢复
备份前的检查> show dbsMyDB 0.0625GBadmin (empty)bruce 0.0625GBlocal (empty)test 0.0625GB> use MyDBsw ...
- SQL SERVER完整、差异和事务日志备份及还原(脚本和GUI实现) [原创]
一.完整备份.差异备份和事务日志备份的脚本 --完整备份数据库 BACKUP DATABASE Test_Bak TO DISK = 'E:\20150609_75\bak\Test_bak_full ...
- MSSQL的表备份成INSERT脚本的存储过程
USE [SupplyChain]GO/****** Object: StoredProcedure [dbo].[ExpData] Script Date: 2015-12-18 10:23:08 ...
- sharepoint 备份和还原site脚本
<个人积累,转载请注明出处> Backup-SPSite "http://www.abc.com/sites/TestWorkflowCenter" -path C:\ ...
- MySQL数据备份与还原(mysqldump)
一 mysqldump指令实现数据备份.mysql指令实现数据还原 经常有朋友问我,DBA到底是做什么的,百科上说:数据库管理员(Database Administrator,简称DBA),是从事管理 ...
- Neo4j数据进行备份、还原
一.neo4j备份方式 neo4j数据库的备份还原分为两种: offline 和 online. Offline backup - dump Dump a database into a single ...
- day 50 MySQL数据备份与还原(mysqldump)
MySQL数据备份与还原(mysqldump) 一 mysqldump指令实现数据备份.mysql指令实现数据还原 经常有朋友问我,DBA到底是做什么的,百科上说:数据库管理员(Databas ...
随机推荐
- [11-1] adaboost DTree
main idea:用与$u_t$成正比的概率sampling生成的数据集$\widetilde{D}$训练DTree:用整个数据集$D$计算weighted$\epsilon_n$,计算$g_t$的 ...
- poj1338
Ugly Numbers Time Limit ...
- javascript数组去重算法-----3
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在SQL Server 2008 中使用SQL脚本创建登录用户并授权
到处都使用超级用户sa显然是不安全的,因此有创建用户并让其只能访问某个数据库的必要.当然可以使用SQL Server自带的图形界面向导,但是太难用用了!有时候代码比较直接,比如这里: --使用已经创建 ...
- 深入理解Java虚拟机:OutOfMemory实战
在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM)异常的可能,本节将通过若干实例来验证异常发生的场景.并且会初步介绍 ...
- Matlab基础知识
一.常用命令:普通的如cd.ls和linux下一样 clc:清除工作窗口中的所有显示内容 clf:清除图形窗口 whos:列出当前工作空间中所有变量,以及它们的名字.尺寸(比如一个矩阵或数组的行列维数 ...
- leetcode Search Insert Position Python
#Given a sorted array and a target value, return the index if the target is found. If #not, return t ...
- Linux学习之tail命令
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...
- Linux学习之route
Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...
- 幻世(OurDream)2D图形引擎易语言汉化版更新提示
幻世引擎的易语言汉化专版到目前为止已经累积了多个BUG,其中多个BUG是影响引擎功能使用的问题,我将会在近期发布修复所有问题的更新版本(此更新版本同时也将会支持最新的对加入的粒子系统的支持),敬请各位 ...