0% acharam este documento útil (0 voto)
8 visualizações3 páginas

Backup de Bancos de Dados SQLExpress

O documento descreve um procedimento armazenado em SQL Server para realizar backups de bancos de dados no SQLExpress. Ele permite especificar o nome do banco de dados, o tipo de backup (completo, diferencial ou log) e a localização do arquivo de backup. O procedimento filtra bancos de dados que não devem ser incluídos no backup e executa o comando SQL apropriado para cada banco de dados selecionado.

Enviado por

Jerry Pereira
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
8 visualizações3 páginas

Backup de Bancos de Dados SQLExpress

O documento descreve um procedimento armazenado em SQL Server para realizar backups de bancos de dados no SQLExpress. Ele permite especificar o nome do banco de dados, o tipo de backup (completo, diferencial ou log) e a localização do arquivo de backup. O procedimento filtra bancos de dados que não devem ser incluídos no backup e executa o comando SQL apropriado para cada banco de dados selecionado.

Enviado por

Jerry Pereira
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd

-- =============================================

-- Autor: Microsoft
-- Data de criação: 2010-02-06
-- Descrição: Backup de bancos de dados para SQLExpress
-- Parâmetro1: nome do banco de dados
-- Parameter2: backupType F=full, D=differential, L=log
-- Parâmetro3: localização do arquivo de backup
-- =============================================

CREATE PROCEDURE [dbo].[sp_BackupDatabases]


@databaseName sysname = null,
@backupType CHAR(1),
@backupLocation nvarchar(200)
AS

SET NOCOUNT ON;

DECLARE @DBs TABLE


(
ID int IDENTITY PRIMARY KEY,
DBNAME nvarchar(500)
)

-- Selecionar apenas bancos de dados que estejam online caso TODOS os bancos de
dados sejam escolhidos para o backup
-- Se um banco de dados específico for escolhido para backup, selecioná-lo apenas
entre @DBs

INSERT INTO @DBs (DBNAME)


SELECT Name FROM [Link]
where state=0
AND name=@DatabaseName
OR @DatabaseName IS NULL
ORDER BY Name

-- Filtrar bancos de dados dos quais não é preciso fazer backup


IF @backupType='F'
BEGIN
DELETE @DBs where DBNAME IN
('tempdb','Northwind','pubs','AdventureWorks','master','model','msdb',

'ReportServer','ReportServerTempDB','SANKHYA_TESTE','SANKHYA_TREINA')
END
ELSE IF @backupType='D'
BEGIN
DELETE @DBs where DBNAME IN
('tempdb','Northwind','pubs','AdventureWorks','master','model','msdb',

'ReportServer','ReportServerTempDB','SANKHYA_TESTE','SANKHYA_TREINA')
END
ELSE IF @backupType='L'
BEGIN
DELETE @DBs where DBNAME IN
('tempdb','Northwind','pubs','AdventureWorks','master','model','msdb',

'ReportServer','ReportServerTempDB','SANKHYA_TESTE','SANKHYA_TREINA')
END
ELSE
BEGIN
RETURN
END

-- Declarar variáveis
DECLARE @BackupName varchar(100)
DECLARE @BackupFile varchar(100)
DECLARE @DBNAME varchar(300)
DECLARE @sqlCommand NVARCHAR(1000)
DECLARE @dateTime NVARCHAR(20)
DECLARE @Loop int

-- Executar um loop pelos bancos de dados, um por um


SELECT @Loop = min(ID) FROM @DBs

WHILE @Loop IS NOT NULL


BEGIN

-- Os Nomes de Bancos de Dados devem estar no formato [dbname], pois alguns têm -
ou _ no nome
SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'

-- Definir a data e a hora atuais n formato aaaahhmmss


SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' +
REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')

-- Criar um nome de arquivo de backup no formato caminho\nome_de_arquivo.extensão


para backups completos, diferenciais e de log
IF @backupType = 'F'
SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME,
'[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
ELSE IF @backupType = 'D'
SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME,
'[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
ELSE IF @backupType = 'L'
SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME,
'[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'

-- Fornecer um nome para o backup para armazenar na mídia


IF @backupType = 'F'
SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full
backup for '+ @dateTime
IF @backupType = 'D'
SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +'
differential backup for '+ @dateTime
IF @backupType = 'L'
SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup
for '+ @dateTime

-- Gerar o comando SQL dinâmico a ser executado

IF @backupType = 'F'
BEGIN
SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK =
'''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
END
IF @backupType = 'D'
BEGIN
SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK =
'''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP,
NOFORMAT'
END
IF @backupType = 'L'
BEGIN
SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+ ' TO DISK =
'''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
END

-- Executar o comando SQL gerado


EXEC(@sqlCommand)

-- Ir para o próximo banco de dados


SELECT @Loop = min(ID) FROM @DBs where ID>@Loop
END

Você também pode gostar