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

如果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  DISK = @strSqlCmd WITH INIT
 ,NOUNLOAD
 ,NAME = N'MyDb 备份'
 ,NOSKIP
 ,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
 ,DIFFERENTIAL
 ,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;

如何让SQL Server数据库自动备份并压缩相关推荐

  1. SQL Server数据库自动备份

    在备份数据之前,为备份数据文件建立一个独立的文件夹,方便区分: 一.开启SQL代理服务: 找到SQL Server配置管理器,如图: 二.找到SQL Server服务-->右边找到SQL Ser ...

  2. 【已解决】SQL Server2014数据库自动备份之作业

    SQL Server2014数据库自动备份之作业 1.SQL Server数据库自动备份可以有两种操作 第一种是在SQL控制台下的服务器名称展开,展开"管理"–选择"维护 ...

  3. SQL SERVER 2008自动备份维护计划

    日常工作中利用SQL SQLSERVER 2008 的维护计划对数据库进行定期的备份,这样一方面可以对数据库进行备份保证数据安全另一方面也可以减轻对维护人员的负担.一般对于WEB 服务器进行维护都是在 ...

  4. SQL Server定期自动备份

    SQL Server定期自动备份 企业管理器中的Tools,Database Maintenance Planner,可以设置数据库的定期自动备份计划.并通过启动Sql server Agent来自动 ...

  5. Sql Server数据库的备份和恢复措施

    Sql   Server数据库的备份和恢复措施 Sql   Server数据库的备份和恢复措施 一.备份数据库 1.打开SQL企业管理器,在控制台根目录中依次点开Microsoft   SQL   S ...

  6. [转贴]ASP.NET下对远程SQL SERVER数据库的备份和恢复的存储过程

    Sql server的帮助文档地址,在IE里面直接输入就行 mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Boo ...

  7. 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的备份方式...

    数据备份一直被认为数据库的生命,也就是一个DBA所要掌握的主要技能之一,本篇就是介绍SQL Server备份原则,SQL Server数据库分为数据文件和日志文件.为了使得数据库能够恢复一致点,备份不 ...

  8. sql server 设置自动备份

    打开SQL server配置管理器,设置sql server服务里的SQL server代理服务为自动并启动. 启动Master Data Services Configuration Manager ...

  9. SQL Server 数据库之备份和恢复数据库

    备份和恢复数据库 1. 概述 2. 备份类型 3. 恢复模式 3.1 简单恢复模式 3.2 完全恢复模式和大容量日志恢复模式 4. 备份数据库 5. 恢复数据库 1. 概述 在一些对数据可靠性要求很高 ...

最新文章

  1. JRebel for Android 编译神器
  2. 为什么互联网能创造商业奇迹——我的互联网产品观
  3. 2 字符串String
  4. 安卓进阶系列-04自定义原型图片显示(CircleImageView)的使用
  5. 自然语言处理 —— 2.2 使用词嵌入
  6. 使用模板实现asp代码和页面分离_asp技巧
  7. React-Native从搭建环境到 发布 APP 指北
  8. Spring之Bean配置
  9. Mysql 的 GROUP_CONCAT() 函数拼接串
  10. React Native Button使用
  11. 勤哲excel服务器自动计算工资,勤哲Excel服务器软件实现财务自动化管理系统
  12. 大年三十问候导师的后果
  13. Unity游戏神经网络版坦克大战
  14. 内存屏障(Memory Barrier)(一)什么是写屏障?
  15. c语言kbhit函数在哪里,kbhit()函数
  16. 微光系列之青春无敌美少女
  17. lp_solve 线性规划求解包的使用
  18. spring cloud NetFlix 学习笔记
  19. EasyNVR摄像机网页直播之问题解决:Failed_SYSTEM_CurrentCont......_Application_EasyNVR_Service registry key alr
  20. 蓝桥杯1——李白打酒加强版

热门文章

  1. Linux安装软件、python开发环境
  2. python对比php快速入门(语言为python2.7)
  3. 计算机科学与技术优劣,计算机科学与技术专业优势多多
  4. 详解Material Design体系组件
  5. java需要记住什么英文_JAVA英语面试题(苦涩的记忆)
  6. 计算机会议在美国的英语文章,英文一篇计算机国际会议的开幕词
  7. 无线传感网络在医疗领域的应用
  8. docker出现Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use的解决方法
  9. 机器学习05|一万五字:SVM支持向量机02 【jupyter代码详解篇】
  10. 支持+86的手机和电话号码验证正则表达式