EXECUTAR ROTINA 1 X POR DIA E 1 X POR SEMANA

ALEXPASSOS 06/02/2012 08:12:18
#394088
Olá

Estou precisando fazer uma rotina de backup do banco de dados, e o cliente me pediu para colocar a opção para ele escolher se quer que faça backup 1 x por dia ou 1 x por semana.

E estou sem ideia nenhuma de como fazer isso, alguém tem alguma ideia?
ALTAIR148 06/02/2012 08:44:04
#394089
Resposta escolhida
Bom dia,

Vou fazer um exemplo aqui para você ter idéia e já posto.
ALTAIR148 06/02/2012 10:49:28
#394090
Amigo, perguntinha beeeem básica....

Qual banco de dados(MYSQL, ACCESS...)?
ALEXPASSOS 06/02/2012 14:07:34
#394094
SQL Server

Eu pensei em colocar um timer.... mais um timer só funcionaria se o sistema estiver aberto
ALEXPASSOS 06/02/2012 14:11:23
#394095
Eu sei que o SQL Server já tem essa opção de backup.... mais o problema é que ele vai acumulando em um único arquivo. E o cliente esta querendo assim:

BKP_04-02-2012.bak
BKP_05-02-2012.bak
BKP_06-02-2012.bak

um arquivo para cada dia, ai os arquivos ficam com tamanho pequeno. Ai ele quer que faça copia dessa arquivo em um servidor web via FTP. Por isso que pensei queem fazer minha própria rotina.
ALTAIR148 06/02/2012 15:02:47
#394096
Então amigo, eu tenho uma rotina assim, ela executa o backup, mas fica um sistema bem leve rodando em segundo plano, um sistema que tem somente a função de backup.
ALEXMARCHI 06/02/2012 15:16:40
#394097
O que eu aconselharia

eu faria o backup pelo próprio sql server, só que para gerar o nome da forma que você deseja eu faria através de uma Stored procedure,

quando eu executasse o comando bulk copy eu concatenaria a data ao prefixo do nome.
para definir a periodicidade eu criaria um job que rodaria de acordo com o schedule definido

e para mandar automaticamente para o ftp, é só criar uma class libary no dot.net e acessa-la pelo banco via CLR.

e se você quiser complementar, você pode enviar um e-mail quando a operação estiver concluída informando se está tudo Ok ou se deu algum erro.

Desta forma que eu faria
ALEXPASSOS 06/02/2012 15:21:39
#394098
Certo, mais pelo próprio SQL Server ele vai acumulando em um único arquivo... não consegui fazer separação.

O SQL Server tem essa opção de em vez de adicionar no mesmo arquivo criar outro arquivo?
MARCELOSN 06/02/2012 17:41:18
#394101
Boa tarde


Eu uso esta rotina em um arquivo LOTE/ BAT que executa todos os dias no agendador de tarefas do windows

=============================================
Criar um arquivo de Lote para executar a tarefa:
coloque dentro do arquivo de lote
=============================================
osql -S. -Uxxx -Pyyy -ie:\BACKUP.SQL

Onde
xxx=USUARIO SQL
yyy=SENHA SQL

==========================================================================================
Criar Arquivo com nome: BACKUP.SQL e salvar as informações para executar
USE NOME_BANCO_DADOS
GO

DECLARE @NOMETABELA VARCHAR(128)
DECLARE @ARQUIVO VARCHAR(100)
DECLARE @BANCO VARCHAR(100)


DECLARE TABELAS CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = [ô]BASE TABLE[ô] ORDER BY TABLE_NAME

OPEN TABELAS
FETCH NEXT FROM TABELAS INTO @NOMETABELA
WHILE @@FETCH_STATUS = 0
BEGIN
IF UPPER(LEFT(@NOMETABELA,7)) = [ô]TB_TEMP[ô]
EXECUTE ([ô]TRUNCATE TABLE [ô] + @NOMETABELA)
DBCC DBREINDEX(@NOMETABELA) WITH NO_INFOMSGS
FETCH NEXT FROM TABELAS INTO @NOMETABELA
END
CLOSE TABELAS
DEALLOCATE TABELAS

SET @BANCO=DB_NAME()
EXECUTE([ô]BACKUP LOG [ô] + @BANCO + [ô] WITH TRUNCATE_ONLY[ô])
EXECUTE([ô]DBCC SHRINKDATABASE([ô] + @BANCO + [ô],1)[ô])


-- Exemplo SET @ARQUIVO = [ô][ô][ô]e:\BackupSql:[ô] + @BANCO + [ô]_DB_[ô]

SET @ARQUIVO = [ô][ô][ô]Drive_e_Local_Backup:[ô] + @BANCO + [ô]_DB_[ô] +
SUBSTRING(CONVERT(CHAR(10),GETDATE(),103),7,4) +
SUBSTRING(CONVERT(CHAR(10),GETDATE(),103),4,2) +
SUBSTRING(CONVERT(CHAR(10),GETDATE(),103),1,2) +
[ô]_[ô] +
SUBSTRING(CONVERT(CHAR(12),GETDATE(),114),1,2) +
SUBSTRING(CONVERT(CHAR(12),GETDATE(),114),4,2) +
SUBSTRING(CONVERT(CHAR(12),GETDATE(),114),7,2) + [ô].BAK[ô][ô][ô]

EXECUTE ([ô]BACKUP DATABASE [ô] + @BANCO + [ô] TO DISK = [ô] + @ARQUIVO)
ALEXPASSOS 08/02/2012 08:11:40
#394235
Olá Altair

Como seria esse exemplo que você disse que ia fazer.

Tem como explicar? Talves eu consiga fazer
ALTAIR148 08/02/2012 09:13:12
#394245
Então, no meu exemplo é para MYSQL, mas com ele dá para se ter uma idéia de como vc quer fazer. Depois vc pode colocar ele para ficar no Tray(Ao lado do relógio), isso vai depender da sua necessidade aí.
O sistema com toda certeza vai precisar de muitas melhorias, na verdade fiz ele aqui só para que você possa usar de exemplo, foi uma coisa rápida que fiz em um tempo livre que tive aqui.
Tópico encerrado , respostas não são mais permitidas