SQL語句備份和還原資料庫
阿新 • • 發佈:2022-02-14
1.使用SQL最簡單備份,還原資料庫
/* 備份 */
backup database Test to disk='D:/Test.bak'
/* 還原 */
restore database Test from disk='D:/Test.bak'
2.為了方便以後的使用,開始對語句進行簡單的封裝->儲存過程
/******************************************************* 備份資料庫 *******************************************************/ if exists(select 1 from sys.procedures where name='sp_BackupDB') drop procedure sp_BackupDB go create procedure sp_BackupDB @savePath nvarchar(4000) -- 備份資料庫儲存位置(目錄) ,@dbName nvarchar(4000) -- 需要進行備份的資料庫 ,@bakName nvarchar(4000) -- 備份檔案的名稱(不含副檔名) as begin declare @sql nvarchar(4000) /* 驗證路徑 */ if(charindex('/',reverse(@savePath))!=1) begin set @savePath=@savePath+'/' end /* 拼SQL並執行 */ set @sql='backup database '+@dbName+' to disk='''+@savePath+@bakName+'.bak''' exec sp_executesql @sql /* 返回執行結果(1=成功,0=失敗) */ if(@@error=0) begin return 1 end return 0 end
/******************************************************* 還原資料庫 *******************************************************/ if exists(select 1 from sys.procedures where name='sp_RestoreDB') drop procedure sp_RestoreDB go create procedure sp_RestoreDB /* 資料庫還原後的儲存位置(目錄)(使用系統預設儲存位置:-1) */ @savePath nvarchar(4000) ,@backFile nvarchar(4000) -- 需要還原的資料庫備份檔案 ,@defaultName nvarchar(4000) -- 資料庫原始名稱(備份的原資料庫名稱)不包含副檔名 /* 為資料庫重新命名(使用資料庫預設名稱:-1)不包含副檔名 如果目錄已存在該名稱的資料庫,將會被覆蓋 */ ,@dbName nvarchar(4000) as begin declare @newName nvarchar(4000),@sql nvarchar(4000) /* 獲取資料庫名稱 */ if(@dbName='-1') begin set @newName=@defaultName end else begin set @newName=@dbName end /* 結束所有對當前資料庫的連線 */ if exists(select 1 from sys.sysprocesses where dbid=db_id(@defaultName)) begin declare #cs_spid cursor -- 宣告遊標 for select #cs_spid=convert(varchar,spid) from sys.sysprocesses where dbid=db_id(@defaultName) open #cs_spid declare @spid varchar(20) fetch next from #cs_spid into @spid -- 賦值並前進到下一條 while(@@fetch_status=0) begin -- 在fetch失敗前執行 exec ('kill '+@spid) -- 結束對操作庫的連線(exec執行SQL語句1) fetch next from #cs_spid into @spid end close #cs_spid deallocate #cs_spid -- 釋放遊標 end /* 建立執行語句 */ set @sql='restore database '+@newName+' from disk='''+@backFile+''' with replace' if(@savePath!='-1') begin -- 驗證路徑 if(charindex('/',reverse(@savePath))!=1) begin set @savePath=@savePath+'/' end set @sql=@sql+', move '''+@defaultName+''' to '''+@savePath+@newName+'.mdf''' set @sql=@sql+', move '''+@defaultName+'_log'' to '''+@savePath+@newName+'_log.ldf''' end /* 執行操作 */ exec sp_executesql @sql -- (exec執行SQL語句2) /* 返回執行結果(1=成功,0=失敗) */ if(@@error=0) begin return 1 end return 0 end