Sql2008查询指定数据库上次备份路径的脚本是什么

gungod 2012-09-03 10:59:01
Sql2008查询指定数据库上次备份路径的脚本是什么,
我打算现在做个自动备份数据的脚本,
目前每天完整备份数据库,考虑到磁盘空间消耗太大了,
决定刚才周1执行完整备份,其他时间为差异备份。

现在有用备份文件的名称是知道产生的(日期.bak),差异备份的时候我要获取这个备份文件的名称,
那么查询指定数据库上次备份路径的脚本是什么?
...全文
154 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-09-03
  • 打赏
  • 举报
回复
这是我现在在正式环境使用的备份数据库脚本
/*
注意:由于用GUI备份会导致备份链中断,而作业无法实现“仅复制备份”,所以使用脚本备份
create by huangzj 20120510
*/

--定义备份时间,精确到秒
DECLARE @date NVARCHAR(64)
SELECT @date = SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 121), 1, 4) + '_'
+ SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 121), 6, 2) + '_'
+ SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 121), 9, 2) + '_'
+ CONVERT(CHAR(2), DATEPART(hh, GETDATE()))
+ CONVERT(CHAR(2), DATEPART(mi, GETDATE()))
+ CONVERT(CHAR(2), DATEPART(ss, GETDATE()))
--定义要备份的数据库名
DECLARE @db NVARCHAR(20)
SET @db = '' + 'HK_ERP_BaTa' + ''
--定义备份文件的全名
DECLARE @bakname NVARCHAR(128)
SELECT @bakname = @db + '_' + @date
--定义备份存放路径
DECLARE @disk NVARCHAR(256)
SELECT @disk = N'DataBak' + @bakname + '.bak'
--定义备份描述
DECLARE @name NVARCHAR(128)
SELECT @name = @db + '-完整 数据库 备份'
--定义错误信息
DECLARE @error NVARCHAR(128)
SELECT @error = '验证失败。找不到数据库“' + @db + '”的备份信息。'

BACKUP DATABASE @db TO DISK = @disk WITH COPY_ONLY, NOFORMAT, NOINIT,
NAME =@name, SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM ;
DECLARE @backupSetId AS INT
SELECT @backupSetId = position
FROM msdb..backupset
WHERE database_name = @db
AND backup_set_id = ( SELECT MAX(backup_set_id)
FROM msdb..backupset
WHERE database_name = @db
)
IF @backupSetId IS NULL
BEGIN
RAISERROR(@error, 16, 1)
END
RESTORE VERIFYONLY FROM DISK = @disk WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO
gungod 2012-09-03
  • 打赏
  • 举报
回复
知道怎么做,换个思路,判断当前周几,然后拼出文件名称。
gungod 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
select * from msdb..backupfile中可以找到备份的路径,然后再经过组合,你可以得到自己想要的数据。
[/Quote]
这里查出了的是默认数据备份路径,不是我要的,
我试过
SELECT * FROM msdb.dbo.backupset 能查询出我之前自动备份的记录,但是没有路径。

[Quote=引用 3 楼 的回复:]
每天完整备份数据库,考虑到磁盘空间消耗太大了
设置备份7天的,超过7天覆盖掉
[/Quote]

覆盖不行,要每天的记录,所以我打算用1周用1次完整备份+6次差异备份追击记录的方式备份。
以学习为目的 2012-09-03
  • 打赏
  • 举报
回复
每天完整备份数据库,考虑到磁盘空间消耗太大了


设置备份7天的,超过7天覆盖掉
以学习为目的 2012-09-03
  • 打赏
  • 举报
回复
每天完整备份数据库,考虑到磁盘空间消耗太大了

可以备份一个礼拜的,超过7天的自动覆盖
發糞塗牆 2012-09-03
  • 打赏
  • 举报
回复
select * from msdb..backupfile中可以找到备份的路径,然后再经过组合,你可以得到自己想要的数据。
gungod 2012-09-03
  • 打赏
  • 举报
回复
还有异常提示啊,不错,
我刚才写的脚本,测试了下,还可以用。

--数据库周1完整备份周2-7差异备份脚本

declare @name varchar(250)
declare @weekday varchar(2)
set @weekday = (select datepart(weekday,GETDATE()-1))
IF(@weekday ='1')
BEGIN
set @name='E:\DB\db_'+convert(varchar(50),getdate(),112)+'_auto.bak'
--数据库完整备份脚本
BACKUP DATABASE [DBTEST] TO
DISK = @name
WITH NOFORMAT, NOINIT,
NAME = N'完整 数据库 备份',
SKIP, NOREWIND, NOUNLOAD
END
Else
BEGIN
set @name = convert(varchar(50),(getdate() - datepart(weekday,GETDATE()-2)),112)
set @name='E:\DB\db_'+@name+'_auto.bak'
--数据库差异备份脚本
BACKUP DATABASE [H3_DBTEST] TO
DISK = @name
WITH DIFFERENTIAL , NOFORMAT, NOINIT,
NAME = N'差异 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
END

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