quarta-feira, 17 de outubro de 2012

Comando RTRIM - SQLSERVER 2008

RTRIM (string) = remove os espaços em branco à direita de uma string.

update TABELA set CAMPO_A = RTRIM(CAMPO_A);

terça-feira, 16 de outubro de 2012

DICAS - SQLSERVER 2008R2

Como fazer para visualizar os usuários conectados no banco SQLServer 2008?
  • Exec sp_who

Como derrubar a conexão de um determinado usuário via comando no SQL-SERVER 2008?
  • Procure o spid do usuário através da instrução:
  • SELECT session_id FROM sys.dm_exec_sessions where login_name = ‘usuario_desejado'

Matando o spid do usuário desejado
  • kill do spid


segunda-feira, 15 de outubro de 2012

SQL Server Management Studio



SQL Server 2008 Management Studio
SQL Server 2008 Management Studio

SQL Server Management Studio é um ambiente integrado para acessar, configurar, gerenciar, administrar e desenvolver todos os componentes do SQL Server. O SQL Server Management Studio combina um amplo grupo de ferramentas gráficas com editores de scripts ricos para fornecer acesso ao SQL Server para desenvolvedores e administradores de todos os níveis.
Para fazer o download ou conhecer mais sobre essa plataforma acesse: SQL Server 2008 Management Studio

Renomeando bases do SQL 2000/2005/2008/2012


Acredite, em algum momento da sua vida você vai precisar renomear uma base. Veja como fazer isso no SQL 2000, 2005, 2008 e 2012.


SQL 2000:
EXEC sp_renamedb 'antigoNome', 'novoNome'

SQL 2005/2008/2012:
ALTER DATABASE antigoNome MODIFY NAME = novoNome

Também pode ser feito através de detach/attach:
EXEC sp_detach_db 'antigoNome', 'true'
EXEC sp_attach_db @dbname = N'novoNome', @filename1 = N'c:\caminho\arquivo_dados.mdf', @filename2 = N'c:\caminho\arquivo_tlogs.ldf'

Se preferir, exceto no SQL 2000, tem como fazer através da interface gráfica do SSMS (Management Studio). Clique com o direito sobre a base que deseja renomear e clique em "rename".

Consumo de CPU por base


Este script é uma baita de uma mão na roda:


WITH DB_CPU_Stats
AS
(SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID]
FROM sys.dm_exec_plan_attributes(qs.plan_handle)
WHERE attribute = N'dbid') AS F_DB
GROUP BY DatabaseID)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
DatabaseName, [CPU_Time_Ms],
CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
WHERE DatabaseID > 4 -- system databases
AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num OPTION (RECOMPILE);
Resultado:

Verifica quem está logado e quantas sessões possui


Este pequeno select mostra quais os usuários ou logins conectados à instância e quantas sessões abertas possuem:

SELECT login_name, COUNT(session_id) AS [session_count]
FROM sys.dm_exec_sessions
GROUP BY login_name
ORDER BY COUNT(session_id) DESC OPTION (RECOMPILE);
Resultado:

Quando esta instância foi instalada?

Esta instalação do SQL é nova ou é velha? De quando é?

SELECT createdate AS [SQL Server Install Date]
FROM sys.syslogins
WHERE [sid] = 0x010100000000000512000000;

Resultado:
clique para ampliar
Com este pequeno select da tabela sys.syslogins você consegue saber quando o SQL foi instalado no servidor, informação útil muitas vezes.

Informações gerais da instância


Para realizar uma análise precisamos levantar uma série de informações que nos guiarão durante todo o processo até a conclusão. Algumas informações básicas como nome do servidor, da instância, se está em cluster, etc. são fundamentais para o início da análise e podem ser obtidas com o simples select abaixo:


