项目背景

手头有一个比较老的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. 树莓派使用python+继电器控制220V灯泡

    需要的材料 1.继电器:继电器是一种电控制器件,它实际上是用小电流去控制大电流运作的一种"自动开关",我们这里用它来控制电灯.控制了继电器就等于控制了电灯. 我购买的是某宝上3块钱 ...

  2. 讲师征集| .NET Conf China 2021正式启动

    最近社区小伙伴们一直在为11月即将在武汉举办的 第三届.NET中国峰会而忙碌,社区活动官网设计和开发工作还在进行,我们在国庆节的前一天晚上向社区正式启动了活动的序幕,也就是我们确定好了举办地点.时间, ...

  3. java8的新特性之lambda表达式和方法引用

    1.1. Lambda表达式 通过具体的实例去体会lambda表达式对于我们代码的简化,其实我们不去深究他的底层原理和背景,仅仅从用法上去理解,关注两方面: lambda表达式是Java8的一个语法糖 ...

  4. Python小知识之对象的比较

    好久不见 国庆回了趟老家,躺平了10天.作息时间基本和小学生差不多,8.9点就睡了, 那滋味别提多舒服了.时间也和小时候过得一样慢了...长时间不更新,还是不行滴,粉都快掉没了. 今天就结合日常生活的 ...

  5. 2.2 DDD Layers & Clean Architecture DDD分层和简洁架构

    DDD Layers & Clean Architecture DDD分层和简洁架构 There are four fundamental layers of a Domain Driven ...

  6. 2020年OO助教工作总结

    随着这学期课程的落幕,我一学期的OO助教工作也宣告结束.这学期我的工作主要在系统组,和OO后台的数据库打交道. 作业查重 我几乎每周都会做的例行工作,是对每周的homework进行查重管理.由于使用了 ...

  7. linux下的IO模型---学习笔记

    1.linux文件系统和缓存 文件系统接口 文件系统-一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问. 存储层次 文件系统缓存 主存(通常时DRAM)的一块区域 ...

  8. 『学了就忘』Linux基础命令 — 26、帮助命令

    目录 1.man命令 (1)man命令的快捷键 (2)man命令的帮助级别(了解即可) (3)man命令的使用 2.info命令 3.help命令 4.--help选项 1.man命令 man是最常见 ...

  9. float32 和 float64

    float32 和 float64 Go语言中提供了两种精度的浮点数 float32 和 float64. float32,也即我们常说的单精度,存储占用4个字节,也即4*8=32位,其中1位用来符号 ...

  10. 2021.11.4测试T1-妹子

    题目 今天测试,直接挂完了 写了四个小时,最后发现自己题目理解错误了 有两个区间,在输入了 \(l\) 和 \(r\) 以后,进行查询 \[ min(max(a_1,a_2,...a_p,b_{p+1 ...