Skip to main content

SQL Server – Backup de Todas as Bases de Dados

Para executar backup de todas as bases do SQL Server, crie um arquivo com o código abaixo.

DECLARE @BackupFile varchar (255), @DB varchar( 30), @Description varchar(255 ), @LogFile varchar(50 )

DECLARE @Name varchar (30), @MediaName varchar( 30), @BackupDirectory nvarchar(200 )
SET @BackupDirectory = 'F:\SQL Server\Backup\'

DECLARE Database_CURSOR CURSOR FOR SELECT name FROM sysdatabases WHERE name <> 'tempdb' AND name <> 'model' AND name <> 'Northwind'

OPEN Database_Cursor
FETCH next FROM Database_CURSOR INTO @DB
WHILE @@fetch_status = 0

BEGIN
SET @Name = @DB + '( Daily BACKUP )'
SET @MediaName = @DB + '_Dump' + CONVERT( varchar, CURRENT_TIMESTAMP , 112)

SET @BackupFile = @BackupDirectory + + @DB + '_' + 'Full' + '_' +
CONVERT(varchar , CURRENT_TIMESTAMP , 112 ) + '.bak'
SET @Description = 'Normal' + ' BACKUP at ' + CONVERT(varchar , CURRENT_TIMESTAMP ) + '.'

IF (SELECT COUNT(*) FROM msdb .dbo. backupset WHERE database_name = @DB) > 0 OR @DB = 'master'
BEGIN
SET @BackupFile = @BackupDirectory + @DB + '_' + 'Full' + '_' +

CONVERT(varchar , CURRENT_TIMESTAMP , 112 ) + '.bak'
--SET some more pretty stuff for sql server.
SET @Description = 'Full' + ' BACKUP at ' + CONVERT(varchar , CURRENT_TIMESTAMP ) + '.'

END
ELSE
BEGIN
SET @BackupFile = @BackupDirectory + @DB + '_' + 'Full' + '_' +
CONVERT(varchar , CURRENT_TIMESTAMP , 112 ) + '.bak'
--SET some more pretty stuff for sql server.

SET @Description = 'Full' + ' BACKUP at ' + CONVERT(varchar , CURRENT_TIMESTAMP ) + '.'
END
BACKUP DATABASE @DB TO DISK = @BackupFile
WITH NAME = @Name, DESCRIPTION = @Description ,

MEDIANAME = @MediaName, MEDIADESCRIPTION = @Description ,
STATS = 10
FETCH next FROM Database_CURSOR INTO @DB
END
CLOSE Database_Cursor
DEALLOCATE Database_Cursor

Para executar, utilize o comando abaixo.

sqlcmd -S . -i "C:\Scripts\Nome_do_Arquivo.sql"

Pode ser executado quando necessário, ou como uma tarefa.

SQL – Diminuindo o tamanho da base (MDF)

Para resolver isso basta usar o SHRINKDATABASE. Abaixo a sintaxe do comando:.

USE NOME_DO_SEU_DB
 
DBCC SHRINKDATABASE (NOME_DO_SEU_DB, 0)

SQL – Apagando todos os registros de um banco de dados SQL Server

para facilmente excluir todos os dados de todas a tabelas de um banco de dados SQL Server, a seguinte query resolve o problema:

-- desativa a integridade referencial
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
 
EXEC sp_MSForEachTable '
IF OBJECTPROPERTY(object_id(''?''), ''TableHasForeignRef'') = 1
DELETE FROM ?
else
TRUNCATE TABLE ?
'
GO
 
-- reativa a integridade refencial
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO

Em detalhes, o que a query faz: ela usa uma stored procedure não documentada do SQL Server chamada sp_MSForEachTable. Resumidamente, esta stored procedure dispara um comando SQL passado por parâmetro em todas as tabelas de um database, sendo o nome da tabela substituído pelo caracter “?”, como pode ser visto na query anterior. Se além de de apagar os dados das tabelas, quiser também reiniciar a contagem dos campos de chave primária, mais conhecido como RESEED, bastaria colocar a seguinte query antes da reativação da integridade referencial:

-- Reinicia o contador de chave primária de todas as tabelas
EXEC sp_MSForEachTable '
IF OBJECTPROPERTY(object_id(''?''), ''TableHasIdentity'') = 1
DBCC CHECKIDENT (''?'', RESEED, 0)
'
GO

Esse tipo de macete é uma mão na roda.

Limpar Log de Banco no SQL Server (Arquivo .LDF)

Muitas vezes o disco do servidor do banco de dados acaba o espaço porque não é feita uma manutenção nos arquivos de log dos bancos SQL. Com o comando abaixo conseguimos limpar os logs (arquivos .ldf). Mas cuidado! Isto APAGA todo o log. Se você precisa do log por algum motivo faça um BKP antes.

    -- 1) Colocar o nome do banco que deseja limpar o log no comando USE  
    -- 2) Pegar o campo Name do arquivo de Log com o comando abaixo  
    USE ;   
    SELECT * FROM sysfiles   
    GO  
      
    -- 3) Colocar o nome do banco que deseja limpar o log nas variáves   
    -- 4) Colocar o nome do arquivo de log na variável da linha SHRINKFILE  
    USE ;  
    GO  
    ALTER DATABASE   
    SET RECOVERY SIMPLE;  
    GO  
    DBCC SHRINKFILE (, 1);  
    GO  
    ALTER DATABASE   
    SET RECOVERY FULL;  
    GO

Warning: Use of undefined constant XML - assumed 'XML' (this will throw an Error in a future version of PHP) in /home/mmva7lky/public_html/wp-content/plugins/wp-syntaxhighlighter/wp-syntaxhighlighter.php on line 1048