sexta-feira, 12 de abril de 2013

Dica Importante SQL Server 2008 Management Studio

Por padrão o SQL Server 2008 Management Studio vem configurado para não ter a mudança de uma tabela usando o modo “designer” sem que apague-a e re-crie novamente; sinceramente não sei porque, mas existe. O que acontece é o seguinte:

Se eu peguei uma tabela no meu banco de dados na internet, e ao tentar acrescentar um campo 
de auto-incremento ou chave primária ele deixa. No momento de salvar a tabela, o gerenciador 
mostra um alerta falando que não consegue salvar o que foi mudado na tabela. Conversando com
um amigo “expert” em banco de dados, ele me falou que precisa ser desmarcada uma opção no 
gerenciador. Depois de abrir o gerenciador do SQL Server 2008, cliquei no

menu Tools e escolhi a opção Options.
Referência: 2


Uma nova tela se abre e existem várias opções específicas. Acesse a opção chamada Designers
e ao lado direito deve ser desmarcado o item Prevent saving changes that require table 
re-creation.

Referência: 3

Depois de desmarcar esta opção, é necessário fechar o gerenciador totalmente. Depois de abrir
o gerenciador a funcionalidade de edição vai funcionar perfeitamente. Sem que necessite apagar a
tabela e criá-la novamente.

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.

quinta-feira, 7 de março de 2013

Listar instâncias no servidor.


Como listar as instâncias intaladas no servidor.


Declare @tb_Instances Table (InstanceName NVarChar(255),
RegPath      NVarChar(255))

Insert Into @tb_Instances
exec master..xp_regenumvalues
             @rootkey = N'HKEY_LOCAL_MACHINE',
             @key = N'SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL'

Select * from @tb_Instances

Versão do SQLServer e Service Pack instalado.


Como descobrir a versão so SQL Server e tambem muito importante, a versão do Service Pack instalados.

SELECT  SERVERPROPERTY('productversion') as Versão,
     SERVERPROPERTY('productlevel')as [Service Pack], 
     SERVERPROPERTY('edition')as Edição
Ou
SELECT @@VERSION

segunda-feira, 4 de março de 2013

Instalando o Cliente de Telnet

1 - Efetue logon como administrador e digite o comando Dism /online /enable-feature /featurename:TelnetClient e pressione Enter. Será carregada a janela conforme mostra a figura 1.1.
Figura 1.1

2 - Para verificar se o Cliente de Telnet foi instalado digite o comando Dism /online /get-features /format:table e pressione Enter. Será carregada a janela conforme mostra a figura 1.2.