Skip to content

Commit 9295867

Browse files
committed
Novos scripts: info de db, checkdb, ultimo acesso, endpoints, dumps, etc.
1 parent 7288ebb commit 9295867

10 files changed

+522
-0
lines changed

Database/EstimarUltimoUsoBase.sql

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Descrição
7+
Essa foi um tentativa de uma query para estimar o último uso de banco de dados.
8+
O segredo aqui é usar a DMV sys.dm_db_index_usage_stats que contém um log com a última desde o restart.
9+
Então, a informação não é 100% precisa, mas serve apenas como um norte rápido para uma base que é muito usada.
10+
11+
*/
12+
13+
SELECT
14+
CURRENT_TIMESTAMP as CollectionTime
15+
,DI.*
16+
,SI.*
17+
FROM
18+
(
19+
SELECT
20+
DB_NAME(US.database_id) as DatabaseName
21+
,MAX(LACT.LastDate) as LastUse
22+
FROM
23+
sys.dm_db_index_usage_stats US
24+
OUTER APPLY
25+
(
26+
SELECT
27+
MAX(ACT.ActionDate) as LastDate
28+
FROM
29+
(
30+
SELECT US.last_user_lookup as ActionDate
31+
UNION ALL
32+
SELECT US.last_user_scan
33+
UNION ALL
34+
SELECT US.last_user_seek
35+
UNION ALL
36+
SELECT US.last_user_update
37+
) ACT
38+
) LACT
39+
GROUP BY
40+
DB_NAME(US.database_id)
41+
) DI
42+
CROSS JOIN
43+
(
44+
SELECT
45+
(SELECT create_date FROM sys.databases D WHERE d.name = 'tempdb') as ServerStartTime
46+
) SI

Database/LastGoodCheckDB.sql

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Descrição
7+
Traz o último CHECKDB feito em cada banco de dados.
8+
DBCC DBINFO é um comando não documentado e, portanto, em alguma versão futura do SQL esse script pode não funcionar!
9+
Até o sql 2022, tudo certo.
10+
*/
11+
12+
13+
drop table if exists #dbccinfo;
14+
15+
create table #dbccinfo( DbName nvarchar(1000), ParentObject varchar(200), Object varchar(1000), Field varchar(1000), Value varchar(1000) )
16+
17+
-- Poderia usar sp_Msforeach db aqui também.
18+
-- Não usei por cotna de um erro que tive em alguns testes com ela (provavelmente relacionado a algum caracter especial no nome do banco)
19+
set nocount on;
20+
declare @cmd nvarchar(max) = (
21+
select
22+
N'USE '+quotename(d.name)+';
23+
raiserror(''Collecting Db '+d.name+''',0,1) with nowait;
24+
insert into #dbccinfo(ParentObject, Object, Field, Value)
25+
exec(''dbcc dbinfo with tableresults,no_infomsgs'')
26+
update #dbccinfo set DBName = db_name() where DBName is null
27+
'
28+
from
29+
sys.databases D
30+
where
31+
d.state_desc = 'ONLINE'
32+
for xml path,type
33+
).value('.','nvarchar(max)')
34+
35+
exec(@cmd);
36+
37+
select * from #DbccInfo where Field like '%dbi_dbccLastKnownGood%'

Database/SizePerDatabase.sql

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Descrição
7+
Query rápida para trazer o tamanho real de todos os bancos da instância.
8+
No final, traz o tamanho de cada banco e o total da instância.
9+
Tudo em MB
10+
11+
*/
12+
13+
14+
IF OBJECT_ID('tempdb..#TamanhoBancos') IS NOT NULL
15+
DROP TABLE #TamanhoBancos;
16+
17+
CREATE TABLE
18+
#TamanhoBancos( Banco sysname, TamanhoTotalPag int, TamanhoUsadoPag int );
19+
20+
EXEC sp_MSforeachdb '
21+
USE [?];
22+
23+
INSERT INTO #TamanhoBancos
24+
SELECT
25+
db_name()
26+
,SUM(size)
27+
,SUM(FILEPROPERTY(name,''SpaceUsed''))
28+
FROM
29+
sys.database_files
30+
'
31+
32+
select
33+
Banco
34+
,sum(TamanhoTotalPag)/128.0 as Total
35+
,sum(TamanhoUsadoPag)/128.0 as Usado
36+
from #TamanhoBancos
37+
38+
GROUP BY
39+
Banco with rollup
40+
;
41+

Database/TamanhoTodosBancos_2000+.sql

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Descrição
7+
Uma versão do tamanho de todos os bancos que também funciona no SQL 2000
8+
O segredo é trocar por sysfiles.
9+
10+
*/
11+
12+
13+
IF OBJECT_ID('tempdb..#TamanhoBancos') IS NOT NULL
14+
DROP TABLE #TamanhoBancos;
15+
16+
CREATE TABLE
17+
#TamanhoBancos( Banco sysname, TamanhoTotalPag int, TamanhoUsadoPag int );
18+
19+
EXEC sp_MSforeachdb '
20+
USE [?];
21+
22+
23+
INSERT INTO #TamanhoBancos
24+
SELECT
25+
DB_NAME()
26+
,SUM(size)
27+
,SUM(FILEPROPERTY(name,''SpaceUsed''))
28+
FROM
29+
sysfiles
30+
'
31+
32+
SELECT
33+
@@SERVERNAME as ServerName
34+
,banco
35+
,ISNULL(SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),SERVERPROPERTY('MachineName')) as ComputerName
36+
--,count(*) as DatabaseCount
37+
,TamanhoTotalPag/128 as Total
38+
,TamanhoUsadoPag/128 as Usado
39+
FROM
40+
#TamanhoBancos
41+
ORDER BY
42+
Usado DESc
43+
;
44+

