2017-07-04 36 views
2

如何編寫具有唯一名稱格式的每日備份腳本:Demo_YYYYMMDD_XX 其中XX是基於備份歷史記錄的增量編號。如何使用以下格式編寫SQL數據庫備份腳本:Demo_YYYYMMDD_XX.bak

示例如下。

  1. 第一次備份:Demo_20170704_01.bak
  2. 第二備份:Demo_20170704_02.bak
  3. 第三個備份:Demo_20170704_03.bak

XX會在每次備份過程的運行時間增加+1同一天和同一文件夾(路徑)。

管理出來了下面的腳本。需要改進嗎?謝謝

DECLARE @path VARCHAR(500) 
DECLARE @name VARCHAR(500) 
DECLARE @pathwithname VARCHAR(500) 
DECLARE @time DATETIME 
DECLARE @year VARCHAR(4) 
DECLARE @month VARCHAR(2) 
DECLARE @day VARCHAR(2) 
DECLARE @counter varchar(10) 

SET @path = 'C:\Backup Path\' 

SELECT @time = GETDATE() 
SELECT @year = (SELECT CONVERT(VARCHAR(4), DATEPART(yy, @time))) 
SELECT @month = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mm,@time),'00'))) 
SELECT @day = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(dd,@time),'00'))) 
SELECT @counter = (
select format(count(A.database_name),'000') 
from msdb.dbo.backupset A join msdb.dbo.backupmediafamily B 
on A.media_set_id = B.media_set_id 
where A.database_name = 'Demo' 
and (select convert(date,A.backup_start_date, 120)) = (select convert(date,getdate(), 120)) 
) 

SELECT @name ='Demo' + '_' + @year + @month + @day + '_' + @counter 
SET @pathwithname = @path + @name + '.bak' 

BACKUP DATABASE Demo 
TO DISK = @pathwithname WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10 

回答

0

你有兩種選擇。在目錄

  • 列表文件是否符合你的格局(日期)表示,計數和增加
  • 保留多少備份要讓每一天(增量)

計數既然你有一個數據庫,正在備份該數據庫,爲什麼不做後者?並記錄你每天備份到具有表,

create table backups (
    dbback DATE NOT NULL DEFAULT GETDATE() 
    ,dbname varchar(99) NOT NULL 
    ,name varchar(99) NOT NULL 
    ,index int NOT NULL 
    ,primary key(db,backdb) 
) ; 

可以記錄對(DB,backdb)來記錄對多個數據庫(數據庫,dbback)項。

WITH t as (select (backups.index+1) as nextnum 
from backups where dbname = 'database_name' and dbback = CAST(GETDATE() AS DATE) 
union select 1 as nextnum from dual) 
insert into backups (dbback,dbname,name,index) 
values (CAST(GETDATE() AS DATE),'database_name','yourname',t.nextnum) ; 

注意,通過使用工會可以確保你得到的基地第一排的臨時表

相關問題