SELECT SERVERPROPERTY('MachineName') AS [MachineName], SERVERPROPERTY('ServerName') AS [ServerName],
SERVERPROPERTY('InstanceName') AS [Instance], SERVERPROPERTY('IsClustered') AS [IsClustered],
SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS [ComputerNamePhysicalNetBIOS],
SERVERPROPERTY('Edition') AS [Edition], SERVERPROPERTY('ProductLevel') AS [ProductLevel],
SERVERPROPERTY('ProductVersion') AS [ProductVersion], SERVERPROPERTY('ProcessID') AS [ProcessID],
SERVERPROPERTY('Collation') AS [Collation], SERVERPROPERTY('IsFullTextInstalled') AS [IsFullTextInstalled],
SERVERPROPERTY('IsIntegratedSecurityOnly') AS [IsIntegratedSecurityOnly];
Resultado:
clique para ampliar
Agora já temos informações básicas para começar a análise ou para fazer uma documentação.

Obtendo informações importantes de todas as bases

Hoje vamos obter informações importantes como Recovery Model, Log Reuse, Log Size, Log Used, Compatibility Level, Page Verify, Auto Shrink entre algumas outras.

Vamos utilizar o script abaixo para obter estas informações que podem ser utilizadas para documentação, checagem, análise, ou seja, são realmente úteis.

SELECT db.[name] AS [Database Name], db.recovery_model_desc AS [Recovery Model],db.log_reuse_wait_desc AS [Log Reuse Wait Description],ls.cntr_value AS [Log Size (KB)], lu.cntr_value AS [Log Used (KB)],CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)AS DECIMAL(18,2)) * 100 AS [Log Used %],db.[compatibility_level] AS [DB Compatibility Level],db.page_verify_option_desc AS [Page Verify Option], db.is_auto_create_stats_on, db.is_auto_update_stats_on,db.is_auto_update_stats_async_on, db.is_parameterization_forced,db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on,db.is_auto_close_on, db.is_auto_shrink_onFROM sys.databases AS dbINNER JOIN sys.dm_os_performance_counters AS luON db.name = lu.instance_nameINNER JOIN sys.dm_os_performance_counters AS lsON db.name = ls.instance_nameWHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%'AND ls.counter_name LIKE N'Log File(s) Size (KB)%'AND ls.cntr_value > 0 OPTION (RECOMPILE);

Vamos ver o resultado disso:

Na primeira parte do resultado, podemos observar informações relacionadas a utilização do Transaction Log (que depende do Recovery Model) de todas as bases.
Arraste a barra inferior para a direita para vermos o restante das informações:
Agora sabemos se as estatísticas estão sendo criadas e atualizadas automaticamente, se é síncrona ou assíncrona, se há parametrização, snapshot isolation, se o auto close está habilitado e se o auto shrink está sendo realizado.
Estas informações são bem úteis na hora de conferir suas configurações ou conhecer um novo ambiente, além de ficar bem prático para documentar. 

Atalho para sp_who


Muitas vezes precisamos executar o sp_who para vermos quem está conectado não é verdade? Ao invés de abrir uma nova query e digitar sp_who, experimente apenas pressionar Ctrl+1 e veja o resultado:


sp_who_result
Fácil né? Testei no SQL 2008 R2 e funciona perfeitamente.

domingo, 14 de outubro de 2012

Dicas rápidas MySQL


Mostrando tabelas criadas na db
SHOW TABLES;
Mostrando db criadas
SHOW DATABASES;
Mostrando detalhes da tabela
DESCRIBE tabela;
Mostrando somente as colunas
SHOW COLUMNS FROM tabela;
Ordenando a consulta
De forma crescente
SELECT * FROM showsvistos ORDER BY campo;
De forma decrescente (de z para a, de 9 para 0)
SELECT * FROM showsvistos ORDER BY campo DESC;
Otimizar tabela
OPTIMIZE table tabela;
Reparar tabela
REPAIR table tabela;
Dar permissão a USUÁRIO
GRANT ALL PRIVILEGES ON nomedabase.* to usuario@ip_de_onde_vai_acessar IDENTIFIED by ‘senha_do_caboco’;
Você  pode ser mais cuidadoso e falar o que e onde o cara vai poder mexer:
GRANT insert,delete ON nomedabase.tabela to usuario@ip_de_onde_vai_acessar IDENTIFIED by ‘senha_do_caboco’;