项目背景

手头有一个比较老的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. P4201-[NOI2008]设计路线【结论,树形dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4201 题目大意 给出\(n\)个点的一棵树开始所有边都是白色,选出若干条没有公共点的路径将上面所有边变为黑色. ...

  2. 吴恩达-神经网络-week1-hw3

    Ref:https://blog.csdn.net/u013733326/article/details/79702148 点击查看代码 from testCases import * from pl ...

  3. 设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 。写出程序。

    题目:设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 .写出程序. 代码实现 public class ThreadTest{ private int j; c ...

  4. (目录)Fortran学习笔记:开坑!!!

    前言:因为某些原因,需要使用Fortran编写程序,记录下Fortran语法学习过程中的部分笔记.在此开坑记录,立下Flag,"希望年末能够更新完" Fortran 学习笔记 陈橙 ...

  5. 使用vxe table组件时,edit-render配置$select',选中option后关闭cell的激活状态,显示选中option的value问题

    在我的项目中使用vxe table组件时,edit-render配置{name: '$select', options: [{label:"脉搏",value:"maib ...

  6. Go语言核心36讲(Go语言基础知识一)--学习笔记

    01 | 工作区和GOPATH 从 Go 1.5 版本的自举(即用 Go 语言编写程序来实现 Go 语言自身),到 Go 1.7 版本的极速 GC(也称垃圾回收器),再到 2018 年 2 月发布的 ...

  7. 面试官:为什么需要Java内存模型?

    面试官:今天想跟你聊聊Java内存模型,这块你了解过吗? 候选者:嗯,我简单说下我的理解吧.那我就从为什么要有Java内存模型开始讲起吧 面试官:开始你的表演吧. 候选者:那我先说下背景吧 候选者:1 ...

  8. CF992E Nastya and King-Shamans(线段树二分+思维)

    这是一道卡常好题 从160s卡到36s qwq 由于题目设计到原数组的单点修改,那么就对应着前缀和数组上的区间加. 很显然能想到用线段树来维护这么个东西. 那么该如果求题目要求的位置呢 我们来看这个题 ...

  9. 编程模仿MySql客服端

    写在前面 通过自己编写的Java代码程序,去模仿实现MySql客服端的简单功能,最终以控制台操作,很像在Dos窗口通过命令操作MySql数据库. 关键问题 在编写过程中遇到的一些小问题和一些值得留心注 ...

  10. Spring Boot 整合 Apache Ignite

    关于Ignite的介绍,这边推荐三个链接进行学习了解. https://ignite.apache.org/,首选还是官网,不过是英文版,如果阅读比较吃力可以选择下方两个链接. https://www ...