sqlserver自动备份数据库且邮箱发送邮箱状态

一、通过SQL Mail
    SQL Mail 提供了一种从 Microsoft SQL Server 发送和阅读电子邮件的简单方法。原理是通过调用服务器上面的 MAPI 子系统来进行邮件发送,所以服务器上面需要安装诸如 Microsoft Outlook(不能是Outlook Express) 之类的 MAPI 客户端,而且在发送邮件的时候,Outlook必须处于打开的状态。具体的设置方法可以通过网上查询。
二、使用CDONTS
    通过调用本机的SMTP服务来发送邮件,所以服务器上必须安装IIS和SMTP。相应的存储过程为

 代码如下 复制代码

    CREATE PROCEDURE [dbo].[sp_send_cdontsmail]
@From varchar(100),
@To varchar(100),
@Subject varchar(100),
@Body varchar(4000),
@CC varchar(100) = null,
@BCC varchar(100) = null
AS
Declare @MailID int
Declare @hr int
EXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUT
EXEC @hr = sp_OASetProperty @MailID, 'From',@From
EXEC @hr = sp_OASetProperty @MailID, 'Body', @Body
EXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCC
EXEC @hr = sp_OASetProperty @MailID, 'CC', @CC
EXEC @hr = sp_OASetProperty @MailID, 'Subject', @Subject
EXEC @hr = sp_OASetProperty @MailID, 'To', @To
EXEC @hr = sp_OAMethod @MailID, 'Send', NULL
EXEC @hr = sp_OADestroy @MailID

调用方法:

 代码如下 复制代码
exec sp_send_cdontsmail 'someone@shouji138.com','someone2@hks8.com','

测试邮件标题','这里是邮件内容,推
三、使用CDOSYS
    微软已经在 Windows 2000、Windows XP 以及 Windows 2003 中淘汰了 CDONTS,所以使用CDOSYS是目前最好的解决方案。使用CDOSYS可以使用远程的SMTP服务器来发送邮件,我们通过测试163网易的免费邮箱,可以正常发送邮件,相应的存储过程如下:

 代码如下 复制代码

    CREATE PROCEDURE sys_sendmail  @To varchar(100) , @Bcc varchar(500), @Subject varchar(400)=" ",
 @Body varchar(4000) =" "

AS

Declare @smtpserver varchar(50)   --SMTP服务器地址
Declare @smtpusername varchar(50) --SMTP服务器用户名
Declare @smtpuserpassword varchar(50) --SMTP服务器密码
set @smtpserver = 'smtp.163.com'
set @smtpusername = 'yourname@163.com'  --这里设置成你的163邮箱用户名
set @smtpuserpassword = 'password'  --这里设置成你的163邮箱密码
Declare @object int
Declare @hr int

EXEC @hr = sp_OACreate 'CDO.Message', @object OUT

EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', @smtpserver

--下面三条语句是smtp验证,如果服务器需要验证,则必须要这三句,你需要修改用户名和密码
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value','1'
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusername").Value',@smtpusername
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value',@smtpuserpassword

EXEC @hr = sp_OAMethod @object, 'Configuration.Fields.Update', null
EXEC @hr = sp_OASetProperty @object, 'To', @To
EXEC @hr = sp_OASetProperty @object, 'Bcc', @Bcc
EXEC @hr = sp_OASetProperty @object, 'From', @smtpusername
EXEC @hr = sp_OASetProperty @object, 'Subject', @Subject

EXEC @hr = sp_OASetProperty @object, 'TextBody', @Body
EXEC @hr = sp_OAMethod @object, 'Send', NULL

--判断出错
IF @hr <> 0
BEGIN
  EXEC sp_OAGetErrorInfo @object
  print 'failed'
  return @object
END
PRINT 'success'
EXEC @hr = sp_OADestroy @object
GO

调用存储过程发送邮件:exec sys_sendmail 'someone@shouji138.com','someone2@hks8.com','测试邮件标题','这里是邮件内容,
从以上三种方法的优缺点比较来看,我们当然采取第三种方法,不需要在服务器上装别的组件和程序。我们可以在SQL代理中建立一个作业,调度设为每天下午6点,执行的数据库备份语句和发送邮件的SQL如下:

 代码如下 复制代码

declare @dbname varchar(50)
set @dbname = 'dbtest' --设置数据库名
declare @filename nvarchar(100)
declare @time datetime
set @time = getdate()
set @filename= 'D:数据库自动备份'+@dbname+substring(replace(replace(replace(CONVERT(varchar, @time, 120 ),'-',''),' ',''),':',''),1,14 )+'.bak'
--print @filename
BACKUP DATABASE dbtest  TO DISK = @filename WITH NOINIT, NOUNLOAD, NAME = N'BIS_data_backup', NOSKIP , STATS = 10, NOFORMAT

--下面获取备份之后文件的大小
declare @size int
declare @sizeM decimal (5, 2)

select   top   1   @size=backup_size  
from   msdb.dbo.backupset  
where   database_name   =   @dbname  
order   by   backup_start_date   desc
 
