如何使用以下格式编写SQL数据库备份脚本:Demo_YYYYMMDD_XX.bak
问题描述:
如何编写具有唯一名称格式的每日备份脚本:Demo_YYYYMMDD_XX 其中XX是基于备份历史记录的增量编号。如何使用以下格式编写SQL数据库备份脚本:Demo_YYYYMMDD_XX.bak
示例如下。
- 第一次备份:Demo_20170704_01.bak
- 第二备份:Demo_20170704_02.bak
- 第三个备份: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
答
你有两种选择。在目录
- 列表文件是否符合你的格局(日期)表示,计数和增加
- 保留多少备份要让每一天(增量)
计数既然你有一个数据库,正在备份该数据库,为什么不做后者?并记录你每天备份到具有表,
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) ;
注意,通过使用工会可以确保你得到的基地第一排的临时表