项目背景

手头有一个比较老的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. CF1446F-Line Distance【计算几何,树状数组,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1446F 题目大意 给出\(n\)个点,求所有点对构成的直线中与原点距离第\(k\)小的距离 \(2\leq n ...

  2. 基于SpringBoot+Mybatis plus+React.js实现条件选择切换搜索功能

    笔记/朱季谦 在写React前端逻辑时,经常遇到可以切换不同条件的列表查询功能,例如下边截图这样的,其实,这块代码基本都一个逻辑,可以一次性将实现过程记录下来,待以后再遇到时,直接根据笔记复用即可. ...

  3. 经典软件测试面试题目:Android 和 ios 测试区别?这样回答:稳!

    Android 和  ios 测试区别? App 测试中 ios 和 Android 有哪些区别呢?1.Android 长按 home 键呼出应用列表和切换应用,然后右滑则终止应用:2.多分辨率测试, ...

  4. VueCLI3 创建vue项目

    关于旧版本 Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm uninstall vu ...

  5. [RabbitMQ]AMQP 0-9-1:模型

    上一篇文章(RabbitMQ:下载 & 安装)中,我们下载并且安装了RabbitMQ,并且成功注册了RabbitMQ服务.本文我们将学习RabbitMQ中最基础.最重要的概念:AMQP 0-9 ...

  6. NOIP 模拟二 考试总结

    SDOI2015 排序 今天看到这道题,没有一点思路,暴力都没的打...还是理解错题意了,操作不同位置不是说改不同的区间,而是不同操作的顺序...考场上如果知道这个的话最少暴力拿一半啊,因为正解本来就 ...

  7. NOIP 模拟一 考试总结

    序列 考场上信心满满的打了nlogn的做法,我以为我稳了.据考试结束1h时发现看错题目了,打成了不连续的子序列.匆匆改了n2logn的做法.考试结束后,我发现我跪了.原来到终点才会发现我做的和人家不是 ...

  8. Wireshark简单协议的抓包分析

    一.实验目的 HTTP.TCP.UDP.ICMP.ARP.IP.FTP.TELNET查询分析 基本掌握查询命令的使用方法 二.实验环境 硬件环境:一台Windows7系统,一台XP系统 软件环境:VM ...

  9. Jenkins REST API 实例

    背景:    Jenkins具有丰富的插件生态,足以满足我们日常工作的需求,但如果我们想通过具体的Jenkins任务直接对外提供服务,而不想将内部的具体实现对外暴露(否则,需添加对应的用户权限,通过页 ...

  10. 基于Hyperledger Fabric实现ERC721

    介绍 超级账本(Hyperledger)项目是首个面向企业应用场景的开源分布式账本平台.由linux基金会牵头,包括 IBM 等 30家初始企业成员共同成立的. 区块链网络主要有三种类型:公共区块链. ...