澳门金沙vip 3

通过MSSQl作业定时执行批处理BAT文件

前言

有些时候,我们可能会需要定时执行一下批处理来达到一定的目的,比如Oracle数据库的定时备份,当然Oracle也可以通过Rman实现定时备份。我们大多数的时候是通过操作系统的计划任务实现定时执行批处理。

但是当我们想要获取相关执行细节,MSSQL的作业是一个很好的选择。

一、前情提要

具体方案

首先我们需要一个能够满足自己需求的批处理文件。比如Oracle的定时备份批处理

澳门金沙vip 1

这个批处理可以将Oracle数据库备份至异地服务器上。

然后通过MSSQL的作业定时执行该批处理

首先要开启MSSQL的XPCmdShell,如下图:

澳门金沙vip 2

新建作业的步骤忽略不计。具体说也下作业种步骤属性该怎么写,如下图:

澳门金沙vip 3

其中 exec
xp_cmdshell后面跟的字符串为需要执行的批处理所在位置。

而后设置好作业的执行周期即可。

把服务器架设在VirtualBox虚拟机上,对应服务器的数据库文档也备份在虚拟机上。现由于某种意外,虚拟机挂了,需要我们去修复虚拟机或者将虚拟机里面的文件拷贝出来重新架在新的虚拟机上,如果能成功当然是好的,可是很不幸的是以目前掌握的技术修复不了数据也拷贝不出来,这下怎么办呢???只能哭了~~~~

后续

大多时候,有可能系统计划任务无法满足我们的需求时,可以采用这种方式。希望本文对你有所帮助,如果觉得不错请点一波赞。

转载请注明来源:

 

二、经验教训

为了避免再出现数据拷不出来造成不必要的麻烦,我们就设定让虚拟机里的重要文件定时备份到实体机上,实体机自然是比较稳定的,而且就算系统挂了也懂得怎么把数据拷回来。

 

三、数据库备份实现方法

方法一:存储过程+维护计划+批处理+定时计划

对于SQLSERVER2000可以在排程中设定定时执行某一TSQL语句来实现数据库的异地备份,具体操作如下:

(1)源服务器:在master数据下创建一存储过程(bakup_DataBase),用于备份数据库并将产生的备份文档拷贝到目标服务器,实现语句:

USE [master]

GO

/****** Object:  StoredProcedure [dbo].[BAKUP_DATABASE]    Script Date: 2016/6/29 上午 11:11:55 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[BAKUP_DATABASE] AS

/*

–实现功能:定时将服务器中sqlserver2000资料库备份到局域网中另一台电脑上

–FULL BACKUP

–USE MASTER

*/

SET NOCOUNT ON

DECLARE @STRPSW VARCHAR(50),@STRUSR VARCHAR(50),@STRCMDSHELL VARCHAR(300),@STRDATABASENAME VARCHAR(20),@FULLFILENAME VARCHAR(200)

DECLARE @FILEFLAG VARCHAR(50),@TOFILENAME VARCHAR(200),@SQLSTR VARCHAR(500),@SQLSTR2 VARCHAR(500),@FLAGDEL VARCHAR(20)

DECLARE @NOWDATETIME VARCHAR(50)

 

— 日期时间

SET @NOWDATETIME = REPLACE(REPLACE(REPLACE(CONVERT(CHAR(20),GETDATE(),20),’:’,”),’-‘,”),’ ‘,”)

 

— 需填写域名\用户名(目标机器的windows登陆名)

SET @STRUSR=’目标服务器IP\administrator /y’

 

— 需填写windows登陆密码

SET @STRPSW=’目标服务器登录密码’

 

— 需填写ip(目标机器的ip地址)

SET @STRCMDSHELL= ‘NET USE \\目标服务器IP\e$\目标文件夹 ‘ + @STRPSW + ‘ /USER:’ +@STRUSR 

 

— 需填写ip(目标机器的ip地址)以及保存的目录(如:目标服务器E盘)

SET @TOFILENAME=’\\澳门金沙vip,目标服务器IP\e$\目标文件夹’ 

 

— 填写true表示删除本地的备份临时文件,填写false或其他字符表示保留该文件

SET @FLAGDEL=’FALSE’

————————————备份数据库————————————-

— 备份的数据库名称

SET @STRDATABASENAME=’要备份的数据库名称’

 

— 备份的文件命名规则:数据库名_日期时间.bak

SET @FILEFLAG = @STRDATABASENAME + ‘_’ + @NOWDATETIME

 

— 需填写本地备份临时文件的目录,因为需要先备份到本地再拷贝到目标机器(如:保存目录为F:\DBbakup)

SET @FULLFILENAME=’F:\DBbakup\’+@FILEFLAG+’.bak’

 

SET @SQLSTR=’COPY ‘+@FULLFILENAME+’ ‘+@TOFILENAME

SET @SQLSTR2=’DEL ‘ +@FULLFILENAME

BACKUP DATABASE @STRDATABASENAME TO DISK= @FULLFILENAME WITH INIT

 

— 尝试连接到目标机器

EXEC MASTER..XP_CMDSHELL @STRCMDSHELL

— 拷贝到目标机器上

EXEC MASTER..XP_CMDSHELL @SQLSTR 

— 删除本地的备份临时文件

IF (@FLAGDEL =’TRUE’) EXEC MASTER.. XP_CMDSHELL @SQLSTR2

 

GO