quarta-feira, 13 de março de 2013

Alteração de idioma no SQL Server


  • Para mostrar o idioma da sessão atual:
Select @@langid@@language
  • Duas opções para mostrar os idiomas disponíveis:
Select From sys.syslanguages
Exec sp_helplanguage
  • Sintaxe para alterar o idioma somente da sessão atual:
Set Language 'idioma'
Exemplo:
Declare @Data DateTime
Set @Data = '10/15/2011'
Set Language 'Italian'
Select DateName(Month, @Data) as 'Mês'

Set Language 'us_english'
Select DateName(Month, @Data) as 'Mês'
go

  • Para verificar o idioma definido para um login (no exemplo, sa):
Select language From sys.syslogins Where sid = SUSER_ID('sa')
  • Para mudar o idioma de um login (também pode ser feito pela interface gráfica: botão direito sobre o login e clicar em “Propriedades”):
-- Mudando o idioma do login para português
Exec sp_defaultlanguage 'sa''Português (Brasil)'
Reconfigure -- "Atualiza" a modificação realizada
-- Mudando novamente, para inglês
Exec sp_defaultlanguage 'sa''us_english'
Reconfigure
  • Para mudar o idioma padrão dos novos logins (utilizando a procedure sp_Configure):
-- Mudando o idioma padrão do servidor para 5 (espanhol)
Exec sp_configure 'default language', 5
Reconfigure

segunda-feira, 11 de março de 2013

Instância do SQL Server

Verificar se um banco de dados existe em um servidor SQL Server é uma tarefa simples quando se usa uma ferramenta gráfica ou assistente de conexão ao banco.

Porém, ao criar scripts mais complexos, pode ser necessário verificar manualmente se um banco de dados existe no servidor.

No SQL Server 2008, para cada banco de dados criado em uma instância, um novo registro na view de sistema sys.databases.

Assim, basta consultar esta tabela para realizar a tarefa desejada:

SELECT * FROM sys.databases WHERE name = 'dbTest'

Veja o resultado:


Observe que através da view sys.databases pode-se obter diversas informações sobre as bases de dados de uma instância. Pode-se também usá-la para exibir uma lista dos bancos de dados do servidor.

Quem tem permissões de SA no SQL?



É muito comum termos que verificar quais são os usuários com permissão de SA no SQL Server para diminuir vulnerabilidade e são muitos cliques até chegar na server role, além de ter que gerar um print de tela. 
Com este script podemos verificar quem é SA e salvar em modo texto pra documentar ou utilizar em um email informando que os acessos serão revogados:

SELECT p.name AS [Name] ,r.type_desc,r.is_disabled,r.create_date , r.modify_date,r.default_database_name
FROM
sys.server_principals r
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals p ON
p.principal_id = m.member_principal_id
WHERE r.type = 'R' and r.name = N'sysadmin'

Veja o resultado, incluindo usuários do Windows e do SQL:

Encontrando usuários e suas sessões no SQL

Esta informação é muito útil quando vamos iniciar uma janela de manutenção ou quando queremos saber se há um aumento na quantidade de sessões por usuário. Podemos verificar quem está conectado no momento, avisar que o SQL vai parar e então iniciar aquela manutenção agendada.
De onde vem estas informações?
Estas informações são armazenadas nas DMVs (Dynamic Management Views), novidade na versão 2005 do SQL e mantida até as versões atuais.
Uma DMV é como uma View onde podemos armazenar o resultado de um Select.
Recomendo um select * from sys.dm_exec_sessions para ver o conteúdo completo desta DMV e a leitura do link abaixo para entender todos os resultados:
Caso queiram copiar o código:
SELECT login_name, 
COUNT(session_id) AS session_count 
FROM sys.dm_exec_sessions 
GROUP BY login_name;

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 pressionarCtrl+1 e veja o resultado:
sp_who_result

Listar todas as bases e data do último backup




Para saber quando foi feito o último backup de todas as bases da sua instância, este script do Pinal Dave resolve de forma simples e eficaz:



SELECT sdb.Name AS DatabaseName,COALESCE(CONVERT(VARCHAR(12), MAX(bus.backup_finish_date), 101),'-') AS LastBackUpTime
FROM sys.sysdatabases sdb
LEFT OUTER JOIN msdb.dbo.backupset bus ON bus.database_name = sdb.name
GROUP BY sdb.Name
Veja o resultado:
Minha instância é nova e ainda não fiz nenhum backup. Agora vamos fazer um backup pra ver o resultado.
BACKUP DATABASE AdventureWorks2008R2 TO DISK = 'C:\teste.bkp'
Agora podemos ver que nossa base AdventureWorks2008R2 teve seu backup concluído com sucesso no dia 18/01/2013.

Como descobrir/exibir as instâncias do SQL Server instaladas

Basta utilizar o prompt de comando, digitando SQLCMD -L e você terá um resultado semelhante a esse.