SQL語句備份和還原數據庫


1,使用SQL最簡單備份,還原數據庫

1 /* 備份 */ 2 backup database Test to disk='D:/Test.bak' 3 /* 還原 */ 4 restore database Test from disk='D:/Test.bak'

2,為了方便以后的使用,開始對語句進行簡單的封裝->存儲過程

(1)備份

復制代碼
 1 /*******************************************************  2  備份數據庫  3 *******************************************************/  4 if exists(select 1 from sys.procedures where name='sp_BackupDB')  5  drop procedure sp_BackupDB  6 go  7 create procedure sp_BackupDB  8 @savePath nvarchar(4000) -- 備份數據庫保存位置(目錄)  9 ,@dbName nvarchar(4000) -- 需要進行備份的數據庫 10 ,@bakName nvarchar(4000) -- 備份文件的名稱(不含擴展名) 11 as begin 12 declare @sql nvarchar(4000) 13 /* 驗證路徑 */ 14 if(charindex('/',reverse(@savePath))!=1) begin 15 set @savePath=@savePath+'/' 16  end 17 /* 拼SQL並執行 */ 18 set @sql='backup database '+@dbName+' to disk='''+@savePath+@bakName+'.bak''' 19  exec sp_executesql @sql 20 21 /* 返回執行結果(1=成功,0=失敗) */ 22 if(@@error=0) begin 23 return 1 24  end 25 return 0 26 end
復制代碼

(2)還原

復制代碼
 1 /*******************************************************  2  還原數據庫  3 *******************************************************/  4 if exists(select 1 from sys.procedures where name='sp_RestoreDB')  5  drop procedure sp_RestoreDB  6 go  7 create procedure sp_RestoreDB  8 /* 數據庫還原后的保存位置(目錄)(使用系統默認保存位置:-1) */  9 @savePath nvarchar(4000) 10 ,@backFile nvarchar(4000) -- 需要還原的數據庫備份文件 11 ,@defaultName nvarchar(4000) -- 數據庫原始名稱(備份的原數據庫名稱)不包含擴展名 12 /* 為數據庫重命名(使用數據庫默認名稱:-1)不包含擴展名 13  如果目錄已存在該名稱的數據庫,將會被覆蓋 */ 14 ,@dbName nvarchar(4000) 15 as begin 16 declare @newName nvarchar(4000),@sql nvarchar(4000) 17 /* 獲取數據庫名稱 */ 18 if(@dbName='-1') begin 19 set @newName=@defaultName 20 end else begin 21 set @newName=@dbName 22  end 23 /* 結束所有對當前數據庫的連接 */ 24 if exists(select 1 from sys.sysprocesses where dbid=db_id(@defaultName)) begin 25 declare #cs_spid cursor -- 聲明游標 26 for 27 select #cs_spid=convert(varchar,spid) from sys.sysprocesses where dbid=db_id(@defaultName) 28  open #cs_spid 29 declare @spid varchar(20) 30 fetch next from #cs_spid into @spid -- 賦值並前進到下一條 31 while(@@fetch_status=0) begin -- 在fetch失敗前執行 32 exec ('kill '+@spid) -- 結束對操作庫的連接(exec執行SQL語句1) 33 fetch next from #cs_spid into @spid 34  end 35  close #cs_spid 36 deallocate #cs_spid -- 釋放游標 37  end 38 /* 創建執行語句 */ 39 set @sql='restore database '+@newName+' from disk='''+@backFile+''' with replace' 40 if(@savePath!='-1') begin 41 -- 驗證路徑 42 if(charindex('/',reverse(@savePath))!=1) begin 43 set @savePath=@savePath+'/' 44  end 45 set @sql=@sql+', move '''+@defaultName+''' to '''+@savePath+@newName+'.mdf''' 46 set @sql=@sql+', move '''+@defaultName+'_log'' to '''+@savePath+@newName+'_log.ldf''' 47  end 48 /* 執行操作 */ 49 exec sp_executesql @sql -- (exec執行SQL語句2) 50 /* 返回執行結果(1=成功,0=失敗) */ 51 if(@@error=0) begin 52 return 1 53 end 54 return 0 55 end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM