SQL Saturday 804 – Como foi

Impossível descrever como é um SQLSat.
Cada um deles é diferente, seja o nível das palestras como os temas.

Este ano em SP foi bem especial para mim. Ano passado foi meu primeiro SQLSat e desde então já estive em Belo Horizonte, Brasília, no TDC em SP por duas vezes.

Preciso agradecer a todos que estiveram na minha palestra. A interação e as perguntas foram ótimas!

E agora me preparar para Salvador em 25/10!!!

Nos vemos lá!

#SQLSat #Microsoft #DBA

Anúncios

SQL Saturday 792 – Brasilia – Como foi

Não há palavras que possam definir que foi SQL Saturday #792 – Brasília.
O evento foi simplesmente sensacional!
Foi meu primeiro ano em Brasilia e espero poder repetir a dose ano que vem.
Agradeço aos organizadores por aceitarem minha palestra, pelo evento em si, e pelo apoio a todos.

E agradecer a quem assistiu minha palestra! Foi ótimo a troca de experiências e de idéias!

Ainda temos 3 SQL Saturdays no Brasil para acontecer esse ano (2018) ainda:

SQL Saturday #804  – São Paulo – Setembro

SQL Saturday #799 –  Salvador – Outubro

SQL Saturday  #811 – Rio de Janeiro – Novembro

Segue as fotos e o meu PPT que apresentei.

#SQLSat792 #SQLSatBSB #Microsoft #Azure #SQL #SQLSat

Permissão de usuários

