Job(email) de 1000 em 1000
Mariana Carvalho
Respostas
Cesar Roniglei
07/10/2013
Alex Lekao
07/10/2013
se nao me falha a memoria o Junior Galvao tem varias coisas referente a esse tipo de monitoria no blog dele, vale a pena dar uma olhada.
http://pedrogalvaojunior.wordpress.com/
Mariana Carvalho
07/10/2013
essa procedure coloco no job? desculpa, não to lembrando se isso é possivel.
Mariana Carvalho
07/10/2013
Fabiano Carvalho
07/10/2013
Veja esse script, só dar F5
IF OBJECT_ID('TEMPDB.DBO.#TEMPORARIA') IS NOT NULL
DROP TABLE #TEMPORARIA
GO
CREATE TABLE #TEMPORARIA (
NOME VARCHAR(200),
LINHAS VARCHAR(100),
RESERVED VARCHAR(100),
DADOS VARCHAR(100),
INDICE VARCHAR(100),
UNSED VARCHAR(100))
GO
SP_MSFOREACHTABLE 'INSERT INTO #TEMPORARIA EXEC SP_SPACEUSED''?'''
GO
SELECT '[' + nome + ']'[NOME],linhas FROM #TEMPORARIA
order by 2
Agora basta montar o e-mail, se não conseguir lhe auxilio
Mariana Carvalho
07/10/2013
Jefferson Santos
07/10/2013
1º Configure o Database Mail
2º Execute a Configuração Abaixo:
sp_configure 'show advanced', 1 GO RECONFIGURE GO sp_configure 'Database Mail XPs', 1 GO RECONFIGURE GO
3º Crie uma procedure para disparar quando a tabela chegar no preenchimento 1000 no caso do meu exemplo estou utilizando uma já existente sp_send_dbmail
USE msdb GO EXEC sp_send_dbmail @profile_name='SERVIDOR', -– Coloque o profile desejado. @recipients='teste@teste.com.br', – Coloque os receptores da mensagem. @subject='Título da Mensagem', @body='Corpo da mensagem.
Mariana Carvalho
07/10/2013
Roniere Almeida
07/10/2013
Jefferson Santos
07/10/2013
Testa ai e me fala se conseguiu.
Alex Lekao
07/10/2013
Fabiano Carvalho
07/10/2013
Sim, existe, basta clicar com o direito e seguie os passos, estou sem tempo para postar e explicar :/
Jefferson Santos
07/10/2013
USE msdb;
Enviando um e-mail com o resultado de uma SELECT
EXECUTE sp_send_dbmail
@profile_name = 'Nome do Profile',
@recipients = 'email_do_destinatario@sql.com',
@query = 'SELECT ContactID, FirstName, LastName FROM AdventureWorks.Person.Contact WHERE ContactID < 50',
@subject = 'Dados da Tabela de Contatos',
@attach_query_result_as_file = 0
Alex Lekao
07/10/2013
Sim, existe, basta clicar com o direito e seguie os passos, estou sem tempo para postar e explicar :/
tempo... o bendito do tempo... o meu ta muito escasso.. rsrsr
acho que tem um Artigo aqui na devmedia que fala especificamente sobre isso, nao tenho certeza, mas acho que foi ate o Roniere que escreveu. rssr
Mariana Carvalho
07/10/2013
Mariana Carvalho
07/10/2013
Sim, existe, basta clicar com o direito e seguie os passos, estou sem tempo para postar e explicar :/
tempo... o bendito do tempo... o meu ta muito escasso.. rsrsr
acho que tem um Artigo aqui na devmedia que fala especificamente sobre isso, nao tenho certeza, mas acho que foi ate o Roniere que escreveu. rssr
tem o link facil?
Roniere Almeida
07/10/2013
[url]https://www.devmedia.com.br/database-mail-no-sql-server/24283[/url]
Alex Lekao
07/10/2013
[url]https://www.devmedia.com.br/database-mail-no-sql-server/24283[/url]
kkkk... era seu mesmo ne Roniere? rsrsr
gente essas coisas sao muito legais...
vou precisar montar um jog para fazer um select e enviar o resultado como csv por email... srsrs
a gente as vezes pensa que nao sera util... e olha a utilidade ai!!! rsrsr
so tenho que agradecer a Mariana por ter aberto o Topico.
e tambem agrader a todos que colocaram suas sugestoes e ajudas tambem e claro...r srsr
Abraco.
Alex - Lekao
Fabiano Carvalho
07/10/2013
Alex Lekao
07/10/2013
Blz Fabiano,
Devo comecar os testes essa semana, obrigado pela dica.
Muito provavelmente deve abrir um topico a respeito... rsrsrsr
Abraco.
Roniere Almeida
07/10/2013
Alex Lekao
07/10/2013
bom sim!!!
Ficou muito bom!!
Simone
07/10/2013
Também preciso criar uma procedure, de envio de email , mas eu uso o sql express, e nele não vem o send mail ativado, voces saberiam me informar se tem alguma possibilidade.
Jefferson Santos
07/10/2013
Copiar DatabaseMail90.exe , DatabaseMailEngine.dll e DatabaseMailProtocols.dll no MSSQL \ Binn diretório
e executar procedimentos armazenados no banco de dados do sistema msdb chamado
dbo.sysmail_start_sp
dbo.sysmail_stop_sp
os e-mails na fila são processados imediatamente.
Agora, o único problema com isso é que você tem que pegar esses 3 arquivos a partir de qualquer edição Standard ou Enterprise do SQL Server
Mariana Carvalho
07/10/2013
Copiar DatabaseMail90.exe , DatabaseMailEngine.dll e DatabaseMailProtocols.dll no MSSQL \ Binn diretório
e executar procedimentos armazenados no banco de dados do sistema msdb chamado
dbo.sysmail_start_sp
dbo.sysmail_stop_sp
os e-mails na fila são processados imediatamente.
Agora, o único problema com isso é que você tem que pegar esses 3 arquivos a partir de qualquer edição Standard ou Enterprise do SQL Server
não seria inviavel fazer isso?
Jefferson Santos
07/10/2013
Mariana Carvalho
07/10/2013
Jefferson Santos
07/10/2013
Mariana Carvalho
07/10/2013
Alex Lekao
07/10/2013
;-.b
Mariana Carvalho
07/10/2013
;-.b
ah ta certo.
Leonardo Ferrareto
07/10/2013
------------------------------------------------------------------------
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[sp_SQLNotify]
@From varchar(100) ,
@To varchar(100) ,
@Subject varchar(100)=" ",
@Body varchar(4000) = "Motley Fool Inc."
/*********************************************************************
This stored procedure takes the above parameters and sends an e-mail.
All of the mail configurations are hard-coded in the stored procedure.
Comments are added to the stored procedure where necessary.
Reference to the CDOSYS objects are at the following MSDN Web site:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_messaging.asp
***********************************************************************/
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'
-- This is to configure the Server Name or IP address.
-- Replace MailServerName by the name or IP of your SMTP Server.
EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', '10.1.1.10'
-- 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 need to.
-- Clean up the objects created.
EXEC @hr = sp_OADestroy @iMsg
PRINT 'Mail Sent!'
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Isaac Jose
07/10/2013
so pra frisar uma coisa que vi certa vez em um cliente...
o mesmo precisava fazer algo que so era permitido na versao enterprise e claro na developer. como ele nao tinha a enterprise o pessoal fez o caminho obvio e intalou a developer.
e jogou em ambiente de produção..
o problema é que o developer nao pode entrar em produção por questoes de direitos da Fabricante.
portanto achei relevante comentar caso tenha alguem que nao saiba,,e ou o utilize em producao rsrs...
abraços
Mariana Carvalho
07/10/2013
João Françozo
07/10/2013
TENHO ISSO VEJA A CONFIGURAÇÃO ABAIXO O DATABASE EMAIL. EU USO EM ALGUNS CLIENTES.
--** Como configurar o Database Mail para envio de e-mail pelo SQLSERVER 2005
--1)Abrir base MSDB
USE MSDB
GO
--2)Habilitando o Database Mail
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE;
GO
--3) -- Criação do Perfil
EXEC msdb.dbo.sysmail_add_profile_sp
@profile_name = 'Atak0',
@description = 'Esse perfil será utilizado para envio de e-mails';
--4) -- Criação da Conta
EXEC msdb.dbo.sysmail_add_account_sp
@account_name = 'jtassoli@atak.com.br',
@description = 'Essa é a conta principal para o envio de e-mails SqlServer',
@email_address = 'jtassoli@atak.com.br',
@display_name = 'envio automatico de ntsativo',
@replyto_address = 'jtassoli@atak.com.br',
@mailserver_name = 'mail.atak.com.br',
@port = 110;
--5) -- Vinculação da Conta ao Perfil
EXEC msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'Atak0',
@account_name = 'jtassoli@atak.com.br',
@sequence_number = 1;
EXEC sysmail_verify_principal_sp
--6) -- Concedendo a permissão de um usuário ao Perfil
EXEC msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'Atak0',
@principal_name = 'dbo',
@is_default = 1;
--7) -- Enviando um e-mail simples
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Atak0',
@recipients = 'jtassoli@atak.com.br',
@body = 'Se você receber esse e-mail, o recurso Database Mail está funcionando',
@subject = 'Verificação do Recurso Database Mail'
--8) -- Enviando o resultado de uma Query em Anexo
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Atak0',
@recipients ='jtassoli_@hotmail.com',
@body = 'SEGUE ANEXO PRODUTOS COM ESTOQUE BAIXO',
@subject = 'PRODUTOS PARA COMPRA DO ALMOXARIFADO',
@query = 'select * from satkcastanhal..tbramo',
@attach_query_result_as_file = 1,
@query_attachment_filename = 'produtos.txt'
---
--Algumas stored procedure
--para verificar se o serviço está startado
EXEC msdb.dbo.sysmail_help_status_sp ;
--para parar o serviço
sysmail_stop_sp
--para comercar o serviço
sysmail_start_sp
--para verificar o log
SELECT * FROM msdb.dbo.sysmail_event_log ;
------------------------------------------------------------------------------------------------------------------------------
AI FIZ UMA PROCEDURE ( Envia_email_espelho_pedido_compra400)
---------------------------------------------------------------------------------------------------------------------------
APÓS ISSO FIZ UMA TRIGGER QUE VERIFICA OS DOCUMENTOS BLOQUEADOS E ATUALIZADOS, E CHAMA A PROCEDURE PARA ENVIAR O E-MAIL.
CREATE TRIGGER [dbo].[tiLogOperacao] on [dbo].[tbLogOperacao]
FOR INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
declare @cf char(9);
-- Insert statements for trigger here
Select @cf=Chave_fato from Inserted novo
where
cod_rotina='MOV016' and abreviatura_operacao IN('DESBLOQ') and
--Observacao like '%atualização automática%' and
Observacao like '%APE%';
if @@Rowcount<>0
Exec [dbo].[Envia_email_espelho_pedido_compra400] @Chave_fato = @cf;
END
GO
-----------------------------------------------------------------------------------------------------------------------
Acho que te ajuda isso.
Mariana Carvalho
07/10/2013
Alex Lekao
07/10/2013
VC conseguiu o que queria?
Deixa so eu entender mais um pouco, pq esse seu problema nao saiu de minha lembranca desde a criacao do post.
Vc precisa de um job que qdo a tabela, comecando sem nenhum registro envie um e-mail para o DBA avisando que ela atingiu 1000 registros, e qdo ela atingir 2000 registros um novo email correto?
Estive pensando que talves seja necessario criar uma tabela para esse tipo de monitoria, pq nao consigo pensar em um laco que seja possivel usar os registros para considerar que sejam superiores a mil e proceder com o envio do email.
ja pensei em calculos matematicos para tentar fazer esse laco e possibilitar o envio sem a criacao de uma tabela para monitorar, mas ate o momento nao consegui.
Se vc tiver alguma coisa deste tipo que possamos usar para tentar ajudar a montar alguma coisa, seria interessante.
Eu ja estou usando envio de emails, fazendo o uso do job, so que o meu eh o envio de um arquivo csv de um cadastro de produtos para um parceiro.
Vamos ver se conseguimos algo que atenda a sua necessidade.
encontrei alguns codigos e tal para monitoria diversas, mas especificamente do jeito q vc precisa nao tem.
vamos tentar amadurecer mais e tentar ver o que conseguimos.
Abraco.
Alex - Lekao
Mariana Carvalho
07/10/2013
sobre os codigos, sem cerimonias, pode colocar. rsrsrs
Rafael Dantas
07/10/2013
Alex Lekao
07/10/2013
sobre os codigos, sem cerimonias, pode colocar. rsrsrs
Oi Mariana, nao entendi... rssr
to meio lesado hoje... leeeento... rssr
Alex Lekao
07/10/2013
Oi Rafael, eh legal viu..
funciona direitinho...
eu estou usando com arquvio CSV, para xml muda um pouco a estrutura, pq vc tera que montar um pouco diferente, acho que nao eh o colocar o nome do arquivo e tal.
Mas funciona balinha.
Dependendo de como for, abre um topico e a galera vai cair em cima para te ajudar.
Abraco.
Alex - Lekao
Fabiano Carvalho
07/10/2013
Voce pode criar uma trigger para que quando inserir verifica o modulo (resto da divisão), divide a quantidade por 1000, e ai dispara o e-mail. (gambiarra)
Alex Lekao
07/10/2013
acho que o caminho ta surgindo... rsrsr
usar a Funcao MOD(), se nao me engano eh essa certo.
mas se o resto de divisao for 1000 certo?
Mariana Carvalho
07/10/2013
sobre os codigos, sem cerimonias, pode colocar. rsrsrs
Oi Mariana, nao entendi... rssr
to meio lesado hoje... leeeento... rssr
deixa pra lá.
Mariana Carvalho
07/10/2013
Voce pode criar uma trigger para que quando inserir verifica o modulo (resto da divisão), divide a quantidade por 1000, e ai dispara o e-mail. (gambiarra)
hahahaha...essa foi otima...tb sinto isso...as vezes.
Alex Lekao
07/10/2013
acho que o caminho ta surgindo... rsrsr
usar a Funcao MOD(), se nao me engano eh essa certo.
mas se o resto de divisao for 1000 certo?
Acho que MOD() eh em java ou C++... confundi tudo o baguio... rssrsrsrsr
resto de divisao no sql eh % (sinal de porcentagem)... rsrsr
Alex Lekao
07/10/2013
Como relacao ao resto de Divisao para 1000 linhas eu fiz o seguinte codigo:
if
(select
COUNT(*)%1000
from SeuBanco_SuaTabelaDeControle) > 999
print 'atingiu 1000 linhas'
else
print 'nao atingiu 1000 linhas'
Agora falta tentarmos ver se conseguimos junto com isso enviar o e-mail.
mas nao estou conseguindo pensar muito bem em o que fazer. rsrsr
Alex Lekao
07/10/2013
Acho que Consegui... rsrsrsr
Vou colocar o Codigo e vc tera que fazer o job e os ajustes que melhor se adequarem a vcs ai.
Provavelmente tera que fazer alguns ajustes e tal, na vdd, com certeza vai ter que fazer ajustes... rsrsr
O Script tera que entrar em Etapa e no job, qqr coisa me fala que te ajudo.
Abraco.
Segue Codigo
if
(select
COUNT(*)%1000
from SeuBanco_SuaTabelaDeControle) > 999
begin
USE msdb;
--Enviando um e-mail simples
EXECUTE AS USER = 'dbo'
EXEC sp_send_dbmail
@profile_name = 'Perfil do Seu Data Base Mail',
@recipients = 'SeuEmailDestinatario@SuaEmpresa.com.br',
@body = 'Mensagem do Corpo do email que sera enviado',
@subject = 'Assunto do E-mail',
-- Se quiser que Seja Enviado o Resultado da Quantidade de Registros Por Exemplo
@query = 'select COUNT(*) [Qtd De Linhas da Tabela] from SeuBanco_SuaTabela',
@attach_query_result_as_file = 1,
-- @query_result_separator=';',
-- @query_result_header=0,
@query_attachment_filename='NomeDoArquivoGeradoPelaQueqy.csv'
end
Mariana Carvalho
07/10/2013
Alex Lekao
07/10/2013
Desculpe a demora, mas acredito que nao recebi e-mail da resposta deste post.
Mas vamos la... rssr
Esse script vai enviar o e-mail para vc com os dados que possivelmente vc precise.
Ele tera que ser incluido na criacao do job, na opcao etapa.
ele vai chegar e enviar o e-mail se aingiu o limite de 1000 linhas.
so sera enviado o e-mail se atingir caso contrario nao.
mas acho que vamos precisar ir nos afinando a respeito deste job.
posta ai se deu certo ou a dificuldade que possa ter tido.
Espero que ajude.
Mais uma vez desculpe pela demora, a resposta do post passou mesmo, eu tenho quase 100% de certeza que nao recebi e-mail como esse post sendo respondido.
Abraco.
Alex - Lekao
Mariana Carvalho
07/10/2013
ja que vc me passou o t-sql(job), vai uma duvida para preencher uma tabela, apenas para testar o job, conhece algum codigo que faça isso?
Jefferson Santos
07/10/2013
ja que vc me passou o t-sql(job), vai uma duvida para preencher uma tabela, apenas para testar o job, conhece algum codigo que faça isso?
Faça um insert com loop para teste.
Alex Lekao
07/10/2013
[url]http://stackoverflow.com/questions/15182468/sql-server-2008-insert-with-while-loop[/url]
[url]http://stackoverflow.com/questions/5555841/sql-loop-insert-based-on-list-of-ids[/url]
[url]http://zarez.net/?p=2071[/url]
[url]http://social.msdn.microsoft.com/Forums/pt-BR/7caaac0c-2ea7-4b4d-b03d-0809f6800f13/loop-com-insert?forum=520[/url]
Mariana Carvalho
07/10/2013
irei testar assim que puder.
Alex Lekao
07/10/2013
qqr coisa posta ai o resultado...
outra possibilidade eh usar o SSMS para copiar os dados e criar um script de insercao.
acho que tem essa possibilidade.
Mariana Carvalho
07/10/2013