set @sizeM = CAST(@size as float)/1024/1024
--print @sizeM
--邮件内容
declare @content varchar(2000)
set @content='数据库自动备份成功。
数据库名:'+@dbname+'
备份文件名:'+@filename+'
备份文件大小:'+convert(varchar,@sizeM)+'M
备份时间:'+CONVERT(varchar, @time, 120 )+'
这是一封系统自动发出的邮件,用来每天报告数据库自动备份情况,请不要直接回复。'
--print @content
--发送邮件
EXECUTE dbtest.dbo.sys_sendmail 'dba@hks8.com','dba@shouji138.com',
'数据库自动备份日报',@content
go

 

时间: 2024-10-24 11:20:31

sqlserver自动备份数据库且邮箱发送邮箱状态的相关文章

SqlServer定时备份数据库和定时杀死数据库死锁解决

原文:SqlServer定时备份数据库和定时杀死数据库死锁解决 上周五组长更我说了一句要杀死数据库的死锁进程,因为自己对数据库不是很熟悉,突然组长说了我也就决定一定要倒腾一下,不然自己怎么提高呢?现在不研究,说不定下次还是要研究呢,倒腾出来了就可以在下次用到了,后来组长又补了一句:"还有定是备份数据库的问题要解决",说干就干. PS:Sqlserver 2008 R2,windows 8 64位 1.备份数据库  因为要备份,我们就要用到Sqlserver的代理,默认数据库的代理是不开

sql server中一句实现自动备份数据库脚本

由于sqlserver很智能化了我们只需要一句就可以实现sql server自动备份数据库了.  代码如下 复制代码 BACKUP DATABASE [SiteWeaver] TO DISK = N'E:workbackupdatabaseSiteWeaver.bak' WITH NOFORMAT, INIT, NAME = N'SiteWeaver-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO

SQL Server 2008、SQL Server 2008R2 自动备份数据库

让SQL Server 2008自动备份数据库,需要建立一个SQL Server作业,并启动SQL Server代理,使该作业定期运行. 具体来说,可以按以下步骤进行: 一.打开SQL Server Management Studio,在对象资源管理器中,确认SQL Server代理已启动,若没有,右击SQL Server代理节点,点击"启动". 二.展开SQL Server 代理节点,在其下的作业文件夹上右击,选择"新建作业". 三.在弹出的"新建作业&

centos下Oracle自动备份数据库步骤

**环境说明** Oracle数据库服务器 操作系统:CentOS IP:192.168.150.214 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 用户:ts 密码:ts **详细的操作步骤如下** 1.root用户登录服务器 {{{ mkdir -p /backup/oracledata #新建Oracle数据库备份目录 chown -R oracle:oinstall /backup/oracledata -R #设置目录权限为oinstall用户组的

mysql使用mysqldump定时自动备份数据库

使用mysqldump定时自动备份数据库  代码如下 复制代码 [root@www www]# vi backup-db.sh #!/bin/sh /bin/nice -n 19 /usr/bin/mysqldump -u vpsmysql --password=vpsmysqlpassword mysqlname -c | /bin/nice -n 19 /bin/gzip -9 &gt; /web/www/db-backup/vps-$(date '+%Y%m%d').sql.gz rm -

linux下mysql自动备份数据库与自动删除临时文件_Mysql

一.每日23:00自动删除临时文件 首先查看一下crontab的任务列表:crontab -l然后新建:crontab -e添加一行:00 03 * * * rm -rf /www/cmstest/my120/public/scripts/jpgraph/*保存退出.重启服务:  /etc/rc.d/init.d/crond restart 二.每日24:00自动备份数据库 利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的. 1.创建保存备份文件的路径/mysq

mysql定时自动备份数据库脚本代码(linux/windows)

操作步骤: 方法一 1.安装p7zip:由于源里面没有此包,直接下载源码安装. 地址:http://p7zip.sourceforge.net/  代码如下 复制代码 wget http://sourceforge.net/projects/p7zip/files/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2 tar xvf p7zip_9.20.1_src_all.tar.bz2 cd p7zip_9.20.1_src_all make && mak

exp自动备份数据库的脚本

自动备份数据库的脚本 最近应开发人员的要求,将以前的自动备份的脚本又做了修改: 简要介绍如下: 功能: 将oracle_backup.bat命令加入windows的任务后,就可以实现用exp自动备份oracle数据库. 说明: 最新备份的数据库在backup目录下,上一次备份存放在Old_backup目录下,每次备份前,都会先删除 Old_backup中的文件,然后将上一次的备份数据拷贝到Old_backup目录中,最后才进行备份. 使用方法: 下载后将其解压到任何一个目录.看'说明手册.txt

自动备份数据库并发送邮件报告数据库

  最近在一个做企业的一个内部系统,数据库采用的是SQL2000,为了保证数据的安全性,需要每天下班之后做数据备份,并且通过邮件的方式通知管理员备份情况.备份数据库很简单,用SQL代理建立一个作业,每天定时备份数据库即可,通过SQL2000来发邮件的话,在网上找了些资料,发现有多种方式可以采用. 一.通过SQL Mail SQL Mail 提供了一种从 Microsoft SQL Server 发送和阅读电子邮件的简单方法.原理是通过调用服务器上面的 MAPI 子系统来进行邮件发送,所以服务器上