Category Archives: Scripts

O ultimo backup full executado com sucesso

Olá pessoal,

Após algum tempo sem passar por aqui, venho compartilhar um pequeno script que criei para pegar o último backup full que aconteceu para cada base de dados na instancia. O script é bastante simples e com certeza, você poderá encontrar outros pela internet, mas como sempre gosto de compartilhar algo que crio, aqui estou.

O script executa a leitura na tabela backupset do banco de dados msdb procurando pelo último backup full completo. Read the rest of this entry

[Script] Obtendo tamanho das bases de dados detalhadamente

Olá pessoal,

Mais uma vez aqui compartilhando scripts com vocês. Dessa vez o script que vou passar é para vocês pegarem o tamanho de suas bases de dados, porem com algumas outras informações como: Tamanho total, espaço utilizado, espaço disponivel e disco de localização dos arquivos (mdf e ldf). Vale lembrar que esse script apenas pega o tamanho do arquivo .mdf e .ndf, caso você desejar pegar a informação também para o arquivo .ldf, você precisa retirar a clausula “WHERE   df.type = 0”. Abaixo segue o script, espero que todos gostem. Read the rest of this entry

E quando você nao tem Policy Based Management

Olá Pessoal,

O post de hoje é algo bem simples, mas que pode ser bastante pratico no dia-a-dia. Todos aqui sabemos que o Policy Based Management foi criado a partir do SQL Server 2008 para suprir uma grande necessidade de automatização que precisamos na vida de um DBA. Mas o que vocês devem se perguntar é quando não temos essa ferramenta para nos ajudar, o que devemos fazer para ter a mesma facilidade?

Read the rest of this entry

Exportando planos de manutenção

Estava configurando um ambiente de alta disponibilidade e precisa recriar todos os planos de manutenção no outro servidor, mas recriar na mão seria um trabalho árduo, então para criamos os planos no outro lado vamos as seguintes configurações.

1) Conecte na instancia do Integration Services

2) Faça o seguinte caminho: Stored Packages -> MSDB -> Maintenance Plans

Conforme mostra a figura clique sobre o pacote desejado e vá na opção “Export Package”.

3) Após isso a tela abaixo ira aparecer.

Voce deve se conectar no servidor para a qual deseja exportar os pacotes, clicar em “Package Path” e selecionar o mesmo caminho dentro de SSIS Packages.

Feito isso os jobs aparecerão para voce no outro servidor, porem um detalhe importante é que os jobs do SQL Server Agent nao sao exportados. Nada adianta ter exportado os pacotes e ter que criar os jobs tudo na mao.

Pesquisando por ai, encontrei um script em powershell  feito por Enrique Puig Nouselles (SolidQ – Blog) para gerar o codigos dos jobs. Para configurar o script voce deve se atentar a dois parametros dentro do script.

1) $server = ‘localhost’ <- Servidor SQL Server
2) $outputPath = ‘C:\Temp\Script_Jobs.txt’ <- Onde deverá criar o arquivo

Feito a execução o arquivo ira aparecer onde voce predefiniu o caminho.

Agora é só executar o mesmo no outro servidor e pronto, tudo estará criado.

O script powershell pode ser baixado aqui.

Por hoje é isso, espero que tenham gostado.

Att,
Marcos Freccia
MCITP SQL Server 2008

Dettach and Attach Databases Script

Hello Guys,

I was looking for some simple and fast way to generate a list for dettach and attach databases, but the most of scripts on the internet uses cursor and as i really hate cursors, i decided to write my own scripts, because it is a good way to learn and improve your T-SQL Skills.

So, i will put the code for two scripts below and you could download these scripts here

Dettach Databases

— If you put 1 the databases will be dettached
SET nocount ON
DECLARE @SQL NVARCHAR(MAX)
DECLARE @DatabaseName NVARCHAR(512)
DECLARE @ExecuteNow BIT
SET @ExecuteNow = 0
DECLARE @table TABLE
(
id INT ,
dbName NVARCHAR(512) ,
isVerified BIT
)
INSERT  INTO @table
SELECT  database_id ,
name ,
0 AS isVerified
FROM    sys.databases
WHERE   name NOT IN ( ‘master’, ‘tempdb’, ‘model’, ‘msdb’,
‘ReportServerTempDB’,
‘ReportServer’, ‘distribution’ )
ORDER BY database_id

