每次通过 Management Studio 的界面操作备份或还原数据库,对于单个数据库还好,要是一次要做多个。那就还是用脚本快些,下面有两段脚本分享一下。

====================================================================
备份
====================================================================

生成备份脚本的脚本

d:\databak\为存在目录

  1. SELECT 'BACKUP DATABASE ' + name + ' TO DISK = N''d:\databak\' + name + '.bak''
  2. WITH NOFORMAT, NOINIT,
  3. NAME = N''' + name + '-完整 数据库 备份'',
  4. SKIP, NOREWIND, NOUNLOAD, STATS = 10'
  5. FROM sys.databases
  6. where database_id>4 -- 跳过系统库
  7. order by database_id
  8. go

执行后生成如下脚本,复制如下脚本将正式执行备份:

  1. BACKUP DATABASE
  2. DataBaseName TO DISK = N'd:\databak\DataBaseName.bak'
  3. WITH NOFORMAT,
  4. NOINIT,
  5. NAME = N'DataBaseName-完整 数据库 备份',
  6. SKIP,
  7. NOREWIND,
  8. NOUNLOAD,
  9. STATS = 10

====================================================================
还原
====================================================================

生成还原脚本的脚本

请先填写参数表:

@源路径

@目标路径

数据库名列表

@是否执行(是否直接执行还原)

@是否删除(是否删除数据库及关闭连接,慎用!!!)

  1. /**
  2. Author:HRZhao;
  3. Date:2015-03-24
  4. Version: V3 2019-08-26
  5. */
  6.  
  7. USE master
  8. GO
  9. SET nocount on
  10. declare @srcPath varchar(500);
  11. declare @tarPath varchar(500);
  12. declare @是否执行 int;
  13. declare @是否删除 int;
  14.  
  15. CREATE TABLE #DATABASE(
  16. id int identity(1,1),
  17. name varchar(255)
  18. )
  19. --参数表--可同时多个库-------------------------------------------
  20. INSERT INTO #DATABASE(name)
  21. SELECT 'DataBaseName0'
  22. --UNION ALL SELECT 'DataBaseName1'
  23. --UNION ALL SELECT 'DataBaseName2'
  24. --UNION ALL SELECT 'DataBaseName3'
  25. --UNION ALL SELECT 'DataBaseName4'
  26. ---路径----------------------------------------------
  27. SET @是否执行 = 1;--是否直接执行,若否,只打印还原语句
  28. SET @是否删除 = 0;--是否删除数据库及关闭连接 /*** 慎用!!! ***/
  29. SET @srcPath = 'G:\DBDATA\';
  30. SET @tarPath = 'G:\SQLData\SQL00\';
  31. --参数表End---------------------------------------------------
  32.  
  33. DECLARE @newLine varchar(500);
  34. SET @newLine = CHAR(10) --+ CHAR(13);
  35. DECLARE @dbName varchar(500);
  36. DECLARE @fName varchar(500);
  37.  
  38. PRINT ' USE master'+@newLine+' GO';
  39. -------------WHILE---------------------
  40. DECLARE @I INT;
  41. SELECT @I = MAX(id) FROM #DATABASE;
  42. WHILE @I IS NOT NULL
  43. BEGIN
  44. SELECT @dbName = name FROM #DATABASE WHERE id = @I;
  45. IF ISNULL(@dbName,'')<>''
  46. BEGIN
  47. CREATE TABLE #TABLE(
  48. LogicalName VARCHAR(255),
  49. PhysicalName VARCHAR(255),
  50. Type VARCHAR(255),
  51. FileGroupName VARCHAR(255),
  52. Size BIGINT,--NUMERIC
  53. MaxSize BIGINT,--NUMERIC
  54. FileId BIGINT,
  55. CreateLSN BIGINT,
  56. DropLSN BIGINT,
  57. UniqueId VARCHAR(255),
  58. ReadOnlyLSN BIGINT,
  59. ReadWriteLSN BIGINT,
  60. BackupSizeInBytes BIGINT,
  61. SourceBlockSize BIGINT,
  62. FileGroupId BIGINT,
  63. LogGroupGUID VARCHAR(255),--
  64. DifferentialBaseLSN VARCHAR(255),
  65. DifferentialBaseGUID VARCHAR(255),
  66. IsReadOnly BIGINT,
  67. IsPresent BIGINT,
  68. TDEThumbprint VARCHAR(255)
  69. )
  70.  
  71. declare @sql varchar(1000);
  72. set @sql = 'RESTORE FILELISTONLY FROM DISK = N'''+@srcPath+@dbName+'.bak'''
  73. insert into #TABLE exec (@sql)
  74.  
  75. declare @logicalName_d varchar(500);
  76. declare @logicalName_l varchar(500);
  77. --set @logicalName_d = 'MTNOH_AAA_Resource';
  78. --set @logicalName_l = 'MTNOH_AAA_Resource_log';
  79. SELECT @logicalName_d = LogicalName FROM #TABLE WHERE [Type] = 'D';
  80. SELECT @logicalName_l = LogicalName FROM #TABLE WHERE [Type] = 'L';
  81.  
  82. set @logicalName_d = case when @logicalName_d IS NULL THEN @dbName ELSE @logicalName_d END;
  83. set @logicalName_l = case when @logicalName_l IS NULL THEN @dbName+'_log' ELSE @logicalName_l END;
  84. set @fName = @dbName + '.bak';
  85.  
  86. create table #temp(
  87. dbName varchar(500),
  88. fName varchar(500),
  89. srcPath varchar(500),
  90. tarPath varchar(500)
  91. )
  92.  
  93. DECLARE @RESULT varchar(8000);
  94. INSERT INTO #temp select @dbName,@fName,@srcPath,@tarPath;
  95.  
  96. --删除进程
  97. IF @是否删除 = 1
  98. BEGIN
  99. DECLARE @delSql nvarchar(max)
  100. DECLARE tb cursor local for
  101. SELECT s=' KILL '+cast(spid as varchar) +';'
  102. FROM master..sysprocesses
  103. WHERE dbid=db_id(@dbname)
  104.  
  105. SET @delSql = NULL;
  106.  
  107. open tb
  108. fetch next from tb into @delSql
  109. while @@fetch_status=0
  110. begin
  111. PRINT @delSql
  112. IF @是否执行 = 1
  113. EXEC(@delSql);
  114. fetch next from tb into @delSql
  115. end
  116. close tb
  117. deallocate tb
  118.  
  119. IF EXISTS (SELECT name FROM sys.databases WHERE name = @dbname)
  120. BEGIN
  121. SET @delSql = ' DROP DATABASE ['+@dbname+']';
  122. PRINT @delSql;
  123. IF @是否执行 = 1
  124. EXEC(@delSql)
  125. END
  126. END
  127.  
  128. SELECT @RESULT = @newLine
  129. --+ CASE WHEN @是否执行 = 1 THEN '' ELSE 'USE master ' END
  130. + @newLine + ' RESTORE DATABASE ' +@dbName
  131. + @newLine +' FROM DISK = '''+@srcPath+fName+''''
  132. + @newLine + ' WITH MOVE '''+@logicalName_d+''' TO '''+tarPath+dbName+'.mdf'','
  133. + @newLine + ' MOVE '''+@logicalName_l+''' TO '''+tarPath+dbName+'_log.ldf'','
  134. + @newLine + ' STATS = 10, REPLACE '
  135. + @newLine + CASE WHEN @是否执行 = 1 THEN '' ELSE ' GO ' END
  136. from #temp;
  137.  
  138. PRINT @RESULT;
  139. IF @是否执行 = 1
  140. EXEC(@RESULT);
  141. TRUNCATE TABLE #temp;
  142. DROP TABLE #temp;
  143. TRUNCATE TABLE #TABLE;
  144. drop table #TABLE;
  145. END
  146. DELETE #DATABASE WHERE id = @I;
  147. SELECT @I = MAX(id) FROM #DATABASE;
  148. END
  149.  
  150. TRUNCATE TABLE #DATABASE
  151. DROP TABLE #DATABASE;
  152. SET nocount OFF
  153. 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. javascript第三课underfind和类型获取

    1.underfind一般发生于变量定义之后未赋值,因此变量的值就为underfind 2.var obj=new object(); 此时使用obj点,可以获取到obj对象的一些方法,使用alert ...

  2. MySQL Troubleshoting:Waiting on query cache mutex

    今天被MySQL Query Cache 炕了.线上大量 Waiting on query cache mutex 那么什么是 Query Cache? QC 缓存的是整个SELECT的结果集.而非执 ...

  3. cocos2D(九)---- CCAction

    之前介绍CCNode的时候说过,动作是指在特定时间内完毕移动.缩放.旋转等操作的行为,节点能够通过执行动作来实现动画效果,这里的动作就是指CCAction对象,它有非常多的子类,每一个子类都封装了不同 ...

  4. Java面试题之Struts优缺点

    优点: 1. 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现. 2.有丰富的tag可以用 ,Struts的标记库(Taglib),如能灵活动用,则能大大提高开发效率 3. 页面导航 使系统的脉 ...

  5. SQL事务与并发

    1.Transaction(事务)是什么: 事务是作为单一工作单元而执行的一系列操作.包括增删查改. 2.事务的种类: 事务分为显示事务和隐式事务: 隐式事务:就是平常我们使用每一条sql 语句就是一 ...

  6. JavaScript的一些小用法

    1.if问题: var a="this test"; if (a == "this test") //这样写的时候执行不下去了,不知为什么. 修改: var a ...

  7. css黑魔法

    多行文本溢出显示省略号(...)的方法 p { overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-li ...

  8. ORA-32001: 已请求写入 SPFILE, 但是在启动时未指定 SPFILE

    SQL> alter system set smtp_out_server='smtp.126.com' scope=both;alter system set smtp_out_server= ...

  9. 项目中经常用到的reset.css文件

    html,body{width:100%; height: auto;} *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box- ...

  10. Windows Server 2008 Enterprise使用12G内存

    开启PAE选项,用以下命令解决这个问题: 1.开始运行cmd2.输入 BCDEdit /set PAE forceenable 后回车3.重起系统显示12GB内存,一切正常