• SQL SERVER数据库备份与复制(4):让SQL SERVER自动备份方法一


    我们通常在维护数据库的时候,都会建立一个备份的机制,在SQL Server中,我们就可以通过如下的方法来实现:

      在SQL Server 2005数据库中实现自动备份的具体步骤:

      1、打开SQL Server Management Studio

      2、启动SQL Server代理

      3、点击作业->新建作业

      4、"常规"中输入作业的名称

      5、新建步骤,类型选T-SQL,在下面的命令中输入下面语句(红色部分要根据自己的实际情况更改,D:sql2005ack改为自己的备份路径,sq_test修改为想备份的数据库的名称)

      

      如果SQL Server代理没有启动,我们先把其启动,然后新建立一个作业,名称命名为“MyDb完全备份”,在分类下面选择“数据库维护”,然后新建立作业第一个步骤,步骤名为“对数据进行完全备份”,然后在命令框中输入如下的SQL代码:

    DECLARE @strSql   VARCHAR(1000)
     ,@strSqlCmd VARCHAR(1000)
     ,@
    timeDateDiff INT
    SET @timeDateDiff = DATEDIFF(week,0,GETDATE())
    SET @timeDateDiff =
    CASE DATEPART(WEEKDAY,GETDATE())
     WHEN 1 THEN @timeDateDiff -1
     ELSE @timeDateDiff END
    SET @strSql='D:\DataBase\BackData\MyDb_'  -- 备份目录及备份的文件头
     +
    CONVERT(CHAR(8),DATEADD(week, @timeDateDiff,0),112)  -- 完全备份日期
     +'_0100'    -- 完全备份时间
     +'完全备份'

    SET @strSqlCmd= @strSql+'.BAK'    --备份文件的扩展名

    BACKUP DATABASE [MyDb]
     TO  D
    ISK = @strSqlCmd WITH INIT
     ,NOUNL
    OAD
     ,NAME = N'MyDb 备份'
     ,NOSK
    IP
     ,STATS = 10
     ,NOFORMAT

      操作如图一:

    建立作业对数据库进行完全备份

      图一 建立作业对数据库进行完全备份
      然后开始执行对数据库的压缩,在步骤中再新建一个作业,步骤名为“压缩数据库”,然后在命令框中输入如下的SQL代码:

    DECLARE @strSql   VARCHAR(1000)
     ,@strSqlCmd VARCHAR(1000)
     ,@timeDateDiff INT
     ,@strWeekDay VARCHAR(20)

    SET @timeDateDiff= DATEDIFF(week,0,GETDATE())
    SET @timeDateDiff=
    CASE DATEPART(WEEKDAY,GETDATE())
     WHEN 1 THEN @timeDateDiff-1
     ELSE @timeDateDiff END
    SET @strSql='D:\DataBase\BackData\MyDb_'  -- 备份目录及备份的文件头
     +CONVERT(CHAR(8),DATEADD(week,@timeDateDiff,0),112)  -- 完全备份日期
     +'_0100'    -- 完全备份时间
     +'完全备份'

    SET @strWeekDay= CASE DATEPART(WEEKDAY,GETDATE()) WHEN 1 THEN '星期天'
      WHEN 2 THEN '星期一'
      WHEN 3 THEN '星期二'
      WHEN 4 THEN '星期三'
      WHEN 5 THEN '星期四'
      WHEN 6 THEN '星期五'
      WHEN 7 THEN '星期六' END

    SET @strSqlCmd= 'ECHO 压缩开始日期: '+CONVERT(VARCHAR(20),GETDATE(),120)+' '+@strWeekDay+'  >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
    EXEC master.dbo.XP_
    CMDSHELL @strSqlCmd,NO_OUTPUT

    SET @strSqlCmd= 'RAR.EXE A -R '+@strSql+'.RAR '+@strSql+'.BAK >> D:\DataBase\BackData\CompressDataBase\MyDb__'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
    PRINT LEN(@strSqlCmd)
    PRINT (@strSqlCmd)

    EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT

    SET @strSqlCmd= 'ECHO 压缩日期: '+CONVERT(VARCHAR(20),GETDATE(),120)+' '+@strWeekDay+'  >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
    EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT

    操作如图二:

    建立作业对数据进行压缩

      图二 建立作业对数据进行压缩
      完成后我们可以看到操作步骤的对话框,如图三:

    数据完全备份的步骤

      图三 数据完全备份的步骤

      我们对照上图,注意两点,第一个是步骤1“成功时”这一列的显示,当成功的时候转到下一步,“失败时”当失败的时候失败后退出,步骤2“成功时”当成功的时候成功后退出,“失败时”当失败时失败后退出。确保两个步骤对数据操作的正常。

      再执行“调度”一栏,主要实现在什么时候执行这些作业,我们定在每周日一点的时候开始执行,如图四:

    建立调度

      图四 建立调度
      这样就可以建立好对数据库的整个完全备份了。

      有时我们数据在遭到破坏的时候,而在恢复到上次的整个备份时,就会产生很多丢失的数据了,这时我们就必须还得建立另外一种备份的机制—差异备份。

      步骤还和上面一样,我们建立一个作业,命名为“MyDb差异备份”,在步骤里面同样是建立两个步骤,分别是差异备份和差异压缩,步骤一在命令框中输入内容如下:

    DECLARE @strSql   VARCHAR(1000)
     ,@strSqlCmd VARCHAR(1000)
     ,@timeDateDiff INT
    SET @timeDateDiff = DATEDIFF(week,0,GETDATE())
    SET @timeDateDiff = CASE DATEPART(WEEKDAY,GETDATE())
     WHEN 1 THEN @timeDateDiff -1
     ELSE @timeDateDiff END
    SET @strSql='D:\DataBase\BackData\MyDb_'  -- 备份目录及备份的文件头
     +CONVERT(CHAR(8),DATEADD(week, @timeDateDiff,0),112)  -- 完全备份日期
     +'_0100'    -- 完全备份时间
     +'差异备份'
     +'_'+CONVERT(CHAR(8),GETDATE(),112) -- 差异备份日期
     +'_0300'    -- 差异备份时间

    SET @strSqlCmd= @strSql+'.BAK'    --备份文件的扩展名

    BACKUP DATABASE [webEIMS2008]
     TO  DISK = @cSqlCmd WITH INIT
     ,NOUNLOAD
     ,DIFFEREN
    TIAL
     ,NAME = N'MyDb差异备份'
     ,NOSKIP
     ,STATS = 10
     ,NOFORMAT

      我们可以看到,差异备份除了文件名命名格式不一样外,就在备份执行SQL语句时增加了了下DIFFERENTIAL参数,然后再执行。

      步骤二在命令框中执行如下:
      
    DECLARE @strSql   VARCHAR(1000)
     ,@strSqlCmd VARCHAR(1000)
     ,@timeDateDiff INT
     ,@strWeekDay VARCHAR(20)

    SET @timeDateDiff= DATEDIFF(week,0,GETDATE())
    SET @timeDateDiff= CASE DATEPART(WEEKDAY,GETDATE())
     WHEN 1 THEN @timeDateDiff-1
     ELSE @timeDateDiff END
    SET @strSql='D:\DataBase\BackData\MyDb_'   -- 备份目录及备份的文件头
     +CONVERT(CHAR(8),DATEADD(week,@timeDateDiff,0),112)  -- 完全备份日期
     +'_0100'    -- 完全备份时间
     +'差异备份'
     +'_'+CONVERT(CHAR(8),GETDATE(),112) -- 差异备份日期
     +'_0300'    -- 差异备份时间


    SET @strWeekDay= CASE DATEPART(WEEKDAY,GETDATE()) WHEN 1 THEN '星期天'
      WHEN 2 THEN '星期一'
      WHEN 3 THEN '星期二'
      WHEN 4 THEN '星期三'
      WHEN 5 THEN '星期四'
      WHEN 6 THEN '星期五'
      WHEN 7 THEN '星期六' END

    SET @strSqlCmd= 'ECHO 压缩开始日期: '+CONVERT(VARCHAR(20),GETDATE(),120)+' '+@strWeekDay+'  >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
    EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT

    SET @strSqlCmd= 'RAR.EXE A -R '+@strSql+'.RAR '+@strSql+'.BAK >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
    PRINT LEN(@strSqlCmd)
    PRINT (@strSqlCmd)
    EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT

    SET @strSqlCmd= 'ECHO 压缩结束日期: '+CONVERT(VARCHAR(20),GETDATE(),120)+' '+@strWeekDay+'  >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
    EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT

    这时我们已经建立好了步骤,只是现在建立作业调度的时候有些变化,我们看图五:

    建立差异备份作业调度

      图五 建立差异备份作业调度
      对比完全备份建立的作业调度,在这里我们可以看到,我们选择的时间是除了周日以外的每天夜里3点的时候,自动执行此次调度。

      当然时间是自己灵活分配的,如数据发生的变化比较大,我们可以选择每天,然后频率选择发生周期性短一点,这样我们数据在遭到破坏的时候,我们就可以及时的恢复了。

      如果在SQL Server2000中,我们可以建立如上的作业就可以对数据进行备份了,而对于SQL Server2005,还有一点细微的变化,因为它默认是不支持xp_cmdshell执行命令的,SQL Server 已封锁元件 'xp_cmdshell' 的 程序 'sys.xp_cmdshell' 之存取,因为此元件已经由此伺服器的安全性组态关闭。系统管理员可以使用sp_configure来启用 'xp_cmdshell' 的使用。所以我们得恢复其执行命令:

      用下面一句话就可以了解决了。  

    EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;

  • 相关阅读:
    字体图标
    HBase Shell 常用命令
    Centos7 KVM日常运维
    Centos7 KVM安装部署
    Centos7安装Puppet自动运维
    Centos7安装ansible自动运维
    H3C巡检基本命令
    组播学习
    Centos7下使用LVM给系统硬盘扩容
    python 类中方法总结 --- 实例方法、类方法、静态方法
  • 原文地址:https://www.cnblogs.com/pricks/p/1644200.html
Copyright © 2020-2023  润新知