Dois script simples (#sqn) para levantamento de permissão de usuários a nível de base de dados.
Script01:

</pre>
DECLARE @DB_USers TABLE (DBName sysname, UserName sysname, LoginType sysname, AssociatedRole varchar(max),create_date datetime,modify_date datetime) INSERT @DB_USers EXEC sp_MSforeachdb ' use [?] SELECT ''?'' AS DB_Name, case prin.name when ''dbo'' then prin.name + '' (''+ (select SUSER_SNAME(owner_sid) from master.sys.databases where name =''?'') + '')'' else prin.name end AS UserName, prin.type_desc AS LoginType, isnull(USER_NAME(mem.role_principal_id),'''') AS AssociatedRole ,create_date,modify_date FROM sys.database_principals prin LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and prin.is_fixed_role <> 1 AND prin.name NOT LIKE ''##%''' SELECT dbname,username ,logintype ,create_date ,modify_date , STUFF( ( SELECT ',' + CONVERT(VARCHAR(500),associatedrole) FROM @DB_USers user2 WHERE user1.DBName=user2.DBName AND user1.UserName=user2.UserName FOR XML PATH('') ) ,1,1,'') AS Permissions_user FROM @DB_USers user1 GROUP BY dbname,username ,logintype ,create_date ,modify_date ORDER BY DBName,username 

Script02:


 

----------------- NIVEL DE OBJETO ------------------------
DECLARE @DB_USers TABLE
(DBName sysname,
[Schema] varchar(max),
[Object] varchar(max),
[permissions_type] varchar(max),
[permission_name] varchar(max),
[permission_state] varchar(max),
state_desc varchar(max),
permissionsql varchar(max),
UserName sysname, LoginType sysname, AssociatedRole varchar(max),create_date datetime,modify_date datetime)

INSERT @DB_USers
EXEC sp_MSforeachdb
'use [?]
SELECT Distinct ''?'' AS DB_Name,
sys.schemas.name as [Schema]
, sys.objects.name as [Object]
, sys.database_permissions.type as permissions_type
, sys.database_permissions.permission_name as permission_name
, sys.database_permissions.state as permission_state
, sys.database_permissions.state_desc as state_desc
, state_desc + '' '' + permission_name
+ '' on [''+ sys.schemas.name + ''].['' + sys.objects.name
+ ''] to ['' + prin.name + '']''
COLLATE LATIN1_General_CI_AS AS permissionsql
, case prin.name when ''dbo'' then prin.name + '' (''+ (select distinct SUSER_SNAME(owner_sid) from master.sys.databases where name =''?'') + '')'' else prin.name end AS UserName,
prin.type_desc AS LoginType,
isnull(USER_NAME(mem.role_principal_id),'''') AS AssociatedRole ,prin.create_date,prin.modify_date
FROM sys.database_permissions
LEFT JOIN sys.objects ON sys.database_permissions.major_id = sys.objects.object_id
LEFT JOIN sys.schemas ON sys.objects.schema_id = sys.schemas.schema_id
LEFT JOIN sys.database_principals prin ON sys.database_permissions.grantee_principal_id = prin.principal_id
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id
WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and
prin.is_fixed_role  1 AND prin.name NOT LIKE ''##%'' ORDER BY 1, 2, 3, 5'

SELECT dbname,
username ,
logintype ,
create_date ,
modify_date,
[Schema],
[Object],
[permissions_type],
[permission_name],
[permission_state],
state_desc, permissionsql,
STUFF((SELECT distinct ',' + CONVERT(VARCHAR(500),associatedrole)
FROM @DB_USers user2
WHERE user1.DBName=user2.DBName AND user1.UserName=user2.UserName

FOR XML PATH('')),1,1,'') AS Permissions_user
FROM @DB_USers user1
GROUP BY dbname,username,logintype ,create_date,modify_date,[Schema],
[Object],[permissions_type],[permission_name],[permission_state],state_desc, permissionsql
ORDER BY DBName,username

 

 

Traduzir o Management Studio

Em um dos muitos grupos que participo, surgiu uma dúvida de se alterar o Management Studio de Inglês para Português ou vice-versa.
Dá para ser fazer de dois modos: Baixando novamente e reinstalando, ou somente baixar o pacote com a linguagem que você precisa.
No meu caso, vou utilizar a versão 17.5 que esta em inglês:
v17
atual

Passo 1: Baixar o pacote de idiomas, que no meu caso, é Português – Brasil
https://www.microsoft.com/pt-br/download/details.aspx?id=48157

Passo 2: Instalar o pacote de idiomas:

Passo 3: Alterar a linguagem:linguagem

Alterando a linguagem, é necessário reiniciar somente o MMS:
reinciar

Passo 4: Checar a nova linguagem:
portugues

Simples, rápido e prático.

Dúvidas, deixe nos comentários.

 

Dica rápida – Checar ultimo backup realizado

Dica rápida do dia.

Sintaxe simples que checa quando foi realizado o último backup, tipo de backup, local do backup (blob, disco, storage) e se o backup é somente cópia.
Neste meu caso, utilizo as tabelas de sistema:
msdb.dbo.backupmediafamily e msdb.dbo.backupset


declare @base varchar(max) = 'BASE'

SELECT
SERVERPROPERTY('Servername') AS 'Servidor',
msdb.dbo.backupset.database_name As 'Database',
CASE msdb..backupset.type
WHEN 'D' THEN 'Database'
WHEN 'L' THEN 'Log'
WHEN 'I' THEN 'Diferencial'
WHEN 'F' THEN 'File ou Filegroup'
WHEN 'G' THEN 'Diferencial Arquivo'
WHEN 'P' THEN 'Parcial'
WHEN 'Q' THEN 'Diferencial Parcial'
END AS 'Tipo do Backup',
msdb.dbo.backupset.backup_start_date As 'Data Execucao',
msdb.dbo.backupset.backup_finish_date As 'Data Encerramento',
msdb.dbo.backupset.expiration_date As 'Data de Expirao',
(msdb.dbo.backupset.backup_size / 1024) As 'Tamanho do Backup em MBs',
msdb.dbo.backupmediafamily.logical_device_name As 'Dispositivo ou Local de Backup',
msdb.dbo.backupmediafamily.physical_device_name As 'Caminho do Arquivo',
msdb.dbo.backupset.description As 'Descricao',
msdb.dbo.backupset.compatibility_level,
Case msdb.dbo.backupset.compatibility_level
When 80 Then 'SQL Server 2000'
When 90 Then 'SQL Server 2005'
When 100 Then 'SQL Server 2008 ou SQL Server 2008 R2'
When 110 Then 'SQL Server 2012'
else '> SQL2012'
End As 'Desc Nivel de Compatibilidade',
msdb.dbo.backupset.name AS 'Backup Set'

, case when msdb.dbo.backupset.is_copy_only = 1 then 'Somente Copia' else 'Full' end as Copia

FROM msdb.dbo.backupmediafamily INNER JOIN msdb.dbo.backupset
ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
WHERE (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 103) >= GETDATE() - 15)
and msdb.dbo.backupset.database_name = @base
ORDER BY msdb.dbo.backupset.database_name
, msdb.dbo.backupset.backup_finish_date desc

 

Resetar senha “sa”

Tags

, , , , ,

Dica rápida de hoje: habilitar o usuário “sa” da instância.
Mas porque fariamos isso:
Motivo 1) Instancia legada de um servidor que não é do seu time;
Motivo 2) Algum “gênio” (sic) desabilitou todos usuários sysadmin;
Motivo 3) De alguma forma, perdeu-se acesso a instância,
Poderia citar “n” motivos, mas no meu caso, foi instancia legada, de um servidor que não estava em nosso road map, e precisava acessa-lo para checar integridade e realizar a documentação.

Vamos ao passo a passo.

Passo 1: Identificar a instancia
Temos que iniciar o CMD como administrador: Inciar –> Executar — CMD — Botão direto — Executar como Administrador.
O prompt irá ficar deste modo:

Agora execute o comando  SQLCMD -L ou osql /L que o retorno será as instancias no servidor e/ou rede. No caso, tenho somente uma instancia:

Passo 2: Parar a instancia.
Temos dois modos: Painel de controle –> Ferramentas administrativas –> Serviços
Clicar com o botão direito –> Stop.

Porém, como já estamos com a tela do prompt aberta, vamos por linha de comando:
NET STOP MSSQLSERVER

Se for uma instancia nomeada:
net stop MSSQL$ instancename

Todos os serviços dependentes irão ser parados.

Passo 3: Iniciar a instancia em modo single user
No mesmo prompt de comando, executaremos:
NET START MSSQLSERVER /m

O parâmetro -m que defini modo single user.

Passo 4: Logar na instancia
No mesmo prompt de comando:
sqlcmd -S localhost -E

onde -S é o servidor e -E é trusted connection

Passo 5: Alter Login e Enable
Como agora estamos logados, é só utilizar o comando de alter login:

ALTER LOGIN sa WITH PASSWORD = ‘Password’
GO

ALTER LOGIN sa ENABLE;
go

ALTER LOGIN sa WITH PASSWORD = ‘Password’ UNLOCK ;
go

Passo 6: Retirando single user
Feito o alter login, o próximo passo é remover o single user e subir a instancia
a) net stop MSSQLSERVER
b) NET START MSSQLSERVER

Pronto. Agora é só logar com o usuário “sa” e senha que colocou no passo 5.

Até mais!!

Fontes:
https://technet.microsoft.com/pt-br/library/ms190236(v=sql.105).aspx
https://technet.microsoft.com/pt-br/library/ms187598(v=sql.105).aspx
https://technet.microsoft.com/pt-br/library/ms190737(v=sql.105).aspx
https://docs.microsoft.com/pt-br/sql/tools/sqlcmd-utility