遍历文件夹还原数据库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 中的模板玩…

ceph集群报 Monitor clock skew detected 错误问题排查,解决

ceph集群报 Monitor clock skew detected 错误问题排查&#xff0c;解决 告警信息如下&#xff1a; [rootceph-100-80 ceph]# ceph -w cluster ddc1b10b-6d1a-4ef9-8a01-d561512f3c1d health HEALTH_WARN clock skew detected on mon.ceph-100-81,…

Java实现画八卦

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

C语言试题四十五之把第1到第p个字符,平移到字符串的最后,把第p+1到最后的字符移到字符串的前部。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

【MATLAB统计分析与应用100例】案例006:matlab数据的标准化变换

文章目录 1. 调用rand函数产生一个10行,4列的随机矩阵,每列服从不同的均匀分布2. 调用zscore函数对x进行标准化变换(按列标准化),返回变换后矩阵xz,以及矩阵x各列的均值构成的向量mu,各列的标准差构成的向量sigma3. 变换结果1. 调用rand函数产生一个10行,4列的随机矩阵…

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

一、为影院添加影片的逻辑和思考 首先打开在线编辑器进入我们的项目&#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;这类注解是没有的~~会依靠动态生…

Web.config配置文件详解(新手必看)

花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法。很适合新手参看&#xff0c;由于Web.config在使用很灵活&#xff0c;可以自定义一些节点。所以这里只介绍一些比较常用的节点。 <?xml version"1.0"?> <!--注意: 除了手动编辑此文件以外&…

Hello Playwright:(6)与元素交互

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

C语言试题四十六之将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

【MATLAB统计分析与应用100例】案例007:matlab数据的极差归一化变换

文章目录 1. 调用rand函数产生一个10行,4列的随机矩阵,每列服从不同的均匀分布2. 调用rscore函数对x按列进行极差规格化变换, 返回变换后矩阵R,以及矩阵x各列的最小值构成的向量xmin,各列的极差构成的向量xrange1. 调用rand函数产生一个10行,4列的随机矩阵,每列服从不同…

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

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

跨服务器 快速 导入数据表记录 Insert into SELECT

Use DataBaseName/*开启Ad Hoc Distributed Queries组件exec sp_configure show advanced options,1 reconfigure exec sp_configure Ad Hoc Distributed Queries,1 reconfigure*/Insert into tableName (col1&#xff0c;col2&#xff0c;col3&#xff0c;……) --字段不能含有…

C# 查询大型数据集

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

C语言试题四十七之程序定义了N×M的二维数组,并在主函数中自动赋值。请编写函数function(int a[N][M], int m),该函数的功能是:将数组右上半三角元素中的值乘以m。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 程序定义了…

第六章 三大消息摘要算法总结

6.1、MD5 推荐使用CC&#xff08;即Commons Codec&#xff09;实现虽然已被破解&#xff0c;但是仍旧广泛用于注册登录模块与验证下载的文件的完整性可以自己写一个注册登录模块&#xff1b;自己下载一个MD5加密的文件&#xff0c;然后通过之前编写的工具类&#xff08;或者使用…

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

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

【MATLAB统计分析与应用100例】案例008:调用rand函数生成均匀分布随机数

文章目录 1. 生成随机数分布直方图2. 生成随机数矩阵,服从均匀分布1. 生成随机数分布直方图 x = rand(10) % 生成10行10列的随机数矩阵,其元素服从[0,1]上均匀分布 y = x(:)