很多时候,我们都需要将数据库进行备份,当服务器上数据库较多时,不可能一个数据库创建一个定时任务进行备份,这时,就需要进行批量的数据库备份操作,好了,废话不多说,具体实现语句如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
--开启文件夹权限
GO
SP_CONFIGURE 'SHOW ADVANCED OPTIONS',1
RECONFIGURE
GO
SP_CONFIGURE 'XP_CMDSHELL',1
RECONFIGURE
GO
 
DECLARE
      @FileName VARCHAR(200),
      @CurrentTime VARCHAR(50),
      @DBName VARCHAR(100),
      @SQL VARCHAR(1000),
      @FilePath VARCHAR(100)
 
--SET @CurrentTime = CONVERT(CHAR(8),GETDATE(),112) + CAST(DATEPART(hh, GETDATE()) AS VARCHAR) + CAST(DATEPART(mi, GETDATE()) AS VARCHAR)
--年月日
SET @CurrentTime = CONVERT(CHAR(8),GETDATE(),112)
 
 
SET @FilePath = 'F:\DB_Daily_backup\' + @CurrentTime + '\'
--select CONVERT(CHAR(8),GETDATE(),112)
--文件夹不存在,则创建
declare @TEMP TABLE(A INT,B INT,C INT)--建立虚拟表,用来判断文件夹是否存在
INSERT @TEMP EXEC [MASTER]..XP_FILEEXIST @FilePath
IF NOT EXISTS(SELECT * FROM @TEMP WHERE B=1)
BEGIN
    --XP_CMDSHELL不允许使用变量拼接,所以使用exec方法
    declare @EX NVARCHAR(255)
    SET @EX = 'EXEC XP_CMDSHELL ''MKDIR ' + @FilePath + '''';
    EXEC(@EX)
END
 
 
--获取所有非系统数据库
DECLARE CurDBName CURSOR FOR
    SELECT NAME FROM Master..SysDatabases where dbid>4
 
--循环备份数据库
OPEN CurDBName
FETCH NEXT FROM CurDBName INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
    --Execute Backup
    SET @FileName = @FilePath + @DBName + '_' + @CurrentTime
    SET @SQL = 'BACKUP DATABASE ['+ @DBName +'TO DISK = ''' + @FileName + '.bak' +
     ''' WITH NOINIT, NOUNLOAD, NAME = N''' + @DBName + '_backup'', NOSKIP, STATS = 10, NOFORMAT'
    EXEC(@SQL)
 
    --Get Next DataBase
    FETCH NEXT FROM CurDBName INTO @DBName
END
 
CLOSE CurDBName
DEALLOCATE CurDBName

  在SQL代理中,建立定时作业,按指定时间定时执行该脚本即可。

更多时候,我们可能需要对备份的文件做一个定时清理,例如清理1年前的文件,以下示例,清楚30天前备份文件夹:(目录:F:\DB_Daily_backup下30天前文件,-30代表30天前,/ s q表示无提示删除,下面有参数说明)

这里我是删除文件夹,所以使用的是rd命令:del用来删除文件;rd用来删除文件夹

  1. --开启文件夹权限
  2. GO
  3. SP_CONFIGURE 'SHOW ADVANCED OPTIONS',1
  4. RECONFIGURE
  5. GO
  6. SP_CONFIGURE 'XP_CMDSHELL',1
  7. RECONFIGURE
  8. GO
  9. EXEC xp_cmdshell 'forfiles /p F:\DB_Daily_backup\ /m * -d -30 /c "cmd /c rd /s /q @path"'
  1. 附:forfiles基本语法介绍
    命令
    FORFILES [/P pathname] [/M searchmask] [/S]
             [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]
     
    方法1
    描述:可以删除7天以前的后缀名为log的日志文件。如今天是6.29,那么会删除6.22
    号以前创建的文件。不会删除到回收站。
    指定路径为要删除的文件夹路径,该批处理可以放在任意文件夹下。
    forfiles /p D:\aizzw\LOG /m *.log -d -7 /c "cmd /c del /f @path"
    参数解释:
    这里的/p 指的是要删除的备份文件路径
            /m 指的是要匹配的字符,通配符为*号,后缀名可以根据实际情况修改。
    zzw*.log;*.bak;*.txt
    -d 指的是日期,“-d -7”指的是从但前日期当前日期往前减7天。
    /c 指的是执行命令
    @path 返回文件完整路径
    方法2
    描述:可以删除7天以前的后缀名为log的日志文件。
    不需要指定路径,必须放在要删除日志的文件下。删除当前文件夹下的匹配文件。
    forfiles /m *.log -d -7 /c "cmd /c del /f @path"
    引自:https://www.cnblogs.com/wcLT/p/4761236.html
  2.  
  3. 附:del命令参数说明
    /F            强制删除只读文件。 
    /S            从所有子目录删除指定文件。 
    /Q            安静模式。删除全局通配符时,不要求确认。 
    /A            根据属性选择要删除的文件。 
  4.  
  5. RMDIR [/S] [/Q] [drive:]path 
    RD [/S] [/Q] [drive:]path 
    /除目录本身外,还将删除指定目录下的所有文件。用于删除目录树。 
    /安静模式,带 /删除目录树时不要求确认

