遍历文件夹还原数据库SQL语句


/***** 
遍历文件夹进行数据库还原
*******/---需要开启xp_cmdshell 如已经开启 可以略过
/***** Step 1 开启 xp_cmdshell 
Use Master
GO
EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO
EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO
*******/IF OBJECT_ID('tempdb..#files') IS NULL
BEGIN--DROP TABLE  #filesCREATE TABLE #files(dbname     VARCHAR(200) NULL,dbsql      VARCHAR(7000) NULL)
ENDDELETE #files IF OBJECT_ID('tempdb..#filelistinfo') IS NOT NULLDROP TABLE #filelistinfoCREATE TABLE #filelistinfo
(LogicalName              NVARCHAR(128) NULL,PhysicalName             NVARCHAR(260) NULL,TYPE                     CHAR(1) NULL,FileGroupName            NVARCHAR(128) NULL,FileSize                 BIGINT NULL,MAXSIZE                  BIGINT NULL,FileId                   BIGINT,CreateLSN                NUMERIC(25, 0),DropLSN                  NUMERIC(25, 0) NULL,UniqueID                 UNIQUEIDENTIFIER,ReadOnlyLSN              NUMERIC(25, 0) NULL,ReadWriteLSN             NUMERIC(25, 0) NULL,BackupSizeInBytes        BIGINT,SourceBlockSize          INT,FileGroupID              INT,LogGroupGUID             UNIQUEIDENTIFIER NULL,DifferentialBaseLSN      NUMERIC(25, 0) NULL,DifferentialBaseGUID     UNIQUEIDENTIFIER,IsReadOnly               BIT,IsPresent                BIT,TDEThumbprint            BIT
)DECLARE @path VARCHAR(500)
DECLARE @pathData VARCHAR(500)
DECLARE @sql VARCHAR(8000)
DECLARE @bakName VARCHAR(500)
DECLARE @LogicalNameDat VARCHAR(500)
DECLARE @LogicalNameLog VARCHAR(500)
DECLARE @tempCommand VARCHAR(800) SET @path = 'E:\DataBak'    ---指定要处理的文件夹
SET @sql = 'dir ' + @path + ' /b'
SET @pathData = 'D:\SqlDataBase' ----数据库还原到的目录
SET @bakName = ''  -----统一的备份名称(不要加.bak),比如固定日期或者可变名,根据自己的路径规则定--获取文件名称,存放在#files
INSERT #files(dbname)
EXEC MASTER..xp_cmdshell @sql--从#files表遍历处理据库数信息,根据备份文件获取数据逻辑名称DECLARE @dbname VARCHAR(50)
DECLARE curs CURSOR 
FOR--定义游标cursSELECT dbnameFROM   #files               OPEN curs                       FETCH NEXT FROM curs INTO @dbname  WHILE @@fetch_status = 0 
BEGINSET @bakName = @dbname  --根据自己的路径规则来定--根据自己路径规则拼接数据库备份文件路径,并执行RESTORE FILELISTONLYSET @tempCommand = 'restore filelistonly from disk=''' + @path + '\' +@dbname + '\' + @bakName + '.bak'''PRINT @tempCommand--将得到数据库的数据存入临时表#filelistinfoINSERT INTO #filelistinfoEXEC (@tempCommand)SELECT @LogicalNameDat = LogicalNameFROM   #filelistinfoWHERE [TYPE]= 'D'  --数据库文件SELECT @LogicalNameLog = LogicalNameFROM   #filelistinfoWHERE [TYPE]= 'L' --日志文件--拼接恢复数据库语句,并更新对应记录到#filesUPDATE #filesSET    dbsql = 'RESTORE DATABASE ' + dbname + ' FROM DISK = ''' + @path + '\' + dbname + '\' + @bakName +'.bak''' + ' WITH MOVE ''' + @LogicalNameDat + ''' TO ''' + @pathData + '\' +dbname+ '.mdf'','+ ' MOVE ''' + @LogicalNameLog + ''' TO ''' + @pathData + '\' +dbname +'_log.ldf'''WHERE  dbname = @dbname--清除#filelistinfo临时表,继续处理下一条记录DELETE FROM   #filelistinfoFETCH NEXT FROM curs INTO @dbname  
ENDCLOSE curs                   DEALLOCATE cursSELECT *
FROM   #files--遍历#files表 执行恢复
DECLARE cur CURSOR STATIC LOCAL 
FORSELECT dbsqlFROM   #filesOPEN curWHILE 1 = 1
BEGINFETCH cur INTO @sqlIF @@fetch_status <> 0BREAKEXEC (@sql)
ENDDEALLOCATE curDROP TABLE  #files

 

