Continuando o assunto de ontem, vou colocar aqui um exemplo de utilização de envio de email no SQL Server, aproveitando o artigo de backup com compactação de ontem, vou criar aqui um passo dentro do job de backup criado anteriormente, esse passo será executado caso algum passo anterior não funcione e a sua função será enviar uma mensagem ao administrador em caso de erro, informando em qual o banco de dados ocorreu o erro.
Um dos problemas do SQL Server 2000 é a falta de integração com ferramentas de email que utilizem SMTP ou IMAPI, ele trabalha somente com MAPI, para contornar esse problema eu utilizei uma SP chamada “sp_send_cdosysmail” que usa o componente cdosys do próprio Windows, já velho conhecido por desenvolvedores em ASP.
Abaixo segue a SP, crie-a na tabela master e dê permissão de execução ao usuário que irá executar o job.
CREATE PROCEDURE [dbo].[sp_send_cdosysmail]
@From varchar(100) ,
@To varchar(100) ,
@Subject varchar(100)=" ",
@Body varchar(4000) =" "
/*********************************************************************AS
Declare @iMsg int
Declare @hr int
Declare @source varchar(255)
Declare @description varchar(500)
Declare @output varchar(1000)--************* Create the CDO.Message Object ************************
EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT--***************Configuring the Message Object ******************
-- This is to configure a remote SMTP server.
-- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'-- Substitua MailServerName pelo nome ou IP do seu Server SMTP.
EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', ' MailServerName’-- Save the configurations to the message object.
EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null-- Set the e-mail parameters.
EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject-- If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body
EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL-- Sample error handling.
IF @hr <>0
select @hr
BEGIN
EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
IF @hr = 0
BEGIN
SELECT @output = ' Source: ' + @source
PRINT @output
SELECT @output = ' Description: ' + @description
PRINT @output
END
ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
END-- Do some error handling after each step if you have to.
-- Clean up the objects created.
EXEC @hr = sp_OADestroy @iMsgGO
Não se esqueça de informar o seu servidor de SMTP na SP.
Agora volte em Management->SQL Server Agent->Jobs e dê um duplo clique no Job desejado.
Na guia Steps clique em “New” e adicione o seguinte script:
declare @Body varchar(4000)
select @Body = 'Ocorreu um erro durante o BACKUP de DUMP no banco XXX'
exec sp_send_cdosysmail 'email@emaildeenvio.com.br','emaildestino@paraquemvaioemail.com.br','ERRO NO BACKUP DO SQL',@Body
As explicações sobre os scripts estão nos mesmos, substitua os emails de envio e de destino, não se esqueça das permissões na SP criada e de configurar o SMTP Server na mesma.
Clique no primeiro Step e na guia Advanced altere o parâmetro “On failure action” e especifique o Step criado para enviar email.
Clique em ok e edite o segundo step (Compacta) e repita a operação
No step do EnviaEmail existe uma diferença:
Se a ação tiver sucesso ela irá sair reportando falha, porque esse passo só será executado em caso de erro em algum passo anterior, dessa forma o job ficará em vermelho com status de falha.
E pronto, está aí um job de backup que compacta o arquivo e se algo der errado ainda te envia um email.
Por enquanto é só.
0 Comentários:
Postar um comentário