项目背景

手头有一个比较老的SQL Sever 9.0 的服务器,因为是生产环境,使用的项目比较多,还有一些项目半年一年才用一次,所以不想将数据库服务器升级到最新的SQL Server, 有可能升级后那个产品就不能使用了,又需要折腾几天才能用,而项目使用的时候又是要发布了,也没有时间给你折腾。

这个数据库服务器的数据都是手动进行备份的,因为我比较懒,不像每次手动备份,就考虑找一个自动备份的方案。

解决方案

方案一,是采用SQL的定时备份,建立作业来操作,这里有完整的使用手册:

https://www.z01.com/help/DBA/3239.shtml

现在的问题是,这台服务器的sql server不支持代理作业,只能另外想办法了。

于有了方案二

方案二:基于t-sql方法进行查询备份

下面开始说方案二

方案思路:

    1. 使用存储过程将所有数据库备份到本地。
  • 2.创建一个Windows定期任务每天运行存储过程,本来SQL Server Agent 来创建定期任务,但是这个服务器上使用Agent 创建计划总是有问题。

  • 3.创建Windows 定期任务将备份好的数据库Copy 到其它机器上。

接下来我们一步一步详细介绍。

1.1 在 Master 数据库上创建一个备份所有数据库的存储过程。

USE [master]
GO /****** Object: StoredProcedure [dbo].[ZL_BackAllDatabase] Script Date: 2020/03/04 10:51:20 ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE PROCEDURE [dbo].[ZL_BackAllDatabase]
(
@path nvarchar(500) --备份的路径,不带后面的/字符
)
AS
--功能:备份所有数据库 --declare @back_date varchar(20) --备份的时间
declare @file varchar(500) --备份的文件名
declare @dbname varchar(50) --备份的数据库名
declare @sql varchar(500) --执行备份时的sql
DECLARE dba_database CURSOR FOR --所有数据库的光标
select [name] from sysdatabases order by [name] --SET @back_date = convert(varchar ,getdate(), 112)
OPEN dba_database FETCH NEXT FROM dba_database into @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@dbname <> 'tempdb')
BEGIN
--SET @file = @path + '\' + @dbname + '-' + @back_date + '.bak' --生成备份的文件名
SET @file = @path + '\' + @dbname + '.bak' --生成备份的文件名
SET @sql = 'backup database [' + @dbname + '] to disk = ' + ''''+ @file + '''' + ' with init'
PRINT @sql
EXEC (@sql)
END FETCH NEXT FROM dba_database into @dbname
END CLOSE dba_database
DEALLOCATE dba_database
GO

  其中下面一句主要是进行备份动作的,之所以使用With init 是为了覆盖之前备份的内容。

SET @sql = 'backup database [' + @dbname + '] to disk = ' + ''''+ @file + '''' +  ' with init'

上面方法,可以手工执行,查询方法 :

/*
查询方法 :
exec dbo.ZL_BackAllDatabase 'E:\DBBackup'
*/

2 创建Windows 定时任务,定时备份

2.1创建一个bat 调用存储过程, 在命令行下进行备份。

@ECHO OFF

SET dbhost=127.0.0.1
SET dbuser=sa
SET dbpasswd=
set dbName=master
SET sqlpath=%~dp0
set sqlfile=backup.sql osql -S %dbhost% -U %dbuser% -P %dbpasswd% -d %dbName% -i %sqlpath%%sqlfile% ECHO finish @ECHO Done!

开始没有使用,备份了几次后发现备份文件越来越大,硬盘被占用空间增长很快。

2.2 创建 Windows 任务定时执行 bat





3. 创建一个Window 任务Copy 备份文件到其它机器

3.1 创建Copy.bat 进行Copy

set source=F:\DBBackup
set target=\\xa-at-file\ATShareData\qa_sql_dbback del "%target%\*" /q xcopy "%source%" "%target%" /s /y del "%source%\*" /q

3.2 创建Windows 任务定时执行Copy.bat ,具体任务配置就不描述了,同上。

这样就完成了文件的自动定期备份任务。