操作原理:

遍历备份文件,将所有要还原的数据库名称存入#files

通过执行“RESTORE FILELISTONLY”,将结果存入##filelistinfo,从记录中得到备份数据库的库文件及日志文件的逻辑文件名,拼接“RESTORE DATABASE”,并对应更新存入#files表

遍历#files表,执行恢复语句

 

本例 备份文件存储路径参考:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊 C# 和 C++ 中的 泛型模板 底层玩法

最近在看 C 的方法和类模板&#xff0c;我就在想 C# 中也是有这个概念的&#xff0c;不过叫法不一样&#xff0c;人家叫模板&#xff0c;我们叫泛型&#xff0c;哈哈&#xff0c;有点意思&#xff0c;这一篇我们来聊聊它们底层是怎么玩的&#xff1f;一&#xff1a;C 中的模板玩…

Java实现画八卦

八卦是由多个圆叠加而成&#xff0c;如果我们让每个圆都有自己的颜色&#xff0c;那么具体结构便一目了然&#xff0c;如下图所示&#xff1a; 显然只要令对应的圆颜色相同&#xff0c;就能达到我们预期的效果。 用Java就能轻松画出来&#xff1a; import java.awt.BasicStroke…

十一、为影院添加影片制作准备服务《仿淘票票系统前后端完全制作(除支付外)》

一、为影院添加影片的逻辑和思考 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 进入之后找到上一节中制作的页面&#xff0c;咱们设置点击编辑按钮后进入的页面为影院添加影片页&#xff1a; 接着咱们查看影院添加影片页&#xff1a; 在该页中&…

Linux 内核中断内幕【转】

转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/ 本文对中断系统进行了全面的分析与探讨&#xff0c;主要包括中断控制器、中断分类、中断亲和力、中断线程化与 SMP 中的中断迁徙等。首先对中断工作原理进行了简要分析&#xff0c;接着详细探讨了中断亲…

SQL Server表分区

SQL Server表分区 什么是表分区 一般情况下&#xff0c;我们建立数据库表时&#xff0c;表数据都存放在一个文件里。 但是如果是分区表的话&#xff0c;表数据就会按照你指定的规则分放到不同的文件里&#xff0c;把一个大的数据文件拆分为多个小文件&#xff0c;还可以把这…

apt 根据注解,编译时生成代码

apt&#xff1a; Retention后面的值&#xff0c;设置的为CLASS&#xff0c;说明就是编译时动态处理的。一般这类注解会在编译的时候&#xff0c;根据注解标识&#xff0c;动态生成一些类或者生成一些xml都可以&#xff0c;在运行时期&#xff0c;这类注解是没有的~~会依靠动态生…

Hello Playwright:(6)与元素交互

在上一节我们已经了解到如何定位到元素&#xff0c;那么接下来就可以与元素进行交互了。下面的例子都是以百度首页作为测试页面输入文本FillAsync方法用于模拟用户选中元素并输入文本&#xff0c;这会触发元素的 input 事件。该方法只适合<input>、<textarea>等可输…

十二、动态座位响应及用户订票《仿淘票票系统前后端完全制作(除支付外)》

一、动态座位设置及发布 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一节中已经完成了座位设置的准备&#xff0c;这一节咱们将完成座位设置及发布的功能。 咱们首先给有座位设置事件&#xff1a; 有座位的事件设置当点击后更改当前的内容为0即…

C# 查询大型数据集

LINQ 语法非常好&#xff0c;但其作用是什么&#xff1f;我们只要查看源数组&#xff0c;就可以看出需要的结果&#xff0c;为什么要查询这种一眼就能看出结果的数据源呢&#xff1f;有时查询的结果不那么明显&#xff0c;在下面的示例中&#xff0c;就创建了一个非常大的数字数…