WHILE ( SELECT  COUNT(*)
FROM    @table
WHERE   isVerified = 0
) > 0
BEGIN
SELECT TOP ( 1 )
@DatabaseName = dbName
FROM    @table
WHERE   isVerified = 0

IF @ExecuteNow = 1
BEGIN
SET @SQL = ‘exec sp_detach_db ”’ + @databaseName + ””
EXEC sp_executesql @sql
END

PRINT ‘exec sp_detach_db ”[‘ + @databaseName + ‘]”’

UPDATE  @table
SET     isVerified = 1
WHERE   @DatabaseName = dbName
END
SET nocount OFF

And now how to attach databases

SET nocount ON
DECLARE @SQL NVARCHAR(MAX)
DECLARE @DatabaseName NVARCHAR(512)

DECLARE @table TABLE
(
id INT ,
dbName NVARCHAR(512) ,
isVerified BIT
)
INSERT  INTO @table
SELECT  database_id ,
name ,
0 AS isVerified
FROM    sys.databases
WHERE   name NOT IN ( ‘master’, ‘tempdb’, ‘model’, ‘msdb’,
‘ReportServerTempDB’,
‘ReportServer’, ‘distribution’ )
ORDER BY database_id

WHILE ( SELECT  COUNT(*)
FROM    @table
WHERE   isVerified = 0
) > 0
BEGIN
SELECT TOP ( 1 )
@DatabaseName = dbName
FROM    @table
WHERE   isVerified = 0

SET @SQL = ( SELECT TOP ( 1 )
‘exec sp_attach_db ”’ + @DatabaseName + ”’ , ‘
+ ( SELECT  ”” + physical_name + ””
FROM    sys.master_files
WHERE   database_id = DB_ID(@DatabaseName)
AND RIGHT(physical_name, 3) = ‘mdf’
) + ‘ , ‘
+ ( SELECT  ”” + physical_name + ””
FROM    sys.master_files
WHERE   database_id = DB_ID(@DatabaseName)
AND RIGHT(physical_name, 3) = ‘ldf’
)
FROM   @table
)

PRINT @sql

UPDATE  @table
SET     isVerified = 1
WHERE   @DatabaseName = dbName

END
SET nocount OF

So, that’s a simple and good way to generate attach and dettach, it isn’t the best, but can help you.

Regards,
Marcos Freccia

Scritps do dia a dia: Meu backup executou?

Ola pessoal, estou fazendo esse post apenas para compartilhar um script que utilizo na verificação dos meus jobs de backup. Então quem sabe ele possa ser util para você também.

select job.name as nome,
description as descricao,
cast(isnull(NULLIF(SUBSTRING(cast(last_run_date as varchar(50)),1,4),’0′) +’-‘+
SUBSTRING(cast(last_run_date as varchar(50)),5,2) + ‘-‘+
SUBSTRING(cast(last_run_date as varchar(50)),7,2),’2999-12-31′) as datetime) as UltimaExecucao,
Status =
case when cast(last_run_outcome as varchar(10)) = 0 then ‘Falhou’
     when cast(last_run_outcome as varchar(10)) = 1 then ‘Completou com sucesso’
     when cast(last_run_outcome as varchar(10))= 3 then ‘Cancelado’
     when CAST(last_run_outcome as varchar(15)) = 5 then ‘Nunca utilizado’
else cast(‘Desconhecido’ as varchar(15))
end
from msdb.dbo.sysjobs as job
left outer join msdb.dbo.sysjobservers as jobServer
on job.job_id = jobServer.job_id
where job.name <> (‘syspolicy_purge_history’)
order by nome

E se vocês querem salvar o historico, podem criar uma tabela também como essa:

create table dbo.LastJobs (JobName varchar(125) not null,
descricao varchar (512) not null, ultimaExecucao datetime not null,
[Status] varchar(50) not null)

Ai o resto vocês podem imaginar, manda por e-mail, publica no reporting services, ou seja, podem fazer N coisas com esse script.

Espero que vocês tenham gostado.

Marcos Freccia
MCTS SQL Server 2008 Implementation and Maintenance
MCTS SQL Server 2008 Database Development
@SqlFreccia