Database/UsageSizeInfo.sql

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Descrição
7+
Traz o tamanho e o último acesso (ESTIMADO) de cada banco.
8+
9+
*/
10+
11+
12+
IF OBJECT_ID('tempdb..#TamanhoBancos') IS NOT NULL
13+
DROP TABLE #TamanhoBancos;
14+
15+
CREATE TABLE
16+
#TamanhoBancos( Banco sysname, TamanhoTotalPag int, TamanhoUsadoPag int );
17+
18+
EXEC sp_MSforeachdb '
19+
USE [?];
20+
21+
INSERT INTO #TamanhoBancos
22+
SELECT
23+
db_name()
24+
,SUM(size)
25+
,SUM(FILEPROPERTY(name,''SpaceUsed''))
26+
FROM
27+
sys.database_files
28+
'
29+
30+
SELECT
31+
Instancia = @@SERVERNAME
32+
,Banco
33+
,TamTotal = TamanhoTotalPag/128.0
34+
,DataCriacao = D.create_date
35+
,UltimoUso = LU.LastUse
36+
FROM
37+
#TamanhoBancos TB
38+
JOIN
39+
sys.databases D
40+
ON D.name = TB.Banco COLLATE Latin1_General_CI_AI
41+
OUTER APPLY
42+
(
43+
SELECT
44+
DBName = DB_NAME(IUS.database_id)
45+
,LastUse = MAX(I.LastUse)
46+
FROM
47+
sys.dm_db_index_usage_stats IUS
48+
CROSS APPLY
49+
(
50+
SELECT
51+
LastUse = MAX(U.LastUserOp)
52+
FROM
53+
(
54+
SELECT IUS.last_user_seek
55+
UNION ALL
56+
SELECT IUS.last_user_scan
57+
UNION ALL
58+
SELECT IUS.last_user_lookup
59+
) U(LastUserOp)
60+
WHERE
61+
U.LastUserOp is not null
62+
) I
63+
WHERE
64+
I.LastUse IS NOT NULL
65+
AND
66+
DB_NAME(IUS.database_id) = TB.Banco COLLATE Latin1_General_CI_AI
67+
GROUP BY
68+
IUS.database_id
69+
) LU
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Descrição
7+
Script de exemplo de como criar um profiler no database mail.
8+
Não foi eu quem criou ele.
9+
Provavelmente peguei de alguma interface que gera ou de alguma fonte na internet.
10+
11+
12+
*/
13+
14+
15+
-------------------------------------------------------------
16+
-- Database Mail Simple Configuration Template.
17+
--
18+
-- This template creates a Database Mail profile, an SMTP account and
19+
-- associates the account to the profile.
20+
-- The template does not grant access to the new profile for
21+
-- any database principals. Use msdb.dbo.sysmail_add_principalprofile
22+
-- to grant access to the new profile for users who are not
23+
-- members of sysadmin.
24+
-------------------------------------------------------------
25+
26+
DECLARE @profile_name sysname,
27+
@profile_description nvarchar(256),
28+
@account_name sysname,
29+
@SMTP_servername sysname,
30+
@email_address NVARCHAR(128),
31+
@display_name NVARCHAR(128);
32+
33+
--- ALTERAR OS DADOS AQUI:
34+
35+
-- Profile name. Replace with the name for your profile
36+
SET @profile_name = 'DBA';
37+
SET @profile_description = 'Profile default para ser usado pelos scripts de monitoramento do DBA'
38+
39+
-- Account information. Replace with the information for your account.
40+
41+
SET @account_name = 'SQL Server';
42+
SET @SMTP_servername = 'Servidor SMTP';
43+
SET @email_address = 'Email do Remetente';
44+
SET @display_name = 'Nome do Remetente';
45+
46+
47+
48+
49+
50+
-- DAQUI PRA FRENTE, NÃO PRECISA ALTERAR NADA!!!!
51+
52+
53+
-- Verify the specified account and profile do not already exist.
54+
IF EXISTS (SELECT * FROM msdb.dbo.sysmail_profile WHERE name = @profile_name)
55+
BEGIN
56+
RAISERROR('The specified Database Mail profile (%s) already exists.', 16, 1, @profile_name);
57+
GOTO done;
58+
END;
59+
60+
IF EXISTS (SELECT * FROM msdb.dbo.sysmail_account WHERE name = @account_name )
61+
BEGIN
62+
RAISERROR('The specified Database Mail account (%s) already exists.', 16, 1, @account_name) ;
63+
GOTO done;
64+
END;
65+
66+
-- Start a transaction before adding the account and the profile
67+
BEGIN TRANSACTION ;
68+
69+
DECLARE @rv INT;
70+
71+
-- Add the account
72+
EXECUTE @rv=msdb.dbo.sysmail_add_account_sp
73+
@account_name = @account_name,
74+
@email_address = @email_address,
75+
@display_name = @display_name,
76+
@mailserver_name = @SMTP_servername;
77+
78+
IF @rv<>0
79+
BEGIN
80+
RAISERROR('Failed to create the specified Database Mail account (%s): %d', 16, 1,@account_name,@rv) ;
81+
GOTO done;
82+
END
83+
84+
85+
86+
-- Add the profile
87+
EXECUTE @rv=msdb.dbo.sysmail_add_profile_sp
88+
@profile_name = @profile_name
89+
,@description = @profile_description
90+
;
91+
92+
IF @rv<>0
93+
BEGIN
94+
RAISERROR('Failed to create the specified Database Mail profile (%s): %d', 16, 1, @rv);
95+
ROLLBACK TRANSACTION;
96+
GOTO done;
97+
END;
98+
99+
-- Associate the account with the profile.
100+
EXECUTE @rv=msdb.dbo.sysmail_add_profileaccount_sp
101+
@profile_name = @profile_name,
102+
@account_name = @account_name,
103+
@sequence_number = 1 ;
104+
105+
IF @rv<>0
106+
BEGIN
107+
RAISERROR('Failed to associate the speficied profile (%s) with the specified account (%s): %d', 16, 1, @profile_name,@account_name,@rv) ;
108+
ROLLBACK TRANSACTION;
109+
GOTO done;
110+
END;
111+
112+
COMMIT TRANSACTION;
113+
114+
done:
115+
116+
GO
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Descrição
7+
Script para testar o envio de mail usando database mail.
8+
O teste é um simples envio. Ajuste o nome do profile e o email nos parâmetros abaixo.
9+
10+
11+
*/
12+
13+
IF OBJECT_ID('msdb.dbo.sp_send_dbmail') IS NULL
14+
RETURN;
15+
16+
DECLARE @HtmlFinal nvarchar(4000);
17+
18+
SET @HtmlFinal = N'
19+
Este email foi enviado como um teste do servidor: <b>'+CONVERT(nvarchar(500),@@SERVERNAME)+',</b>
20+
'
21+
22+
EXEC msdb.dbo.sp_send_dbmail
23+
@profile_name = 'Nome do profile'
24+
,@recipients = 'COLOQUE O EMAIL DE DESTINO AQUI'
25+
,@subject = N'TESTE DATABASE MAIL'
26+
,@body = @HtmlFinal
27+
,@body_format = 'HTML'
28+
29+

0 commit comments

Comments
 (0)