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

时间: 2024-12-30 23:44:14

YourSQLDba 配置——修改备份路径的相关文章

YourSQLDba 配置&amp;mdash;&amp;mdash;修改备份路径

    公司一直使用YourSQLDba做本地备份,磁带机将本地备份文件上带做异地容灾备份.近期整理.验证备份时发现本地备份目录命名五花八门 其中有历史原因,也有无规划化的缘故,看着这些五花八门的目录,越看越不顺眼.于是想统一规范化.备份目录统一为DB_BACKUP,完整备份位于FULL_BACKUP子目录,事务日志备份位于LOG_BACKUP子目录下.例如如下所示:     完整备份目录    :G:\DB_BACKUP\FULL_BACKUP\     事务日志备份目录:G:\DB_BACK

RMAN 备份路径困惑(使用plus archivelog时)

--******************************************* -- RMAN 备份路径困惑(使用plus archivelog时) --*******************************************       最近RMAN备份时,碰到一点疑惑.即使用plus archivelog 时不管是使用format参数指定备份文件的路径还是使用configure配置RMAN备份路径,都不能 将数据文件和日志文件备份到同一路径.在因为以前使用RMAN备

maven 配置: 修改默认的 .m2仓库 默认存储路径.

一 .在系统maven里修改 1.在maven_HOME/conf/下找到配置文档 settings.xml 在文档中添加如下的配置说明 <localRepository>/home/morpheus/.m2/repository</localRepository> 例如 settings.xml : .... <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="

Windows 2003系统修改php.ini配置的访问路径(环境变量)

Windows下,用 IIS跑PHP,有个缺点,那就是一定要把 php.ini 放在 Windows 的系统路径下 (C:/Windows) .不过,可以通过以下方式修改访问路径: 第一步: 把PHP的安装路径添加到环境变量Path中,右键 "我的电脑" -> 高级 -> 环境变量 -> 系统变量,追加 D:\Program Files\PHP-5.3.28\; : 第二步: 新建"系统变量" PHPRC,值为 D:\Program Files\P

这些MySQL配置“修改条令”,你有必要熟识默记!

大多数开发者可能不太会关注MySQL的配置,毕竟在基本配置没有问题的情况下,把更多的精力放在schema设计.索引优化和SQL优化上,是非常务实的策略.这时,如果再花力气去优化配置项,获得的收益通常都比较小.更多的时候,基于安全因素的考量,普通开发者很少能够接触到生产环境的MySQL配置.正是这样,导致开发者(包括我)对MySQL的配置不甚了解,希望本文能帮你更好地了解MySQL配置. 如果让你在某种环境上安装配置MySQL,你会怎么做?安装后,直接copy修改示例配置文件,应该是大多数人的做法

tomcat 配置图片虚拟路径不起作用

最近在做一个小项目,用到了图片上传服务器,以前尝试过实现这个功能Demo,虽然基本功能没有问题,但是很不完善,当时也有在博客记录,地址如下: http://blog.csdn.net/weixin_36380516/article/details/58594664 由于当时写这个图片上传服务器的功能只是为了练练手,简单的实现后便没有再去管,后来经过道友提醒,图片上传路径不能放置在eclipse的工程目录下,否则后期部署会有很大的不方便,而且每次图片上传结束后,都要刷新eclipse下的工程才能显

部署PHP时的4个配置修改说明_php技巧

以下就是部署PHP时的4个配置修改说明,大家一个一个进行学习研究. 1.short_open_tag 是什么呢?决定是否允许使用代码开始标志的缩写形式(<? ?> ). 如果要和 XML 结合使用PHP,可以禁用此选项以便于嵌入使用<?xml ?> .否则还可以通过php来输出,例如:<?php echo '<?xml version="1.0"'; ?> . 如果禁用了,必须使用 PHP 代码开始标志的完整形式(<?php ?>

Android开发中Launcher3常见默认配置修改方法总结

本文实例讲述了Android开发中Launcher3常见默认配置修改方法.分享给大家供大家参考,具体如下: Launcher概述 Launcher是开机完成后第一个启动的应用,用来展示应用列表和快捷方式.小部件等.Launcher作为第一个(开机后第一个启动的应用)展示给用户的应用程序,其设计的好坏影响到用户的体验,甚至影响用户购机的判断.所以很多品牌厂商都会不遗余力的对Launcher进行深度定制,如小米的MIUI.华为的EMUI等.Android默认的Launcher没有过多的定制,更加简洁

如何在SQL server 2005中将数据库备份路径设为网络路径

server|备份|数据|数据库|网络 如何在SQL server 2005中将数据库备份路径设为网络路径如:"\\BackupPC\dbback\" SQL server 2000中是可以的呀,怎么到2005就不好这样做的???=================================现在备份数据库真麻烦,都要先备份到本机,然后再剪切到网上邻居的另一台电脑中,真郁闷!!!! ===================================================