通过t-sql定期自动备份SQL Server 上的所有数据库
项目背景
手头有一个比较老的SQL Sever 9.0 的服务器,因为是生产环境,使用的项目比较多,还有一些项目半年一年才用一次,所以不想将数据库服务器升级到最新的SQL Server, 有可能升级后那个产品就不能使用了,又需要折腾几天才能用,而项目使用的时候又是要发布了,也没有时间给你折腾。
这个数据库服务器的数据都是手动进行备份的,因为我比较懒,不像每次手动备份,就考虑找一个自动备份的方案。
解决方案
方案一,是采用SQL的定时备份,建立作业来操作,这里有完整的使用手册:
https://www.z01.com/help/DBA/3239.shtml
现在的问题是,这台服务器的sql server不支持代理作业,只能另外想办法了。
于有了方案二
方案二:基于t-sql方法进行查询备份
下面开始说方案二
方案思路:
- 使用存储过程将所有数据库备份到本地。
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 上的所有数据库的更多相关文章
- 设定MS SQL Server 2008定期自动备份
1.说明 SQL Server2008 本身具有定期自动备份功能,我们只需要通过简单的配置就可以实现非常简单高效的自动备份功能. 2.打开SQL Server代理服务 要实现自动备份功能,首先要保证S ...
- SQL Server 2008如何创建定期自动备份任务
我们知道,利用SQL Server 2008数据库可以实现数据库的定期自动备份.方法是用SQL SERVER 2008自带的维护计划创建一个计划对数据库进行备份,下面我们将SQL SERVER 200 ...
- 自动备份SQL数据库到云存储Storage
如何自动备份SQL数据库到Storage呢. 前提条件需要SQL Server2012 SP1 CU2或更高版本 1. 备份SQL Azure数据库到云存储Storage 1)在SQL Server ...
- SQL8数据库定期自动备份
我们知道,利用SQL Server 2008数据库可以实现数据库的定期自动备份.方法是用SQL SERVER 2008自带的维护计划创建一个计划对数据库进行备份, 下面我们将SQL SERVER 20 ...
- SQL2000数据库定期自动备份与修改
SQL2000数据库定期自动备份与修改 http://www.veryhuo.com 2009-11-19 烈火网 投递稿件 我有话说 在SQL server企业管理器中,可以设置数据库的定期自动 ...
- SQL Server上唯一的数据库集群:负载均衡、读写分离、容灾(数据零丢失、服务高可用)
SQL Server上唯一的数据库集群:负载均衡.读写分离.容灾(数据零丢失.服务高可用).审计.优化,全面解决数据库用户问题.一键安装,易用稳定,性价比高,下载链接:http://www.zheti ...
- [转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库
时间:2013年8月21日 前提条件:假设你已经安装好了oracle和PL/SQL Developer,知道远程服务器的IP和数据库端口,知道远程服务器上的oracle数据库名和密码 如何用PL/SQ ...
- SQL Server 2008创建定期自动备份任务
首先需要启动SQL Server Agent服务,这个服务如果不启动是无法运行新建作业的,点击“开始”–“所有程序”–“Microsoft SQL Server 2008”–“启动SQL Server ...
- SQL SERVER2005自动备份 2012.3.29
要想在 SQL2005上进行数据库的自动备份必须把sql server的SQL Server Agent服务开启,否则是无法进行自动备份的 启动完成之后,用户可以直接在“管理”下面的“维护计划”选项来 ...
随机推荐
- 51nod1600-Simple KMP【SAM,树链剖分】
正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1600 题目大意 给出一个字符串\(s\),每次在最后插入一个字符后求它的 ...
- WPF进阶技巧和实战07--自定义元素01
完善和扩展标准控件的方法: 样式:可使用样式方便地重用控件属性的集合,甚至可以使用触发器应用效果 内容控件:所有继承自ContentControl类的控件都支持嵌套的内容.使用内容控件,可以快速创建聚 ...
- ApsNetCore打造一个“最安全”的api接口
Authentication,Authorization 如果公司交给你一个任务让你写一个api接口,那么我们应该如何设计这个api接口来保证这个接口是对外看起来"高大上",&qu ...
- Python中pymongo find 遍历数据导致timeout
背景 在读取大约200W左右的数据的时候采用游标形式进行数据遍历时,超过10分钟就报错 timeout 原因 pymongo游标会在10分钟之后被关闭 解决方案 db.find({}, no_curs ...
- 解决pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
参考链接[侵权删] https://www.jianshu.com/p/3378fa827924 https://yq.aliyun.com/articles/619208 问题描述:在Windows ...
- Linux命令(二)
1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切换到 ...
- T-SQL——关于XML类型
目录 0. 将结果集转化为XML格式 1. 列值拼接为字符串 2. 字符串转换为列值 3. 一些说明 参考 志铭-2021年10月23日 10:43:21 0. 将结果集转化为XML格式 测试数据 I ...
- Abp VNext分表分库,拒绝手动,我们要happy coding
Abp VNext 分表分库 ShardingCore ShardingCore 易用.简单.高性能.普适性,是一款扩展针对efcore生态下的分表分库的扩展解决方案,支持efcore2+的所有版本, ...
- 【二食堂】Alpha - Scrum Meeting 9
Scrum Meeting 9 例会时间:4.19 13:00~13:20 进度情况 组员 昨日进度 今日任务 李健 1. "文本区域"栏目完成,可实现实体和关系的添加issue ...
- elasticsearch的bulk(批量)操作
在es中我们可能会有这么一种需求,即有时需要批量向es中插入或更新或删除数据,如果一条一条数据的操作,那么速度必然很慢,那么es的bulk api就可以派上用场. delete 删除操作,只需要写一个 ...