sql server 批量备份数据库及删除N天前的备份数据的更多相关文章

  1. Mongodb自动备份数据库并删除指定天数前的备份

    1.创建Mongodb数据库备份目录 mkdir -p /home/backup/mongod_bak/mongod_bak_now mkdir -p /home/backup/mongod_bak/ ...

  2. SqlServer批量备份多个数据库且删除3天前的备份

    /******************************************* * 批量备份数据库且删除3天前的备份 ************************************ ...

  3. Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份

    说明: Oracle数据库服务器操作系统:CentOSIP:192.168.0.198端口:1521SID:orclOracle数据库版本:Oracle11gR2 具体操作: 1.root用户登录服务 ...

  4. Linux下自动备份Oracle数据库并删除指定天数前的备份

    说明: Oracle数据库服务器 操作系统:CentOS IP:192.168.0.198 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 具体操作: 1.root用 ...

  5. Windows环境下Oracle数据库的自动备份脚本自动删除30天前的备份

    @echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...

  6. MSSQL Server2012备份所有数据库到网络共享盘上面,并自动删除几天前的备份。。

    --要备份到哪一服务的IP网络位置,要提前打开文件夹共享.这里还要输入用户名和密码,下面这一行是建立共享 exec master..xp_cmdshell 'net use \\192.168.8.1 ...

  7. SQL Server 批量主分区备份(Multiple Jobs)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 案例分析(Case) 方案一(Solution One) 方案二(Solution Two) ...

  8. SQL Server 批量主分区备份(One Job)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 案例分析(Case) 实现代码(SQL Codes) 主分区完整.差异还原(Primary B ...

  9. SQL Server 批量创建作业(备份主分区)

    一. 需求背景 在我的数据库实例中,有很多类似下图所示的数据库,这些数据库的名称是有规律的,每个数据库包含的表都是相同的,其中2个表是类似流水记录的表,表的数据量会比较大,占用的空间有几十G到上百G不 ...

随机推荐

  1. C#工具类SqlServerHelper,基于System.Data.SqlClient封装

    源码: using System; using System.Collections.Generic; using System.Data; using System.Linq; using Syst ...

  2. vue引用bootstrap3

    引用bootstrap   yarn add bootstrap@3 基于jquery,因此还需要引用2个包,jquery和popper.js, yarn add jquery popper.js - ...

  3. Markdown 基础学习

    Markdown是什么?    Markdwon是一种轻量级标记语言,它以纯文本形式(易读.易写.易更改)编写文档,并最终以HTLM格式发布.Markdown也可以理解为将以 MARKDOWN语法编写 ...

  4. 第一章 权限管理DEMO简介

    源代码GitHub:https://github.com/ZhaoRd/Zrd_0001_AuthorityManagement 1.系列介绍 工作已有五年之久,一直有想通过博客写点自己知道的,在博客 ...

  5. React用脚手架实际开发项目!

    安装脚手架: npm i create-react-app -g 创建项目命令: create-react-app 项目名字 启动命令:yarn start 如果不用脚手架,需要创建一下页面: 再安装 ...

  6. 以一道ctf学习python脚本

    今天做了省赛初赛的ctf比赛,过程真是忐忑,奋战了6个小时(本来是三个小时的,哈哈哈哈). 不说了! 不说了! 说多了都是泪~ 看题吧,题目就是一道流量分析题,里面有一段icmp包,icmp包的ttl ...

  7. install和cp

    在Makefile里会用到install,其他地方会用cp命令 主要区别: 如果目标文件存在,cp会先清空文件后往里写入新文件,而install则会先删除掉原先的文件然后写入新文件.这是因为往正在 使 ...

  8. Red Hat安装虚拟带库

    1.安装五个包 # yum -y install lzo-devel sg3_utils lsscsi mtx mt-st mtx源码:http://sourceforge.net/ 2.下载最新版的 ...

  9. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  10. Oracle使用命令行登录提示ERROR: ORA-01017: invalid username/password; logon denied

    刚在Windows上面安装好Oracle 10g,刚开始使用PLSQLDevelop软件登录提示  not logged on ,然后使用命令行登录提示 ERROR: ORA-01017: inval ...