定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器

需求介绍:每天备份线上正式库并且把备份文件复制到测试服务器,测试服务器自动把数据库备份文件还原。

方案介绍:

第1步:在正式库上创建存储过程用来备份数据库和复制到测试服务器,然后新建作业每天定时执行创建的存储过程。

第2步:在测试服务器数据库上创建存储过程用来还原数据库,然后新建作业每天定时执行创建的存储过程。

准备:

在正式服务器上共享备份文件的文件夹,并且给文件夹everyone的权限。

在测试服务器上创建共享文件夹,并且给文件夹everyone的权限。

正式库备份数据库和复制数据库代码:

--开启 xp_cmdshell
sp_configure ‘show advanced options‘,1
reconfigure
go
sp_configure ‘xp_cmdshell‘,1
reconfigure
go
USE [master]
GO
/****** Object:  StoredProcedure [dbo].[backup_db_ksedu]    Script Date: 11/22/2016 08:41:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--备份数据库
Create proc [dbo].[backup_db_ksedu]

as  

Declare @strPsw varchar(50)

Declare @strUsr varchar(50) 

Declare @strCmdShell varchar(300)

Declare @strDataBaseName varchar(20)

Declare @FullFileName Varchar(200)

Declare @FullFileName1 Varchar(200)

Declare @FullFileName2 Varchar(200)

Declare @FileFlag varchar(50) 

Declare @FileFlag2 varchar(50) 

DECLARE @FileFlag3 varchar(50)

Declare @ToFileName varchar(200)  

Declare @SQLStr varchar(500)

Declare @SQLStr2 varchar(500)   

Declare @SQLStr3 varchar(500)    

Declare @FlagDel varchar(20)

--定义备份的数据库名称

Set @strDataBaseName=‘数据库名‘

--定义本地备份文件的名称

Set @FileFlag=@strDataBaseName + ‘_db_‘ + replace(convert(char(20),getdate(),112),‘ ‘,‘‘)

--定义本地1天前的备份文件名称

--Set @[email protected] + ‘_db_‘ + replace(convert(char(20),getdate()-1,112),‘ ‘,‘‘)

--定义远程服务器3天前的备份文件名称

--Set @[email protected] + ‘_db_‘ + replace(convert(char(20),getdate()-3,112),‘ ‘,‘‘)

--设置远程服务器的登录域和用户名

Set @strUsr=‘ZONGHEGUANLI-SQ\Administrator‘

--设置远程服务器登录密码

Set @strPsw=‘abc123‘

--设置远程服务器连接

Set @strCmdShell= ‘net use \\10.150.3.204\db_backup ‘ + @strPsw + ‘ /user:‘ +@strUsr

--设置本地备份文件名称

Set @FullFileName=‘e:\bak\‘+@FileFlag+‘.bak‘

--设置本地1天前的备份文件名称

--set @FullFileName1=‘D:\Backup\‘[email protected]+‘.bak‘

--设置远程服务器3天前的备份文件名称

--set @FullFileName2=‘\\172.17.1.10\j$\db_backup\‘[email protected]+‘.BAK‘

--设置远程服务器保存备份文件目录

Set @ToFileName=‘\\10.150.3.204\db_backup\‘

--Set @ToFileName=‘e:\Backup\‘

--设置为True时,即删除备份,设置为False时,即不删除备份文件

--Set @FlagDel=‘False‘

--设置从本地复制备份文件至远程服务器的语句

Set @SQLStr=‘copy ‘+@FullFileName+‘ ‘+@ToFileName

--设置删除本地1天前的备份文件

--Set @SQLStr2=‘del ‘ [email protected] 

--设置删除远程服务器3天前的备份文件

--Set @SQLStr3=‘del ‘ [email protected]

--备份数据库 压缩备份 

BACKUP DATABASE @strDataBaseName  TO DISK = @FullFileName  WITH INIT, STATS = 20  

--连接远程服务器 

exec master..xp_cmdshell @strCmdShell

--复制备份文件至远程服务器

exec Master..xp_cmdshell @SQLStr   

--删除1天前本地的备份文件

--if (@FlagDel =‘True‘)

--exec master.. xp_cmdshell @SQLStr2 

----删除3天前远程服务器备份文件

--if (@FlagDel =‘True‘)

--exec master.. xp_cmdshell @SQLStr3

测试库还原数据库代码:

USE [master]
GO
/****** Object:  StoredProcedure [dbo].[restore_db_ksedu]    Script Date: 11/22/2016 08:40:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[restore_db_ksedu]
AS

Declare @strDataBaseName varchar(50)
Declare @FileFlag varchar(50) 

--定义备份的数据库名称
Set @strDataBaseName=‘数据库名‘

Set @FileFlag=‘d:\db_backup\‘+@strDataBaseName + ‘_db_‘ + replace(convert(char(20),getdate(),112),‘ ‘,‘‘)+‘.bak‘

--加上这句防止数据库正在使用导致执行不成功
ALTER DATABASE [数据库名] SET OFFLINE WITH ROLLBACK IMMEDIATE

restore database [数据库名]
from disk=@FileFlag  with file=1,
REPLACE,
recovery  

ALTER  database  [数据库名]  set   online  

创建作业计划:参考 http://wenku.baidu.com/link?url=HLojwfVr1gkEuKjhk3Twsy7SxTWNMxovLg4LXpqvg_a3r50XQE5hZt8e03uPhbW8qUNjEx0IKa39DjyJ0spuNN1TV42UCIAMNDUQllhjsZu

参考文章:http://www.cnblogs.com/wjj327342306/p/4568177.html

时间: 2024-11-12 22:36:25

定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器的相关文章

技术分享之如何完整备份sql server 2012数据库?

博客已经建了几年了,但由于我是个外行,因此一开始就采用了zblog asp+access数据库的方式进行搭建,主要还是因为技术方面的缺陷嘛.但是经过几年的整理和写作,发现这套系统越来越卡了,咨询了很多博主,并且去ZBLOG论坛逛了很多次,发现是因为数据库的原因导致的,ACCESS数据库只能建一些小站,数据量已达就有明显的压力了,因此最近尝试了将ACCESS升级和转换为sql server2012的微软数据库,经过几天的折腾和请教了一些高人,终于解决了这个难题,现在访问起来畅快多了.我的博客:读后

通过SQL Server 2008数据库复制实现数据库同步备份

SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主数据库服务器,备份服务器只在主服务器出现故障时投入使用.它是一种优于文件备份的数据库备份解决方案. 在选择数据库同步备份解决方案时,我们评估了两种方式:SQL Server 2008的数据库镜像和SQL Server 2008数据库复制.数据库镜像的优点是系统能自动发现主服务器故障,并且自动切换至镜

SQLServer2008修改sa密码的方法与SQL server 2008数据库的备份与还原

sa密码的修改转载自:http://blog.csdn.net/templar1000/article/details/20211191 SQL server 2008数据库的备份与还原转自 :http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 一.SQLServer2008修改sa密码的方法 1. 先用Window身份验证方式登陆进去,选择数据库实例,右键选择属性--安全性:把服务器身份验证选项从"Window身份验

SQL Server系统数据库备份最佳实践

原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: 系统数据库 master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信息等等. model 所有新数据库的模型,如果希望新数据库都有某些对象,可以在这里创建. tempdb sql server重启时重建,所以不需要备份 除了以上四种,其实还有一个数据库:Resource 从2005就引入的,一个只读.隐藏的数据库,包含所有在sql server中的系统对象.由于SQ

sql server 2012数据库镜像

sql server 2012数据库镜像 以下通过域帐户来配置数据库镜像: 一.环境准备 1.准备计算机 AD02为域控制器/DNS服务器(sz1card1.com),IP:192.168.2.218/24,AD02安装成为域控制器.DNS服务(这里不做演示) W67为主体服务器,IP:192.168.2.67/24,安装SQL SERVER 2012 企业核心版(这里不做演示) W65为镜像服务器,IP:192.168.2.65/24,安装SQL SERVER 2012 企业核心版(这里不做演

sql server 2005 数据库迁移问题总结——"错误15023:当前数据库中已存在用户或角色"

在数据库迁移过程中,如何设置不好用户与登录,会造成"错误15023:当前数据库中已存在用户或角色". 现在整理下思路: 1.在原数据库进行数据库备份 ***.bak 文件: 2.在新建数据库,建立与原数据库相同的登录名: 3.在新数据库上恢复备份的数据库文件 ***.bak 文件:选择覆盖原数据库文件: 4.将数据库恢复到其他服务器时,需要处理"孤立用户"的问题.具体解决办法如下: 用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户.这种情况被称

SCDPM 2016下备份SQL Server 2016

SCDPM2016下备份SQL Server 2016 我们前面介绍了一些关于SCDOM2016.SCOM2016的相关配置介绍,那今天呢就介绍一下使用SCDPM2016备份SQL Server 2016 服务器,当然一般使用SCDPM也会备份Exchange数据库等服务:说到备份其实有很多方法进行备份,比如系统自带的windows server backup工具,symantec提供的备份工具,SCDPM进行备份,当然还有其他一些第三方的备份工具,今天呢我们介绍的是使用SCDPM2016进行备

烂泥:SQL Server 2005数据库安装

本文首发于烂泥行天下. 为了能更好的利用服务器,所以打算把该业务进行迁移.因为该业务比较特殊,需要服务器上有相应的硬件支持,所以打算直接升级该服务器目前的操作系统.目前公司服务器使用的windows server 2003 32bit企业版.如果使用虚拟机的话,只能安装32bitOS,所以打算直接升级OS,安装成windows server 2008 R2 64bit. 但是在进行升级之前,需要对该业务的数据库进行备份.该业务数据库使用的是SQL Server 2005.说实话,以前对SQLSe

实战 SQL Server 2008 数据库误删除数据的恢复

关键字:SQL Server 2008, recover deleted records 今天有个朋友很着急地打电话给我,他用delete语句误删除了SQL Server 2008数据库中两个表中的所有记录,而这个数据库之前没有任何备份.让我帮他解决一下,不然他要赔偿客户很多钱. SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可.但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的数据库完全备份. 2. 数据库的恢复模式(Recovery mode)是“完整(