Essa apresentação foi feita em setembro/2019 no evento SQL Roots.
Me desculpem por uma ou outra gafe, não é sempre que tenho tanto público nas minas apresentações…
Todos sabemos que o SQL é um consumidor de memória frenético, quanto mais memória disponível mais memória ele vai reservar para ele.
O que é um desenho “by default”, ele sempre fará isso afinal de contas ele precisa alocar as páginas de dados do seu banco em algum lugar.
Para resolver todos os seus problemas, existe uma forma de liberar toda a memória disponível de uma só vez do seu servidor e não é parando o serviço do SQL.
Para isso, você vai precisar o Visual Studio instalado, vamos criar um novo projeto dele…
Importante! Abra o Visual Studio como administrador !
Escreva o nome que quiser para o app
Copie e cole o código abaixo no projeto:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
public class CriticalProcess
{
[DllImport("ntdll.dll", SetLastError = true)]
private static extern int NtSetInformationProcess(IntPtr hProcess, int processInformationClass, ref int processInformation, int processInformationLength);
static void Main(string[] args)
{
int isCritical = 1; // queremos que ele seja um processo crítico
int BreakOnTermination = 0x1D; // valor para BreakOnTermination (flag)
Process.EnterDebugMode(); //acquire Debug Privileges
// configurando o BreakOnTermination = 1 para o processo ativo
NtSetInformationProcess(Process.GetCurrentProcess().Handle, BreakOnTermination, ref isCritical, sizeof(int));
}
}
Se tudo ocorrer como esperado, dependendo da quantidade de memória do seu servidor isso pode demorar de alguns segundos a algumas horas.
Por mais que tenhamos criado uma aplicação de linha de comando a primeira parte do processo é bem gráfica e todos já tiveram o grande prazer de conhecer:
Ele vai gerar um DUMP de toda a memória para o arquivo de paginação e depois que a maquina reiniciar ele vai copiar esse arquivo de paginação para um arquivo chamado memory.dump
É só isso,,, execução e queda,,,
Agora falando sério: NUNCA !!!! JAMAIS !!!!! Simplesmente pegue o código de qualquer coisa que você encontra na internet e saia executando sem antes entender o que ele faz.
Esse exemplo é bem ridículo, mas imagina um script que você leu o por alto achando que vai resolver todos os seus problemas de backup, ou de fragmentação de índice e descobre que no meio tem um sp_msforeach_table com um sp_msforeach_db que trunca as tabelas, ou pior, alguém cria uma chave de criptografia e habilita TDE nas suas bases e depois força a remoção da chave,,,, a culpa é tão e somente sua! Você é o DBA é sua responsabilidade preservar os dados.
Tenha discernimento com o que você copia da internet e de onde copia essas informações.
SEMPRE LEIA e NUNCA EXECUTE DIRETAMENTE EM PRODUÇÃO !!!
Imagine o seguinte cenário:
Você tem sua rotina de backup (FULL, DIFF, LOG) que gera os arquivos de saída como por exemplo BKPFULL_BASE_XPTO_01_DE_04_20181105.bak e coisas parecidas com isso.
Sua ferramenta de backup copia esses arquivos para uma área de staging todos os dias, marcando os arquivo com o bit de arquivado, no dia seguinte você tem um step do job que procura por esses arquivos e apaga ele, afinal, já foram marcados como arquivados pelo software de backup.
Em um certo momento, alguma coisa aconteceu nessa rotina da ferramenta e ela não marcou os arquivos ou simplesmente não rodou.
Para não ficar sem espaço em disco você resolve apagar o arquivo mais antigo do backup deixando pelo menos o mais recente no disco, para um ambiente com poucas bases isso é tranquilo, imagine isso para um ambiente com algumas centenas de bases, em um final de semana prolongado, algumas bases com 3 ou 4 arquivos de backup, outras com apenas 1 arquivo.
O PowerShell abaixo faz um parse no nome do arquivo para agrupar pelo tipo do backup e o nome do banco, procura onde tem mais de uma entrada (imaginando que você separa isso por discos), remove do resultado o mais recente e apaga os mais antigos.
O script não é perfeito, ainda faltam alguns detalhes à serem melhorados, mas já é uma ajuda em casos como esse:
Get-ChildItem "X:\Backup\Disk02\" -file | where Name -match "._(\d{4})(\d{2})(\d{2})" | Where-Object {$_.Attributes -Eq "Normal"} | #Esse Atributo é o que o software de backup marca como retido, retire este Where-Object caso queira desconsiderar isso select fullname, #@{N="DtFile";E={[DateTime]$_.BaseName.substring($_.BaseName.length -10).replace("_", "-")}}, @{N="FileWithoutDate";E={$_.BaseName.substring(0, $_.BaseName.length -18)}} | group FileWithoutDate | where Count -GE 2 | %{ $_.Group | sort fullname,DtFile -Descending | select -skip 1} | %{Remove-Item $_.FullName -WhatIf}
Bah! Tchê! Vamos ver se eles realmente fazem um churrasco melhor que o paulista ou é só intriga da oposição.
No dia 23/06/2018 Haverá um novo evento do SQL Saturday, desta vez em Caxias do Sul/RS.
É com um prazer inenarrável em estar presente para mais um evento da comunidade e ainda mais como palestrante.
Só tem uma coisa mais legal que a minha palestra,,, o café,,, esqueça as outras, mantenha o foco,,,
Vamos conversar sobre formas “erradas” de como fazer as coisas no SQL Server.
Já tem um tempo que a Microsoft disponibilizou via github outro cliente para administrar o SQL Server o MSSQL-CLI.
Esse cliente, como o SQL Ops Studio, vem com o conceito de multi plataforma (Linux, Windows e Mac).
Mas ao invés de focar em uma interface gráfica ele é a evolução do SQLCMD (para a alegria da turma do Shell).
Para instalar o cliente o processo é muito simples, isso se você não tiver um proxy na sua empresa, antes de tudo você precisa instalar o Phyton.
Após a instalação abra o prompt como administrador e digite:
pip install mssql-cli
Espere alguns minutos (dependendo da sua qualidade de Internet) e ele será instalado, você não tem opção de personalização da instalação.
Para abrir o cliente digite:
MSSQL-CLI -Sservidor
Existem outros parâmetros que você pode usar.
Já para quem está atrás de um firewall,,, lá vem a novela…
Primeiro que você precisa saber qual o endereço do seu proxy e porta.
Segundo que se você seguir a documentação pode acabar tendo alguns problemas com detalhes…
Na documentação do pip ele indica que você precisa passar o parâmetro – – proxy=username:password@proxy:port
Se você prestou atenção o caracter de separação do usuário da senha é “:” e o de separação entre a senha e o servidor é o “@”, logo, se sua senha possuir um desses 2 caracteres Vc vai receber um monte de erro estranho.
Para resolver isso configure 2 variáveis de ambiente a http_proxy e https_proxy da seguinte forma:
Tudo no prompt de comando
set http_proxy=dominio\usuário:senh%40@servidor:porta
set https_proxy=dominio\usuário:senh%40@servidor:porta
Você percebeu que o @ da senha ficou com %40?
A tabela é a seguinte :
@ – – > %40
$–>%24
!–>%21
Aí o resto é a mesma coisa para instalar :
pip install mssql-cli
Espero que tenha ajudo quem está tentando instalar através de um proxy.
Esse cliente tem um bom potencial para substituir o sqlcmd mas ainda tem muita coisa para melhorar…
As vezes temos operações de disco que chegam a gerar mensagens como a seguinte:
SQL Server has encountered 1 occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [X:\Banco\Disk99\DataFiles\Arquivo_do_banco_X_FG_Y_Arquivo_75.ndf] in database [Banco_X] (254). The OS file handle is 0x0000000000009A18. The offset of the latest long I/O is: 0x00000030038000
Muitas vezes isso indica que o sistema de discos não está operando de forma satisfatória e está impactando alguma operação.
A query abaixo tenta ajudar a identificar qual operação DDL ou DML que estava acessando o arquivo naquele momento:
SELECT DB_NAME(mf.database_id) AS [Database]
,mf.physical_name
,r.io_pending
,r.io_pending_ms_ticks
,r.io_type
,fs.num_of_reads
,fs.num_of_writes
,ER.session_id
,ST.TEXT
FROM sys.dm_io_pending_io_requests AS r
INNER JOIN sys.dm_io_virtual_file_stats(NULL, NULL) AS fs ON r.io_handle = fs.file_handle
INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id
AND fs.file_id = mf.file_id
INNER JOIN sys.dm_os_schedulers os ON r.scheduler_address = os.scheduler_address
INNER JOIN sys.dm_exec_requests AS ER ON os.scheduler_id = ER.Scheduler_id
CROSS APPLY sys.dm_exec_sql_text(ER.sql_handle) AS ST
ORDER BY r.io_pending_ms_ticks DESC;
go
Imagine o seguinte cenário: você está longe da sua máquina bem potente em casa e quer acessá-la remotamente mas tem outra pessoa utilizando-se dela.
Ou você espera ela parar de usar, ou compartilha o acesso e todos veem o que está sendo feito, ou instala alguma versão server e habilita o TS.
Existe uma solução mais simpática, podemos alterar a DLL responsável pelo gerenciamento do RDP e ele vai se comportar parecido com a versão servidor. Desta forma, caso usuário fica em uma sessão no desktop e compartilham o mesmo hardware ao mesmo tempo.
Legal, como fazer:
termsrv.dll
Procure pela linha:
39 81 3C 06 00 00 0F 84 3F 42 02 00
Substitua por:
B8 00 01 00 00 89 81 38 06 00 00 90
Sempre vale lembrar,,, quer fazer essas alterações? É por sua conta e risco. Isso pode não funcionar em algumas versões por questões de atualização da DLL ou modificação da MS.
Não sei se é de conhecimento de todos mas, já faz alguns anos que você pode usar o SHIFT + Botão Direito e vai aparecer uma opção de “Abrir o prompt de comando aqui” e ele vai abrir uma tela do DOS dentro daquela estrutura de diretório.
A mesma coisa vale para qualquer parte vazia na janela de conteúdo.
Isso ajuda? ajuda, mas tem um detalhe chato, ele não abre o prompt elevado e mesmo nas versões mais recentes não tem a opção de powershell. Fora que para abrir tem que pressionar o SHIFT junto.
É possível melhorar isso? claro, senão não estaria escrevendo este post…
Só testei no Windows 10, se alguém testar em outras versões deixa um comentário dizendo se funcionou ou não e em qual versão.
Para isso vamos ter que adicionar algumas linhas de registro.
Sempre vale um ATENÇÃO !!! Se você não sabe alterar, ou tem medinho, de alterar o registro clique aqui.
Para os outros, abaixo tem o que vocês precisam copiar e salvar em um arquivo .reg, após importar o arquivo vocês terão 2 novos menus com o Botão Direito:
Windows Registry Editor Version 5.00 ; Command Prompt [HKEY_CLASSES_ROOT\Directory\shell\01MenuCmd] "MUIVerb"="Command Prompts" "Icon"="cmd.exe" "ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuCmd" [HKEY_CLASSES_ROOT\Directory\background\shell\01MenuCmd] "MUIVerb"="Command Prompts" "Icon"="cmd.exe" "ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuCmd" [HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\open] "MUIVerb"="Command Prompt" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\open\command] @="cmd.exe /s /k pushd \"%V\"" [HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\runas] "MUIVerb"="Command Prompt Elevated" "Icon"="cmd.exe" "HasLUAShield"="" [HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\runas\command] @="cmd.exe /s /k pushd \"%V\"" ; PowerShell [HKEY_CLASSES_ROOT\Directory\shell\02MenuPowerShell] "MUIVerb"="PowerShell Prompts" "Icon"="powershell.exe" "ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuPowerShell" [HKEY_CLASSES_ROOT\Directory\background\shell\02MenuPowerShell] "MUIVerb"="PowerShell Prompts" "Icon"="powershell.exe" "ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuPowerShell" [HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\open] "MUIVerb"="PowerShell" "Icon"="powershell.exe" [HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\open\command] @="powershell.exe -noexit -command Set-Location '%V'" [HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\runas] "MUIVerb"="PowerShell Elevated" "Icon"="powershell.exe" "HasLUAShield"="" [HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\runas\command] @="powershell.exe -noexit -command Set-Location '%V'" ; Ensure OS Entries are on the Extended Menu (Shift-Right Click) [HKEY_CLASSES_ROOT\Directory\shell\cmd] "Extended"="" [HKEY_CLASSES_ROOT\Directory\background\shell\cmd] "Extended"="" [HKEY_CLASSES_ROOT\Directory\shell\Powershell] "Extended"="" [HKEY_CLASSES_ROOT\Directory\background\shell\Powershell] "Extended"=""
As vezes entender os problemas de uma instalação ou remoção pode ser complicado.
Existem cenários em que um Reboot naquele momento não é uma opção, ou um host está totalmente degradado e você precisa forçar a remoção de um SQL já migrado e em estado Offline.
Se você executar o Setup normalmente ele vai fazer uma série de checagens como: necessidade de reboot, acesso ao registro remoto, WMI, .NET, etc.
Dependendo do que você precisa, algumas opções podem ser desconsideradas na instalação/remoção, vou colocar o arquivo onde contém todas as explicações de todas as opções possíveis.
ATENÇÃO, esta informação não é documentada, caso precise usar, faça por conta e risco.
Para usar qualquer uma das opções ou mais de uma opção:
Para ele não considerar mais de uma regra adicione um espaço entre elas.
Abaixo vou listar todas as regras do documento para facilitar a pesquisa, mas aqui tem o documento para download com a explicação de cada uma delas.
Regra |
ThreadHasAdminPrivilegeCheck |
HasSecurityBackupAndDebugPrivilegesCheck |
RebootRequiredCheck |
WmiServiceStateCheck |
AclPermissionsFacet |
MediaPathLength |
SetupCompatibilityCheck |
NoRebootPackage |
NoRebootPackageDownLevel |
ServerCorePlatformCheck |
ServerCore64BitCheck |
ThreadHasAdminPrivilegeCheck |
RebootRequiredCheck |
WmiServiceStateCheck |
AclPermissionsFacet |
MediaPathLength |
SetupCompatibilityCheck |
NoRebootPackage |
NoRebootPackageDownLevel |
ServerCorePlatformCheck |
ServerCore64BitCheck |
Bids2008InstalledCheck |
DenaliCTPbyCTPSxS |
AclPermissionsFacet |
FacetDomainControllerCheck |
SSMS_IsInternetConnected |
FacetWOW64PlatformCheck |
FusionRebootCheck |
Bids2008InstalledCheck |
DenaliCTPbyCTPSxS |
AclPermissionsFacet |
FacetDomainControllerCheck |
SSMS_IsInternetConnected |
FacetWOW64PlatformCheck |
IsFirewallEnabled |
ServerCoreBlockUnsupportedSxSCheck |
DEV10RTMDetected |
ASSPIExistingFarmUnconfiguredWarningCheck |
ASSPIInstanceNameNotInUseCheck |
ASSPINewFarmConfiguredWarningCheck |
ASSPIRequiresCompleteFarmCheck |
ASSPIRequiresMossBitsCheck |
ASSPIRequiresO14MossEnterpriseCheck |
ASSPIRequiresO14MossSP1Check |
SlipstreamMediaInfoCheck |
PowerShellCheck |
InternetConnectionToNETFX4DownloadSite |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
RS_IsDotNet3_5Installed |
FAT32FileSystemCheck |
InstanceClashRule |
StandaloneInstall_HasClusteredOrPreparedInstanceCheck |
BlockCrossLanguageInstall |
BlockMixedArchitectureInstall |
RS_DoesCatalogExist |
RS_DoesCatalogTempDBExist |
ASIsValidEditionForDeploymentModeCheck |
FusionRebootCheck |
Bids2008InstalledCheck |
DenaliCTPtoCTPUpgrade |
AclPermissionsFacet |
FacetDomainControllerCheck |
Cluster_IsOnlineIfClustered |
SSMS_IsInternetConnected |
FacetWOW64PlatformCheck |
Cluster_DNS_Consistency_Rule |
Cluster_IsWMIServiceOperational |
ServerCoreBlockUnsupportedSxSCheck |
YukonUpgradeSidRule |
BlockCrossLanguageUpgrade |
KatmiCTPupgradeToKilimanjaroBlockRule |
KatmaiSlipstreamBuildToBuildUpgradeRule |
RS_ValidDSN |
RS_ValidDatabaseVersion |
RS_ValidServerCollation |
RS_NoCustomRenderingExtensions |
RS_NoCustomSecurityExtensions |
RS_NoCustomAuthExtensions |
RS_ReportServerUnsupportedSecurityMode |
RS_ReportManagerUnsupportedSecurityMode |
RS_ReportServerClientCertificateRequired |
RS_ReportManagerClientCertificateRequired |
RS_RSServiceRunning |
RSSHP_IsO12Installed |
RSSHP_ReportServerVDirNotSupported |
Engine_SqlServerServiceDisabled_Id |
Engine_IsAweEnabledForX86 |
Engine_IsMinusHEnabledForX86 |
Engine_IsLPIMEnabledForX86 |
Engine_IsLPIMEnabledForX64 |
Engine_SqlEngineHealthCheck |
Engine_AllSystemDatabasesAccessibleCheck |
Engine_ResourceDLLUpdateRestartCheck |
BlockMixedArchitectureUpgrade |
Engine_ServiceAccountOnDomainCheck |
Cluster_MultipleGroupsUpgradeRule |
FeatureUpgradeMatrixCheck |
IncompleteUpgradeCheck |
FailedUpgradeCheck |
LocalOnly_SqlFeatureStateCheck |
LocalOnly_AsFeatureStateCheck |
RsFeatureStateCheck |
Cluster_FeatureDownGradeCheck |
AS_IsServiceHealthy_Id |
AS_UpgradeValidateMixedState |
FAT32FileSystemCheck |
DEV10RTMDetected |
FacetWOW64ClusterUpgradeCheck |
SlipstreamMediaInfoCheck |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
RSSHP_UpgradePreDenali |
PowerShellCheck |
RS_IsDotNet3_5Installed |
KatmaiRTMUpgradeBlockRule |
KJRTMUpgradeBlockRule |
YukonSP3UpgradeBlockRule |
SideBySideUninstallRule |
BlockMismatchedArchitectureUninstall |
UninstallClusterBlockCheck |
SlipstreamMediaInfoCheck |
Cluster_IsOnlineIfClustered |
FacetWOW64PlatformCheck |
Cluster_IsWMIServiceOperational |
ServerCoreBlockUnsupportedSxSCheck |
AS_IsClusterServiceOffline |
Engine_SqlResourceIsOfflineIfCurrentNodeActive |
SlipstreamMediaInfoCheck |
ServerCoreNetFxCheck |
PowerShellCheck |
RS_IsDotNet3_5Installed |
FacetDomainControllerCheck |
Engine_SqlServerServiceDisabled_Id |
Engine_IsAweEnabledForX86 |
Engine_IsMinusHEnabledForX86 |
Engine_IsLPIMEnabledForX86 |
Engine_IsLPIMEnabledForX64 |
Engine_SqlEngineHealthCheck |
Engine_OnlySupportedFeaturesUsedCheckSystem |
Engine_OnlySupportedFeaturesUsedCheckUser |
ServerCoreBlockUnsupportedSxSCheck |
EditionUpgradeMatrixCheck |
EditionDownGradeCheck |
Cluster_EditionDownGradeCheck |
BlockMixedArchitectureUpgrade |
SlipstreamMediaInfoCheck |
UcpEditionDowngradeRule |
Engine_IsAlwaysOnFeatureEnabled |
MultiSubnetClusterUpgradeCheck |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
Engine_SqlServerServiceDisabled_RebuildDatabase |
Engine_ResourceGroupIsActiveOnCurrentNode |
Engine_SqlResourceIsOfflineIfCurrentNodeActive |
FusionRebootCheck |
Cluster_IsOnlineIfClustered |
Cluster_IsWMIServiceOperational |
Cluster_IsUserAdmin |
Cluster_RemoteRegistryServiceFacet |
Cluster_IsDomainController |
SSMS_IsInternetConnected |
IsDomainNetworkTopOfBindings |
IsFirewallEnabled |
Cluster_DNS_Consistency_Rule |
FacetWOW64SetupCheck |
ServerCoreBlockUnsupportedSxSCheck |
ClusterPrepare_HasClusteredInstanceCheck |
ClusterSupportCheck |
ClusterFeaturesCheckForBI |
Engine_FilestreamRequiredHotfixesCheck |
Engine_ResourceDLLUpdateRestartCheck |
FAT32FileSystemCheck |
InstanceClashRule |
SlipstreamMediaInfoCheck |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCorePlatformCheck |
ServerCore64BitCheck |
ServerCoreBlockUnsupportedSxSCheck |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
DEV10RTMDetected |
PowerShellCheck |
RS_IsDotNet3_5Installed |
FusionRebootCheck |
Cluster_IsMachineClustered |
Cluster_IsWMIServiceOperational |
Cluster_IsUserAdmin |
Cluster_IsOnline |
Cluster_IsDTCInstalled |
Cluster_IsDTCRunning |
Cluster_IsDTCClustered |
Cluster_VerifyForErrors |
Cluster_VerifyForWarnings |
Cluster_Prepped_Instance |
Cluster_RemoteRegistryServiceFacet |
Cluster_IsDomainController |
Cluster_DNS_Consistency_Rule |
FacetWOW64SetupCheck |
ServerCoreBlockUnsupportedSxSCheck |
Cluster_NumberOfNodes |
Cluster_FailedPreppedInstance |
Cluster_ClusteredInstance |
Cluster_IsDomainController |
SqlFeatureStateCheck |
AsFeatureStateCheck |
IsSqlInstanceIdConsistentCheck |
IsAsInstanceIdConsistentCheck |
IsSqlVersionConsistentCheck |
IsAsVersionConsistentCheck |
IsSqlEditionConsistentCheck |
IsAsEditionConsistentCheck |
SlipstreamMediaInfoCheck |
Cluster_SharedDiskFacet |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
Engine_FilestreamConfigurationCheck |
MultiSubnetClusterOSCheck |
MultiSubnetClusterSkuCheck |
FusionRebootCheck |
Cluster_IsMachineClustered |
Cluster_IsWMIServiceOperational |
Cluster_IsUserAdmin |
Cluster_IsOnline |
Cluster_IsDTCInstalled |
Cluster_IsDTCRunning |
Cluster_IsDTCClustered |
Cluster_VerifyForErrors |
Cluster_VerifyForWarnings |
Cluster_RemoteRegistryServiceFacet |
Cluster_IsDomainController |
SSMS_IsInternetConnected |
IsDomainNetworkTopOfBindings |
IsFirewallEnabled |
Cluster_DNS_Consistency_Rule |
FacetWOW64SetupCheck |
ServerCoreBlockUnsupportedSxSCheck |
ClusterSupportCheck |
ClusterFeaturesCheckForBI |
Cluster_SharedDiskFacet |
PowerShellCheck |
DEV10RTMDetected |
SlipstreamMediaInfoCheck |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
RS_IsDotNet3_5Installed |
InstanceClashRule |
FAT32FileSystemCheck |
Engine_ResourceDLLUpdateRestartCheck |
Engine_FilestreamRequiredHotfixesCheck |
FusionRebootCheck |
Cluster_IsMachineClustered |
Cluster_IsWMIServiceOperational |
Cluster_IsUserAdmin |
Cluster_IsOnline |
Cluster_IsDTCInstalled |
Cluster_IsDTCRunning |
Cluster_IsDTCClustered |
Cluster_VerifyForErrors |
Cluster_VerifyForWarnings |
Cluster_RemoteRegistryServiceFacet |
Cluster_IsDomainController |
SSMS_IsInternetConnected |
IsDomainNetworkTopOfBindings |
IsFirewallEnabled |
Cluster_DNS_Consistency_Rule |
FacetWOW64SetupCheck |
ServerCoreBlockUnsupportedSxSCheck |
Cluster_NumberOfNodes |
SqlFeatureStateCheck |
AsFeatureStateCheck |
AddNodeEditionBlock |
Engine_FilestreamRequiredHotfixesCheck |
Engine_ResourceDLLUpdateRestartCheck |
FAT32FileSystemCheck |
InstanceClashRule |
DEV10RTMDetected |
SlipstreamMediaInfoCheck |
MultiSubnetClusterOSCheck |
MultiSubnetClusterSkuCheck |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
PowerShellCheck |
RS_IsDotNet3_5Installed |
FusionRebootCheck |
Cluster_IsMachineClustered |
Cluster_IsWMIServiceOperational |
Cluster_IsUserAdmin |
Cluster_IsOnline |
Cluster_RemoteRegistryServiceFacet |
ServerCoreBlockUnsupportedSxSCheck |
FusionRebootCheck |
SysPrepFeatureCheck |
Bids2008InstalledCheck |
SSMS_IsInternetConnected |
AclPermissionsFacet |
FacetDomainControllerCheck |
FacetWOW64PlatformCheck |
ServerCoreBlockUnsupportedSxSCheck |
BlockMixedArchitectureInstall |
BlockCrossLanguageInstall |
FAT32FileSystemCheck |
Unconfigured_SqlFeatureStateCheck |
Unconfigured_AsFeatureStateCheck |
Unconfigured_RsFeatureStateCheck |
PowerShellCheck |
SlipstreamMediaInfoCheck |
InternetConnectionToNETFX4DownloadSite |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
ServerCorePlatformCheck |
ServerCore64BitCheck |
ServerCoreBlockUnsupportedSxSCheck |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
PowerShellCheck |
RS_IsDotNet3_5Installed |
SSMS_IsInternetConnected |
IsFirewallEnabled |
AclPermissionsFacet |
FacetDomainControllerCheck |
FacetWOW64PlatformCheck |
ServerCoreBlockUnsupportedSxSCheck |
EditionUpgradeMatrixCheck |
EditionDownGradeCheck |
FAT32FileSystemCheck |
InstanceClashRule |
ServerCoreBlockUnsupportedFeaturesCheck |
ServerCoreNetFxCheck |
Algumas vezes gosto de montar querys baseadas em resultados de outras querys e costumo adicionar um GO no final, principalmente quando vai ter muita transação e a solução permite,,,
Estou testando o SSMS 2016 e percebi que ele não adiciona a quebra de linha na cópia do resultado da grade para o editor,,, o bom é velho CHAR(10)+CHAR(13),,,
Olhando em Tools>Options>Query Results>SQL Server>Results to Grid Achei a opção “Retain CR/LF on copy or save”
Mas não basta só marcar, tem que fechar e abrir novamente o SSMS…