EXECUTAR ROTINA 1 X POR DIA E 1 X POR SEMANA
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?
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?
Bom dia,
Vou fazer um exemplo aqui para você ter idéia e já posto.
Vou fazer um exemplo aqui para você ter idéia e já posto.
Amigo, perguntinha beeeem básica....
Qual banco de dados(MYSQL, ACCESS...)?
Qual banco de dados(MYSQL, ACCESS...)?
SQL Server
Eu pensei em colocar um timer.... mais um timer só funcionaria se o sistema estiver aberto
Eu pensei em colocar um timer.... mais um timer só funcionaria se o sistema estiver aberto
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.
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.
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.
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
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
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?
O SQL Server tem essa opção de em vez de adicionar no mesmo arquivo criar outro arquivo?
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)
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)
Olá Altair
Como seria esse exemplo que você disse que ia fazer.
Tem como explicar? Talves eu consiga fazer
Como seria esse exemplo que você disse que ia fazer.
Tem como explicar? Talves eu consiga fazer
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.
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