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 ...
随机推荐
- javascript第三课underfind和类型获取
1.underfind一般发生于变量定义之后未赋值,因此变量的值就为underfind 2.var obj=new object(); 此时使用obj点,可以获取到obj对象的一些方法,使用alert ...
- MySQL Troubleshoting:Waiting on query cache mutex
今天被MySQL Query Cache 炕了.线上大量 Waiting on query cache mutex 那么什么是 Query Cache? QC 缓存的是整个SELECT的结果集.而非执 ...
- cocos2D(九)---- CCAction
之前介绍CCNode的时候说过,动作是指在特定时间内完毕移动.缩放.旋转等操作的行为,节点能够通过执行动作来实现动画效果,这里的动作就是指CCAction对象,它有非常多的子类,每一个子类都封装了不同 ...
- Java面试题之Struts优缺点
优点: 1. 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现. 2.有丰富的tag可以用 ,Struts的标记库(Taglib),如能灵活动用,则能大大提高开发效率 3. 页面导航 使系统的脉 ...
- SQL事务与并发
1.Transaction(事务)是什么: 事务是作为单一工作单元而执行的一系列操作.包括增删查改. 2.事务的种类: 事务分为显示事务和隐式事务: 隐式事务:就是平常我们使用每一条sql 语句就是一 ...
- JavaScript的一些小用法
1.if问题: var a="this test"; if (a == "this test") //这样写的时候执行不下去了,不知为什么. 修改: var a ...
- css黑魔法
多行文本溢出显示省略号(...)的方法 p { overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-li ...
- ORA-32001: 已请求写入 SPFILE, 但是在启动时未指定 SPFILE
SQL> alter system set smtp_out_server='smtp.126.com' scope=both;alter system set smtp_out_server= ...
- 项目中经常用到的reset.css文件
html,body{width:100%; height: auto;} *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box- ...
- Windows Server 2008 Enterprise使用12G内存
开启PAE选项,用以下命令解决这个问题: 1.开始运行cmd2.输入 BCDEdit /set PAE forceenable 后回车3.重起系统显示12GB内存,一切正常