Resource Database

Conhece essa database?

Já viu ela no Management Studio?

Viu alguma vez um DatabaseID 32767?

A resource é uma Database somente leitura com DBID 32767, que contém todos os objetos de sistema do SQL Server, todos aqueles objetos que utilizamos do schema SYS, como por exemplo o objeto sys.indexes. Todos esses objetos são persistidos nessa base de dados, mas são logicamente visíveis em todas as databases através do schema SYS.

Uma curiosidade é que o máximo de databases que uma instância de SQL Server suporta é 32767 e este número é reservado para a resource database.

Não adianta tentar utilizar a função nativa DB_NAME() para retornar o nome da database pelo ID 32767, pois o retorno será NULL.

Referências:

https://blog.sqlauthority.com/2011/05/10/sql-server-resource-database-id-32767/

SQL Server Start Time

Para conferir o horário de início do serviço da sua instância de SQL Server basta utilizar um dos scripts abaixo.

SELECT sqlserver_start_time
FROM sys.dm_os_sys_info;

SELECT login_time
FROM sys.dm_exec_sessions
WHERE session_id = 1;

SELECT create_date
FROM sys.databases
WHERE name = 'tempdb';

Gostou? Dúvidas? Críticas?
Deixe seu comentário!

TRACE FLAGS

As trace flags são utilizadas para mudar uma característica da instância de SQL Server ou um comportamento em particular.

Elas também são utilizadas em diagnósticos de problemas de desempenho, debug de stored procedures ou até mesmo podem ser recomendadas pelo suporte da Microsoft para corrigir um comportamento específico que esteja impactando negativamente o seu ambiente.

É uma boa prática sempre realizar o teste da trace flag em um ambiente não-produtivo, assim como é uma boa prática realizar o teste em ambiente não-produtivo de qualquer alteração de configuração na sua instância de SQL Server.

Existem 3 escopos para uma trace flag:

1. query: específicas para o contexto de uma consulta.
2. session: ativas para uma conexão específica e são visíveis apenas dentro desta sessão.
3. global: são ativas para toda a instância de SQL Server e visíveis para todas as conexões.

As trace flags de escopo de sessão (session) são ligadas e desligadas com os comandos abaixo:
Como ligar uma trace flag de sessão:

DBCC TRACEON (3604)

Como desligar uma trace flag de sessão:

DBCC TRACEOFF (3604)

Para ligarmos e desligarmos uma trace flag de escopo global utilizamos os mesmos comandos, mas com um parâmetro adicional, conforme abaixo.

Como ligar uma trace flag global:

DBCC TRACEON (1222, -1)

Como desligar uma trace flag global:

DBCC TRACEOFF (1222, -1)

Precisa listar todas as trace flags ativas no seu ambiente e sessão?
Listar TRACE FLAGS ativas

Você utiliza alguma trace flag no seu ambiente?
Comente as trace flags que você utiliza!

Referências:

Trace flags: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql

DBCC TRACEON: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-transact-sql

DBCC TRACEOFF: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceoff-transact-sql

 

SELECT – Ordem lógica de execução

Você sabe a ordem lógica que um comando SELECT é executado internamente?

A seguir você pode comparar as duas ordens das consultas, a ordem correta da sintaxe e a ordem lógica de processamento que acontece internamente sem percebermos.

Ordem correta da sintaxe:
8. SELECT
9. DISTINCT
11. TOP
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
10. ORDER BY

Ordem lógica de processamento:
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP

OBS: Esta ordem geralmente é verdadeira, mas existem cenários específicos que esta ordem pode variar.

É exatamente por causa desta ordem que não é possível dar um alias para uma coluna na cláusula SELECT e fazer referência ao alias na cláusula WHERE.

Mas também é por causa desta ordem que podemos dar um alias para uma coluna na cláusula SELECT e fazer referência a este alias na cláusula ORDER BY.

Referências:
https://docs.microsoft.com/en-us/sql/t-sql/queries/select-transact-sql

Remover acentos e cedilhas de uma string

Simples. Basta utilizarmos um COLLATION diferente que não contenha acentos e cedilhas, conforme o exemplo abaixo.


SELECT 'çáéíóúâêîôûãõç' COLLATE SQL_Latin1_General_Cp1251_CS_AS AS [string]

Resultado:

Screen Shot 2019-02-28 at 22.58.57

Espero que tenham gostado!

Procurar stored procedure, view ou function por um trecho de código

O título já diz tudo. Para procurar um objeto por meio de um trecho de código do mesmo vamos utilizar a DMV sql_modules.


SELECT
object_id,
object_name([object_id]) AS name,
definition
FROM sys.sql_modules
WHERE definition like '%BackupFULL%'

Será exibido o ID, nome e definição/código do objeto, conforme imagem abaixo.

Screen Shot 2019-02-28 at 22.45.16

Instalar Driver ODBC SQL Server no Linux

Simples e fácil.

No exemplo abaixo é utilizada a distribuição Red Hat 7.

sudo su
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #Para evitar conflitos
sudo ACCEPT_EULA=Y yum install msodbcsql17

Você possui alguma outra distribuição de Linux? Consulta na referência oficial abaixo.

Referências:

https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017