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 ...
随机推荐
- poj3094
Quicksum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13523 Accepted: 9407 Descrip ...
- P酱的冒险旅途(思维)
P酱的冒险旅途 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- SharePoint 计时器服务无法启动
摘要: Microsoft SharePoint Server 2010 使用 Windows SharePoint Services 定时 V4 (SPTimerV4) 服务运行大多数系统任务.服务 ...
- android webview点击返回键返回上一级activity
android webview点击返回键返回上一个activity @Override public boolean onKeyDown(int keyCode, KeyEvent event) { ...
- SqlServer2008 数据库可疑
今天遇到数据库可疑,以前都是直接删了还原,这次没有最新的备份文件,一起看看脚本怎么解决 --最好一句句执行,方便看到错误 USE MASTER GO --开启数据库选项"允许更新" ...
- T-SQL查询:语句执行顺序
读书笔记:<Microsoft SQL Server 2008技术内幕:T-SQL查询> =============== T-SQL查询的执行顺序 =============== === ...
- Virtualbox 启动虚拟机报错以及扩展、显卡驱动安装
一.Virtualbox虚拟机启动报错,如图 预先估计是BIOS中的cpu Virtualtion虚拟化支持是disable,结果一看是enable. 接下来只好Google,找到了这么一个帖子:ht ...
- MySQL-python 1.2.3 for Windows and Python 2.7, 32bit and 64bit versions -(亲测可用)
MySQL-python 1.2.3 for Windows and Python 2.7, 32bit and 64bit versions - See more at: http://www.co ...
- 微信sdk (1)
<?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); ...
- BZOJ 2726: [SDOI2012]任务安排( dp + cdq分治 )
考虑每批任务对后面任务都有贡献, dp(i) = min( dp(j) + F(i) * (T(i) - T(j) + S) ) (i < j <= N) F, T均为后缀和. 与j有关 ...