Bah! – SQLSaturday #744 – Caxias do Sul Tchê !


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 fazer como fazer as coisas no SQL Server.

Instalar o MSSQL-CLI


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…

Qual query está acessando qual arquivo do File Group?


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

SQL Skip Rules


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:

  • SETUP /SkipRules=NoRebootPackage /Action=RemoveNode

Para ele não considerar mais de uma regra adicione um espaço entre elas.

  • SETUP /SkipRules=NoRebootPackage WmiServiceStateCheck /Action=RemoveNode

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

CR/LF no SSMS 2016


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…

Habilitar o Dark Theme no SSMS 2016


Para quem já baixou o SSMS 2016/2017 deste a versão de julho o pessoal da Microsoft liberou os temas Blue e Light.

Como o SSMS é baseado no Visual Studio essa possibilidade cosmética já estava demorando para aparecer.

O problema é já que liberaram esses 2 temas por que não liberar o Dark?

Abri um connect a alguns meses pedindo esse tema (se você ainda não votou, aproveita e acessa o link e vote) de acordo com a resposta inicial o tema existe mas está desativado pois ainda estão trabalhando nele.

Caso você esteja interessado em saber como está o andamento do que eles tem até agora você pode habilitar o tema Dark para o SSMS 2016 (13.0.16000.28)

  1. Abra o notepad em modo de administração;
  2. Navegue até o diretório c:\program files (x86)\Microsoft SQL Server\130\tools\binn\managementstudio
  3. Abra o arquivo SSMS.pkgundef
  4. Dentro do arquivo localize a entrada “Remove Dark theme”
  5. Comente com // todas as linhas abaixo dessa entrada até o “Remove dacfx…” Atualização!!! Não precisam ser todas as linhas, apenas a linha diretamente abaixo do “Remove Dark theme”
  6. Salve o arquivo e reinicie o SSMS 2016

Até agora eles só trocaram as cores das barras de menu e do editor de query…

É perceptível que falta muita coisa como “Object Explorer”, “Grid Result”, etc.

SQL Server no Linux


Todos já devem estar sabendo dessa “novidade”

O link para o blog: https://blogs.microsoft.com/blog/2016/03/07/announcing-sql-server-on-linux

Se você quiser se cadastrar para “testar” o preview o link é: https://www.microsoft.com/en-us/server-cloud/sql-server-on-linux.aspx

Honestamente não sei se isso vai ser bom ou ruim,,, vejo muitas aplicações interessantes, mas também vejo muita dor de cabeça pela frente…

pode ser que eles usem isso para acabar com a versão Enterprise, forçando as empresas a usarem a nuvem caso queiram HA ou features avançadas? ou é uma forma de baratear o produto já que “em teoria” existem versões gratuitas de Linux? ainda mais pensando que ele vai ser distribuído por Docker,,,

Bom,,, de qualquer forma, mais uma coisa para relembrar,,, como faz tempo que não trabalho com linux… 😦