公司一直使用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 配置——修改备份路径的更多相关文章

  1. iTunes备份路径,iTunes默认备份路径,iTunes修改备份路径

    1:当前iTunes版本: 2:帮助给出的答复: 3:修改的操作界面: 实际文件夹路径:

  2. Windows 版本的iTunes 修改iPhone的备份路径

    帮朋友解决修改iPhone的备份路径问题,故写篇博客整理记录一下. 所需工具 Junction工具 下载该工具然后将文件放到C:\Windows 目录下,如下图: 找到iTunes的备份路径 Wind ...

  3. Windows下修改iTunes备份路径

    0.准备工作: 关闭itunes 在任务管理器中杀掉iTunes开头的服务 1,找到iTunes默认备份路径:C:\Users\xxx\AppData\Roaming\Apple Computer\M ...

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

    maven 配置: 修改默认的 .m2仓库 默认存储路径. 一 .在系统maven里修改 1.在maven_HOME/conf/下找到配置文档 settings.xml 在文档中添加如下的配置说明 & ...

  5. hbase配置hdfs的HA之后需要修改的路径

    hbase-site.xml中配置了hdfs的一个路径 <property> <name>hbase.rootdir</name> <value>hdf ...

  6. bitnami redmine安装、配置、备份、恢复(这篇文章靠谱)

    bitnami redmine安装.配置.备份.恢复 2012-12-17 12:33 2596人阅读 评论(0) 收藏 举报 1. 安装时语言选择英文,不可以选择中文,否则不能正常运行,可以在账户里 ...

  7. 配置RMAN备份环境

    关于配置RMAN备份环境你可以给每个目标数据库设置一些固定的配置,这些配置控制着RMAN多个方面的行为.例如,你可配置备份的保存策略.默认的备份目录.默认的备份设备类型等.你可以用show命令来查看配 ...

  8. Confluence 6 配置自动备份

    希望配置 Confluence 备份: 进入  > 基本配置(General Configuration) > 备份管理(Backup administration). 选择 编辑(Edi ...

  9. keepalived配置主从备份

    keepalived配置主从备份   keepalived是一个用于做双机热备(HA)的软件,常和haproxy联合起来做热备+负载均衡,达到高可用. 运行原理 keepalived通过选举(看服务器 ...

随机推荐

  1. 项目中遇到的Integer问题--转

    Integer类型值相等或不等分析 http://www.cnblogs.com/zzllx/p/5778470.html 看到博客园一位博友写的面试问题,其中一题是 Integer a = 1; I ...

  2. 初次体验百度eCharts遇到的问题和解决方法

    前言 上周在厌烦Highchart下,体验了下百度的eCharts,支持IE6.7.8+外,对数据在线编辑还有工具栏支持,体验时遇到了几个小问题,最近两天在尝试得到了一个解决方法. Tooltip时单 ...

  3. Javascript函数的几种写法

    最近在看某个插件的源码时,总是看到各种不同风格的js函数的写法.(怪我只是初级水平,看的一头雾水) 于是想找点资料,总结总结,心里不清不楚的总是很别扭! 1.常规写法 // 函数写法 function ...

  4. 在C#中,Json的序列化和反序列化的几种方式总结

    在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象. 什么是JSON? JSON (JavaScript Object Notation) ...

  5. Nancy之Pipelines三兄弟(Before After OnError)

    一.简单描述 Before:如果返回null,拦截器将主动权转给路由:如果返回Response对象,则路由不起作用. After : 没有返回值,可以在这里修改或替换当前的Response. OnEr ...

  6. SQL Server 存储过程遇到“表 '#TT' 没有标识属性。无法执行 SET 操作”错误

    创建临时表,往临时表插入数据的时候报的错误. 一开始提示没有打开主键,后来打开主键就提示上述错误异常. 从网上查找资料没有找到,然后又到群里问各位大牛,一位大牛告诉我是没有设置主键. 我又仔细看看提示 ...

  7. WinFrom 公共控件 Listview 的使用

    Listview绑定数据库数据展示与操作使用  1.拖一个Listview控件到项目中先将视图改为Details 2.编辑列 设置列头  添加columnHeader成员 Text 是显示的名称 3. ...

  8. PHP5各个版本的新功能和新特性总结

    因为 PHP 那“集百家之长”的蛋疼语法,加上社区氛围不好,很多人对新版本,新特征并无兴趣.本文将会介绍自 PHP5.2 起,直至 PHP5.6 中增加的新特征 本文目录:PHP5.2 以前:auto ...

  9. php strtotime 在32位操作系统下的限制

    php strtotime 在32位操作系统下的限制 <?php class DateHelper{ /** * 在32位操作系统下,超过 2038-01-19 03:14:07 ,会溢出 * ...

  10. java for循环冒泡排序

    int[]a =new int[]{7,19,66,21,88,40}; for(int i=1;i<=a.length-1;i++){ //比总长度减1趟就排好序了.因为每一趟出一个值. fo ...