一、博客首页搭建搭建《iVX低代码仿CSDN个人博客制作》

制作iVX 低代码项目需要进入在线IDE&#xff1a;https://editor.ivx.cn/ 一、头部导航栏思路参考 首先我们可以查看CSDN的博客首页&#xff0c;从中查看一下布局&#xff1a; 在以上首页中&#xff0c;我们可以得知其顶部为一个整行&#xff0c;这个行内容左侧为一个logo&am…

linux samba服务器

本文转自wanglm51051CTO博客&#xff0c;原文链接&#xff1a; http://blog.51cto.com/studyit2016/1890282&#xff0c;如需转载请自行联系原作者

modernizer的意义

modernizer是一个js文件&#xff0c;会检查当前的浏览器支持什么特性&#xff0c;就在Html标签上添加什么类&#xff0c;然后如果不支持添加no-xxx类&#xff0c;这样&#xff0c;就可以针对两种情况写两种css。 http://blog.chinaunix.net/uid-21633169-id-4286857.html转载于…

Rafy 框架 - 幽灵插件(假删除)

Rafy 框架又添新成员&#xff1a;幽灵插件。本文将解释该插件的场景、使用方法、原理。 场景 在开发各类数据库应用系统时&#xff0c;往往需要在删除数据时不是真正地删除数据&#xff0c;而只是把数据标识为‘已删除’状态。这些数据在业务逻辑上是已经完全删除、不可用的数据…

二、博客首页完成《iVX低代码仿CSDN个人博客制作》

制作iVX 低代码项目需要进入在线IDE&#xff1a;https://editor.ivx.cn/ 一、菜单思路参考及制作 在 CSDN 首页中的菜单部分为一串横排的内容&#xff0c;并且可以进行拖动&#xff1a; 首先咱们添加一个行&#xff0c;命名为菜单&#xff1a; 接着肯定是需要设置上下的内边…

现在是2016-09-23,查询2个月后的月份和入职的月份相同的数据

select * from emp where to_char(hiredate,mm)to_char(add_months( sysdate,2),mm); 结果&#xff1a; 转载于:https://www.cnblogs.com/feng666666/p/5900182.html

Git之创建远程分支和删除远程分支

1、创建远程分支browser-1.8.0 在没有创造browser-1.8.0之前,我们先查看下所有分支 git branch -a 可以知道我们目前在browser-1.7.0分支,然后我们创建本地分支browser-1.8.0 git branch browser-1.8.0 再看下所有分支 git branch -a 然后我们再切换到分支browser-1.8.…

ASIHTTPRequest源码简单分析

2019独角兽企业重金招聘Python工程师标准>>> 1.前言 ASIHttprequest 是基于CFNetwork的&#xff0c;由于CFNetwork是比较底层的http库&#xff0c;功能比较少&#xff0c;因此&#xff0c;在ASIHttprequest中实现了http协议中比较多的功能&#xff0c;包括代理、gzi…

【遥感物候】1983-2012年时间序列中国地区GIMMS 3g NDVI下载(已进行旋转、格式转换、投影变换和裁剪)

文章目录 1. 数据集简介2. 数据集预览3. 数据集下载1. 数据集简介 本数据集为1983-2012年,长时间序列中国地区GIMMS 3g NDVI,空间分辨率为0.08333度,作者已完成了数据预处理:包括旋转、格式转换、投影变换和裁剪),作者可以此基础上直接进行NDVI时空变化趋势分析、基于NDV…

三、博客首页完成《iVX低代码仿CSDN个人博客制作》

制作iVX 低代码项目需要进入在线IDE&#xff1a;https://editor.ivx.cn/ 一、首页内容分析 此时我们分析一下首页内容&#xff1a; 通过以上内容可以得知&#xff0c;这些内容都统一包含在一个块之内&#xff0c;这个块之内包含了多个内容&#xff0c;这些内容主要是分为标题…

正则表达式 (grep)

正则表达式 (grep) grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&#xff0c;并把匹配的行打印出来。搜索的结果被送到屏幕&#xff0c;不影响原文…