遍歷文件夾還原數據庫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.pswp.cn/news/286132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286132.shtml
英文地址,請注明出處:http://en.pswp.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(:)