YourSQLDba 配置——修改备份路径
公司一直使用YourSQLDba做本地备份,磁带机将本地备份文件上带做异地容灾备份。近期整理、验证备份时发现本地备份目录命名五花八门
其中有历史原因,也有无规划化的缘故,看着这些五花八门的目录,越看越不顺眼。于是想统一规范化。备份目录统一为DB_BACKUP,完整备份位于FULL_BACKUP子目录,事务日志备份位于LOG_BACKUP子目录下。例如如下所示:
完整备份目录 :G:\DB_BACKUP\FULL_BACKUP\
事务日志备份目录:G:\DB_BACKUP\LOG_BACKUP\
于是需要修改YourSQLDba备份路径,本来是一个简单的事情,但是在测试过程中,发现了一些小问题,特此记录一下:
问题1:在哪里修改备份路径? 修改是否立即生效?
修改YourSQLDba的备份路径,需要修改两个作业YourSQLDba_FullBackups_And_Maintenance 和YourSQLDba_LogBackups的配置. 即修改调用的存储过程Maint.YourSqlDba_DoMaint中的@FullBackupPath和@LogBackupPath参数。如下所示:
YourSQLDba_FullBackups_And_Maintenance作业
exec Maint.YourSqlDba_DoMaint
@oper = 'YourSQLDba_Operator'
, @MaintJobName = 'YourSQLDba: DoInteg,DoUpdateStats,DoReorg,Full backups'
, @DoInteg = 1
, @DoUpdStats = 1
, @DoReorg = 1
, @DoBackup = 'F'
, @FullBackupPath = 'G:\DB_BACKUP\FULL_BACKUP\'
, @LogBackupPath = 'G:\DB_BACKUP\LOG_BACKUP\'
-- Flush database backups older than the number of days
, @FullBkpRetDays = 1
-- Flush log backups older than the number of days
, @LogBkpRetDays = 2
-- Spread Update Stats over 7 days
, @SpreadUpdStatRun =1
-- Maximum number of consecutive days of failed full backups allowed
-- for a database before putting that database (Offline).
, @ConsecutiveFailedbackupsDaysToPutDbOffline = 9999
-- Each database inclusion filter must be on its own line between the following quote pair
, @IncDb =
'
'
-- Each database exclusion filter must be on its own line between the following quote pair
, @ExcDb =
'
'
-- Each database exclusion filter must be on its own line between the following quote pair
, @ExcDbFromPolicy_CheckFullRecoveryModel =
'
'
YourSQLDba_LogBackups作业
exec Maint.YourSqlDba_DoMaint
@oper = 'YourSQLDba_Operator'
, @MaintJobName = 'Log backups'
, @DoBackup = 'L'
, @FullBackupPath = 'G:\DB_BACKUP\FULL_BACKUP\'
, @LogBackupPath = 'G:\DB_BACKUP\LOG_BACKUP\'
-- Specify to user that full database backups are mandatory before log backups
, @NotifyMandatoryFullDbBkpBeforeLogBkp = 1
, @BkpLogsOnSameFile = 1
-- Each database inclusion filter must be on its own line between the following quote pair
, @IncDb =
'
'
-- Each database exclusion filter must be on its own line between the following quote pair
, @ExcDb =
'
'
将@FullBackupPath和 @LogBackupPath 从D:\backup\修改为G:\DB_BACKUP\FULL_BACKUP\与G:\DB_BACKUP\LOG_BACKUP\后,修改后是否立即生效? 修改过后,如果没有先做一次完整备份,事务日志备份文件(事务日志备份有可能半小时。一小时一次等多种选择)并不会在新目录G:\DB_BACKUP\LOG_BACKUP\生成,依然还是在旧目录G:\backup\下生成。直到完整备份备份后,事务日志备份才在新目录生效。这样就导致我必须等到旧目录数据文件完全上带后才能删除旧目录。但是为什么会这样呢?
从Maint.YourSqlDba_DoMaint追查开始,发现其调用[yMaint].[Backups]做备份,做事务日志备份的一段代码如下
If @DoFullBkp = 1 And DATABASEPROPERTYEX(@DbName, 'Recovery') <> 'Simple'
Begin
Set @fileName = yMaint.MakeBackupFileName(@DbName, 'L', @LogBackupPath, @Language, @LogBkExt)
Set @sql = yMaint.MakeBackupCmd
(
@DbName
, 'L' -- say explicitely full backup command
, @fileName
, 1
, @MaintJobName
)
-- Launch first log backup that creates the file that will be used
-- to stored log backups usually for the rest of the days unless
-- end-user launch Maint.SaveDbOnNewFileSet
Exec yExecNLog.LogAndOrExec
@context = 'yMaint.backups'
, @sql = @sql
, @Info = 'Log backups (init)'
, @JobNo = @JobNo
, @errorN = @errorN_BkpPartielInit output
-- Restore the backup to the mirror server if enabled
Exec yMirroring.QueueRestoreToMirrorCmd
@context = 'yMaint.backups (queue restore of log backup init)'
, @JobNo = @JobNo
, @DbName = @DbName
, @bkpTyp = N'L'
, @fileName = @fileName
, @MirrorServer = @MirrorServer
, @BrokerDlgHandle = @BrokerDlgHandle OUT
If @errorN_BkpPartielInit = 0 -- version
Begin
Update Maint.JobLastBkpLocations
Set lastLogBkpFile = @filename
, MirrorServer = @MirrorServer
Where dbName = @DbName
-- shrink the log after backup (the procedure acts depending on the size)
-- Exec yMaint.ShrinkLog @DbName, @JobNo
End
End
其中@fileName = yMaint.MakeBackupFileName(@DbName, 'L', @LogBackupPath, @Language, @LogBkExt)取值取决于@LogBackupPath, 而@LogBackupPath来源于Maint.JobHistory中(如下所示)。每次全备在Maint.JobHistory中生成一条记录,而全备后不管事务日志备份多少次,只会在第一次事务日志备份时生成记录,所以即使修改了@FullBackupPath和 @LogBackupPath这两个参数的值,Maint.JobHistory表中最后一次事务日志备份记录的值依然为修改前的旧值。从而出现上面描述的问题。
Select
@MaintJobName = JobName
, @DoFullBkp = DoFullBkp
, @DoLogBkp = DoLogBkp
, @FullBkpRetDays = FullBkpRetDays
, @LogBkpRetDays = LogBkpRetDays
, @NotifyMandatoryFullDbBkpBeforeLogBkp = NotifyMandatoryFullDbBkpBeforeLogBkp
, @BkpLogsOnSameFile = BkpLogsOnSameFile
, @FullBackupPath = yUtl.NormalizePath(FullBackupPath )
, @LogBackupPath = yUtl.NormalizePath(LogBackupPath )
, @FullBkExt = FullBkExt
, @LogBkExt = LogBkExt
, @ConsecutiveFailedbackupsDaysToPutDbOffline = ConsecutiveFailedbackupsDaysToPutDbOffline
, @IncDb = IncDb
, @ExcDb = ExcDb
, @jobStart = JobStart
, @MirrorServer = MirrorServer
, @JobId = JobId
, @StepId = StepId
From Maint.JobHistory Where JobNo = @JobNo
问题2:修改备份路径后,原路径下的备份文件能否在保留期后自动删除?
如下所示,在存储过程[yMaint].[Backups]里面删除过期备份时,@Path参数来自于@FullBackupPath 和@LogBackupPath
这两个参数的值来源于表Maint.JobHistory, 而当修改了YourSQLDba备份路径后,如果没有做一次全备,对应记录FullBackupPath 与LogBackupPath字段的值都是原先的路径(因为事务日志备份的路径从Maint.JobHistory最后一次事务日志记录取值,也即原先的路径),做了一次全备后,其值都是修改后路径,这样就会导致以前备份删除不了的情况。此时只能手工删除。
Select
@MaintJobName = JobName
, @DoFullBkp = DoFullBkp
, @DoLogBkp = DoLogBkp
, @FullBkpRetDays = FullBkpRetDays
, @LogBkpRetDays = LogBkpRetDays
, @NotifyMandatoryFullDbBkpBeforeLogBkp = NotifyMandatoryFullDbBkpBeforeLogBkp
, @BkpLogsOnSameFile = BkpLogsOnSameFile
, @FullBackupPath = yUtl.NormalizePath(FullBackupPath )
, @LogBackupPath = yUtl.NormalizePath(LogBackupPath )
, @FullBkExt = FullBkExt
, @LogBkExt = LogBkExt
, @ConsecutiveFailedbackupsDaysToPutDbOffline = ConsecutiveFailedbackupsDaysToPutDbOffline
, @IncDb = IncDb
, @ExcDb = ExcDb
, @jobStart = JobStart
, @MirrorServer = MirrorServer
, @JobId = JobId
, @StepId = StepId
From Maint.JobHistory Where JobNo = @JobNo
问题3:输出日志文件MaintenanceReport.txt路径在哪里修改?
YourSQLDba的输出日志文件MaintenanceReport.txt并不会随着@FullBackupPath和 @LogBackupPath 的修改会保存到新目录。这个文件的输出目录的值放置在msdb.dbo.sysjobsteps表中,对应记录的output_file_name字段。
可以通过两种方式来修改:
1 SQL脚本方式:
EXEC msdb.dbo.sp_update_jobstep @job_id=N'41662692-c7b2-47ae-8e07-df3eb12e1fe2', @step_id=1 ,
@output_file_name=N'G:\DB_BACKUP\MaintenanceReport.txt'
2:UI图形界面:
问题4:是否可以用其它方式。
可以修改@FullBackupPath和 @LogBackupPath参数值后,将旧备份文件拷贝到对应新目录,不过对备份比较大的服务器,会产生一定的IO消耗。修改修改Maint.JobLasstBkpLocations记录中的LastLogBkpFile和LastFullBkpFile字段, 以及Maint.JobHistory中最后一条记录的FullBackupPath与LogBackupPath。
UPDATE Maint.JobLastBkpLocations set lastLogBkpFile='G:\DB_BACKUP\LOG_BACKUP\xxxx_[2014-07-15_17h48m08_Tue]_logs.TRN',
lastFullBkpFile='G:\DB_BACKUP\FULL_BACKUP\xxxx_[2014-07-15_17h48m07_Tue]_database.BAK'
WHERE .....
UPDATE Maint.JobHistory SET FullBackupPath='G:\DB_BACKUP\LOG_BACKUP\', LogBackupPath='G:\DB_BACKUP\FULL_BACKUP' where JobNo=@JobNo
YourSQLDba 配置——修改备份路径的更多相关文章
- iTunes备份路径,iTunes默认备份路径,iTunes修改备份路径
1:当前iTunes版本: 2:帮助给出的答复: 3:修改的操作界面: 实际文件夹路径:
- Windows 版本的iTunes 修改iPhone的备份路径
帮朋友解决修改iPhone的备份路径问题,故写篇博客整理记录一下. 所需工具 Junction工具 下载该工具然后将文件放到C:\Windows 目录下,如下图: 找到iTunes的备份路径 Wind ...
- Windows下修改iTunes备份路径
0.准备工作: 关闭itunes 在任务管理器中杀掉iTunes开头的服务 1,找到iTunes默认备份路径:C:\Users\xxx\AppData\Roaming\Apple Computer\M ...
- maven 配置: 修改默认的 .m2仓库 默认存储路径.
maven 配置: 修改默认的 .m2仓库 默认存储路径. 一 .在系统maven里修改 1.在maven_HOME/conf/下找到配置文档 settings.xml 在文档中添加如下的配置说明 & ...
- hbase配置hdfs的HA之后需要修改的路径
hbase-site.xml中配置了hdfs的一个路径 <property> <name>hbase.rootdir</name> <value>hdf ...
- bitnami redmine安装、配置、备份、恢复(这篇文章靠谱)
bitnami redmine安装.配置.备份.恢复 2012-12-17 12:33 2596人阅读 评论(0) 收藏 举报 1. 安装时语言选择英文,不可以选择中文,否则不能正常运行,可以在账户里 ...
- 配置RMAN备份环境
关于配置RMAN备份环境你可以给每个目标数据库设置一些固定的配置,这些配置控制着RMAN多个方面的行为.例如,你可配置备份的保存策略.默认的备份目录.默认的备份设备类型等.你可以用show命令来查看配 ...
- Confluence 6 配置自动备份
希望配置 Confluence 备份: 进入 > 基本配置(General Configuration) > 备份管理(Backup administration). 选择 编辑(Edi ...
- keepalived配置主从备份
keepalived配置主从备份 keepalived是一个用于做双机热备(HA)的软件,常和haproxy联合起来做热备+负载均衡,达到高可用. 运行原理 keepalived通过选举(看服务器 ...
随机推荐
- 分享个刚写好的 android 的 ListView 动态加载类,功能全而代码少。
(转载声明出处:http://www.cnblogs.com/linguanh/) 简介: 该ListView 实现动态加载数据,为了方便用户充分地自定义自己的数据源.点击事件,等核心操作, ...
- H2 数据库
最近做演示项目的时候需要一个数据库,但不想安装.于是查看了embedded datasource : h2 h2: 依赖: <dependency> <groupId>com. ...
- 9.Configure One-to-One(配置一对一关系)【Code-First系列】
现在,开始学习怎么配置一对一的关系,众所周知,一对一的关系是:一个表中的主键,在另外一个表中,同时是主键和外键[实际上是一对零或者一对一]. 请注意:一对一的关系,在MS SQL Server中,技术 ...
- ASP.NET MVC自定义验证Authorize Attribute
前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和 ...
- [C#] 获取打印机列表
一:获得本地安装的打印机列表 注:(如果在"设备和打印机"中已经添加了局域网的打印机设备,也算是本地安装的打印机:没有添加的则算作局域网打印机) 1,通过 C# 中 Printer ...
- 【Win10开发】绘制静态UI
相信经历过Windows Insider的人对下面这个图都不会陌生,偶然看见邹欣老师领导的微软团队写了篇用xaml绘制这个静态页面,那咱也来亲手实验一番.唔...请做和放宽! 首先我们来看看xaml代 ...
- 利用SHELL脚本实现文件完整性检测程序(1.2版更新)
一..开发背景 因时势所逼,需要对服务器的文件系统实行监控.虽然linux下有不少入侵检测和防窜改系统,但都比较麻烦,用起来也不是很称手.自己琢磨着也不需要什么多复杂的功能,写个脚本应该就可以满足基本 ...
- 《数据结构与算法Python语言描述》习题第二章第一题(python版)
题目:定义一个表示时间的类Timea)Time(hours,minutes,seconds)创建一个时间对象:b)t.hours(),t.minutes(),t.seconds()分别返回时间对象t的 ...
- linux 下 systemd-udevd 服务解析
最近在看linux下重定向的时候看到 的这个系统的服务,所以记下来备忘. 描述:systemd-udevd是监听内核发出的设备事件,并根据udev规则处理每个事件. 选项: --daemon 脱离控制 ...
- 【工业串口和网络软件通讯平台(SuperIO)教程】一.通讯机制
1.1 应用场景 通讯平台的交互对象包括两方面:第一.与硬件产品交互.第二.与软件产品交互.基本这两方面考虑,通讯平台一般会应用在两个场景: 1)通讯平台应用在PC机上 主要应用在自动站的工控机 ...