通过t-sql定期自动备份SQL Server 上的所有数据库的更多相关文章

  1. 设定MS SQL Server 2008定期自动备份

    1.说明 SQL Server2008 本身具有定期自动备份功能,我们只需要通过简单的配置就可以实现非常简单高效的自动备份功能. 2.打开SQL Server代理服务 要实现自动备份功能,首先要保证S ...

  2. SQL Server 2008如何创建定期自动备份任务

    我们知道,利用SQL Server 2008数据库可以实现数据库的定期自动备份.方法是用SQL SERVER 2008自带的维护计划创建一个计划对数据库进行备份,下面我们将SQL SERVER 200 ...

  3. 自动备份SQL数据库到云存储Storage

    如何自动备份SQL数据库到Storage呢. 前提条件需要SQL Server2012 SP1 CU2或更高版本 1. 备份SQL Azure数据库到云存储Storage 1)在SQL Server ...

  4. SQL8数据库定期自动备份

    我们知道,利用SQL Server 2008数据库可以实现数据库的定期自动备份.方法是用SQL SERVER 2008自带的维护计划创建一个计划对数据库进行备份, 下面我们将SQL SERVER 20 ...

  5. SQL2000数据库定期自动备份与修改

    SQL2000数据库定期自动备份与修改 http://www.veryhuo.com 2009-11-19 烈火网 投递稿件 我有话说   在SQL server企业管理器中,可以设置数据库的定期自动 ...

  6. SQL Server上唯一的数据库集群:负载均衡、读写分离、容灾(数据零丢失、服务高可用)

    SQL Server上唯一的数据库集群:负载均衡.读写分离.容灾(数据零丢失.服务高可用).审计.优化,全面解决数据库用户问题.一键安装,易用稳定,性价比高,下载链接:http://www.zheti ...

  7. [转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库

    时间:2013年8月21日 前提条件:假设你已经安装好了oracle和PL/SQL Developer,知道远程服务器的IP和数据库端口,知道远程服务器上的oracle数据库名和密码 如何用PL/SQ ...

  8. SQL Server 2008创建定期自动备份任务

    首先需要启动SQL Server Agent服务,这个服务如果不启动是无法运行新建作业的,点击“开始”–“所有程序”–“Microsoft SQL Server 2008”–“启动SQL Server ...

  9. SQL SERVER2005自动备份 2012.3.29

    要想在 SQL2005上进行数据库的自动备份必须把sql server的SQL Server Agent服务开启,否则是无法进行自动备份的 启动完成之后,用户可以直接在“管理”下面的“维护计划”选项来 ...

随机推荐

  1. appium启动ios系统上面的app需求的参数

    Appium启动APP至少需要7个参数  'platformVersion','deviceName'.'udid'.'bundleId'.'platformName'.'automationName ...

  2. 小白自制Linux开发板 五. Debian文件系统制作,以及WIFI配置、交换分区配置

    该片文章将完整记录一个Debian的最小文件系统的生成,以及自定义配置WIFI组件.网络组件和交换分区配置 本文章参考:https://whycan.com/t_4236.htmlhttp://www ...

  3. 详解python三大器——迭代器、生成器、装饰器

    迭代器 聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭代得到的结果作为下一次迭代的初始值). 可迭代对象(i ...

  4. 【转载】[经验] 嵌入式stm32实用的排序算法 - 交换排序

    Ⅰ.写在前面 前面写了关于ADC采集电压的文章,大家除了求平均的方式来处理采样值,还有没有使用到其他的方式来处理采集值呢? 在某些情况下就需要对一组数据进行排序,并提取头特定的数据出来使用. 排序的应 ...

  5. 2021-2022 20211420 《信息安全专业导论》安装Linux操作系统并学习Linux基础

    作业信息 |作业属于|https://edu.cnblogs.com/campus/besti/2021-2022-1fois |作业要求|https://edu.cnblogs.com/campus ...

  6. Spring中属性注入的几种方式以及复杂属性的注入详解

    在spring框架中,属性的注入我们有多种方式,我们可以通过set方法注入,可以通过构造方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List.Map.Prope ...

  7. 【UE4 C++】 启动 / 关闭外部exe、开启虚拟键盘

    启动/关闭外部exe 引擎自带 FPlatformProcess::CreateProc() FPlatformProcess::TerminateProc() windows api ShellEx ...

  8. Scrum Meeting 0505

    零.说明 日期:2021-5-5 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成邮箱注册页面功 ...

  9. 单片机零基础学习之从“点灯”入门STM32

    本篇文章通过一个简单的例子来熟悉模块化编程以及利用库函数的方法进行开发使用STM32外设的基本流程. 首先,我们打开本讲的例程,在工程目录我们可以看到驱动分组下有 led.delay 两个.c源文件, ...

  10. Python课程笔记(八)

    一些简单的文件操作,学过linux的话理解感觉不会很难.课程代码 一.OS 目录方法 这个模块提供了一种方便的使用操作系统函数的方法 函数 说明 os.mkdir("path") ...