quinta-feira, 30 de janeiro de 2020

Processos executando - sessões via SQL

Códigos para verificar processos/sessões em execução no SQL Server:

Procedure 1:

exec sp_who


Procedure 2:

exec sp_who2


Consulta tabelas do sistema:

SELECT
sqltext.TEXT,  
req.session_id, 
req.status, 
req.command,   
req.cpu_time, 
req.total_elapsed_time,
start_time,database_id,
user_id,
scheduler_id,
reads,
writes,
logical_reads,
granted_query_memory,
GETDATE() AS DAT_ATUALIZACAO
FROM        
sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS  sqltext
Order by 
cpu_time desc





Propriedades do servidor: IP, Server Name, Versão via SQL


Código para obter algumas propriedades de Conexão.

SELECT 
CONNECTIONPROPERTY('net_transport') AS net_transport,
CONNECTIONPROPERTY('protocol_type') AS protocol_type,
CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
CONNECTIONPROPERTY('local_net_address') AS local_net_address,
CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
CONNECTIONPROPERTY('client_net_address') AS client_net_address,
CONNECTIONPROPERTY('physical_net_transport') as physical_net_transport,
@@SERVERNAME as server_name ,
host_name() as host_name,
@@VERSION as versao_sql

Podemos obter IP, nome do servidor e etc.

Espaço em disco (disponível) via SQL

Dois exemplos:

Via procedure:

EXEC master.dbo.xp_fixeddrives; 






Via tabelas do sistema:


SELECT DISTINCT
    VS.volume_mount_point [Montagem] ,
    VS.logical_volume_name AS [Volume] ,
    CAST(CAST(VS.total_bytes AS DECIMAL(19, 2)) / 1024 / 1024 / 1024 AS DECIMAL(10, 2)) AS [Total (GB)] ,
    CAST(CAST(VS.available_bytes AS DECIMAL(19, 2)) / 1024 / 1024 / 1024 AS DECIMAL(10, 2)) AS [Espaço Disponível (GB)] ,
    CAST(( CAST(VS.available_bytes AS DECIMAL(19, 2)) / CAST(VS.total_bytes AS DECIMAL(19, 2)) * 100 ) AS DECIMAL(10, 2)) AS [Espaço Disponível ( % )] ,
    CAST(( 100 - CAST(VS.available_bytes AS DECIMAL(19, 2)) / CAST(VS.total_bytes AS DECIMAL(19, 2)) * 100 ) AS DECIMAL(10, 2)) AS [Espaço em uso ( % )]
FROM
    sys.master_files AS MF
    CROSS APPLY [sys].[dm_os_volume_stats](MF.database_id, MF.file_id) AS VS
--WHERE
--    CAST(VS.available_bytes AS DECIMAL(19, 2)) / CAST(VS.total_bytes AS DECIMAL(19, 2)) * 100 < 100;







Obs: O Where esta comentado.

Tamanhos de tabelas via SQL

Exemplo para obter o tamanho das tabelas no banco de dados:

use master
go


SELECT
    t.NAME AS Tabela,
    p.rows AS Linhas,
    SUM(a.total_pages) * 8 AS TotalSpaceKB,
    CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
    SUM(a.used_pages) * 8 AS UsedSpaceKB,
    CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
    CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM
    sys.tables t
INNER JOIN   sys.indexes i 
ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p 
ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a 
ON p.partition_id = a.container_id
LEFT JOIN sys.schemas s 
ON t.schema_id = s.schema_id
--WHERE

    --t.NAME NOT LIKE 'dt%'
    --AND t.is_ms_shipped = 0
    --AND i.OBJECT_ID > 255
GROUP BY
    t.Name, 
s.Name, 
p.Rows
--ORDER BY
--    t.Name;


A partir desse código pode ser utilizado de acordo com a necessidade do analista. No exemplo as clausulas Where e Order By estão comentadas, pode filtrar/ordenar pelos campos que quiser, por exemplo, nome das tabelas e tamanho.

Obs: No meu exemplo estou no banco Master, mude de acordo com sua necessidade.

terça-feira, 28 de janeiro de 2020

Banco de Dados Básico - Parte 05 - O que é DDL, DML e DCL

Nos posts anteriores foram abordados os conceitos iniciais, com foco na cláusula Select.
Neste post teremos uma introdução dos outros comandos existentes.

A SQL é a linguagem mais utilizada em Banco de Dados.
Você pode utilizar SQL em diversos bancos diferentes como por exemplo: Oracle, SQL Server, MySQL, PostgreeSQL, Teradata, Access e etc.
Vale lembrar que há pequenas diferenças na linguagem entre esses Bancos diversos, como por exemplo, tipos de dados e extensões das linguagens como a T-SQL e o PL/SQL.
Mas o padrão é o mesmo. Esse padrão é garantido pela ANSI e ISO.
Aprendendo o SQL padrão será capaz de executar consultas simples em qualquer um desses Bancos.
A SQL é uma linguagem que possui algumas categorias, como por exemplo a DML, DDL e DCL.


A figura a seguir tenta ilustrar a função de cada uma dessas categorias.




Figura 01 -  Categorias da SQL: DML, DCL e DDL.




A DDL (Data Definition Language) é a linguagem para definições de objetos como Tabelas, procedures, tipos de dados, restrições de integridade e etc. Inclui instruções como CREATE, ALTER e DROP. Pense como a categoria para "estrutura" do Banco.

A DML (Data Manipulation Language) é a linguagem que permite consultar e modificar dados. Essas modificações envolvem atualização, exclusão e inserção de novos registros. Inclui instruções como SELECT, INSERT, UPDATE, DELETE e MERGE.
Pense que é a categoria relacionada com o "conteúdo".

A DCL (Data Control Language) lida com permissões e visualizações. Inclui as instruções GRANT, DENY e REVOKE. Pense aqui "Quem acessa" e "O que acessa".

É importante ter essas definições bem claras pois além do aprendizado técnico, essas questões costumam cair em testes de empregos e de concursos.




Referencias:

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_1001.htm#SQLRF30001

SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S.  Sistema de banco de dados. São Paulo : Makron Books, 1999.

BEN-GAN, I. Microsoft SQL Server 2008: fundamentos em T-SQL. Porto Alegre: Bookman, 2010. 416p.