Foi um grande prazer ter participado do Data Secrets #38.
Quem tiver a oportunidade de assistir segue o vídeo:
Foi um grande prazer ter participado do Data Secrets #38.
Quem tiver a oportunidade de assistir segue o vídeo:
Caso você contrate uma AMI com SQL e precise da mídia de instalação do SQL para qualquer atividade, na unidade C:\ existe um diretório chamado “SQLServerSetup” com os binários para a instalação do SQL Server.
Isso ajuda caso precise trocar o Collation da instância, adicionar feature, reinstalar usando uma instância, adicionar uma instância, etc..
A instalação padrão vem na instância default, collation SQL_Latin1_General_CP1_CI_AS, tempdb nas configurações NNF, sem IFI, basicamente uma instalação NNF.
Aí vem outra pergunta, por que pegar uma imagem da AWS com SQL? por que não usar um RDS?
Bom, a resposta disso é mais com você do que comigo, porque tudo vai depender da necessidade.
AMI – EC2 com SQL Instalado
RDS
Vou tratar da comparação entre uma AMI e um RDS em outro post.
Imagine o seguinte cenário:
O que vou mostrar não é a solução perfeita, ela carece de algumas melhorias mas já é um norte para ajudar nessa ideia…
O Redshift é um PostgreSQL modificado, então muita query em tabelas de sistema do PG funciona direitinho no Redshift…
Para esse cenário, você pode criar um pacote de integration services e rodar a query abaixo contra o Redshift:
select
TRIM(q.DATABASE) AS DB,
TRIM(u.usename) as usename,
sum(bytes)/1024 as kbytes,
sum(packets) as packets,
date(b.starttime) as data
from
stl_bcast b
join stl_query q ON
b.query = q.query
AND b.userid = q.userid
join pg_user u
on u.usesysid = q.userid
where
packets>0
and b.starttime >= dateadd(day, -7, current_Date)
and datediff(seconds, b.starttime, b.endtime)>0
--and u.usename like 'usr%'
--and querytxt not like 'fetch%'
group by TRIM(q.DATABASE)
,u.usename
,date(b.starttime)
Essa query vai trazer a informação do volume em kb trafegado pela query executada.
Com isso, você consegue montar um report incremental e ratear o custo da saída de dados da AWS.
É 100%?, não,,, mas pelo menos já é alguma coisa já que a AWS não provê dados granularizados de quem consome a saída de dados.
novos códigos serão criados também em outro repositório:
https://github.com/bigleka
O Redshift tem umas vantagens bem interessantes, baixo custo, RDS, baixa necessidade de manutenção.
No fundo ele é um PostgreSQL modificado para prover volume de dados e não ficar trabalhando como OLTP, ele é ótimo como estrutura para DW.
Imagine o seguinte cenário, você vende uma solução mas precisa prover um acesso do seu cliente para que ele consiga acessar uma parte dos dados diretamente na sua estrutura de banco, para ele “ter a liberdade” de cruzar esses dados, montar estruturas de relatórios, etc. da forma que ele achar mais interessante, ou até mesmo exportar esses dados para uma estrutura dele e usar da forma que achar melhor.
Certo, temos várias formas de fazer isso, todas tem seus prós e contras, mas nesse caso vou usar como exemplo justamente o título do post, vamos colocar os dados no Redshift.
Então, você tem alguma forma de extração de dados incrementais (SSIS, Pentaho, Informática, estagiário, etc.) que leva os dados do seu OLTP para o Redshift e isso funciona bem.
Agora você precisa criar a estrutura de permissões para liberar o acesso do seu cliente para essa estrutura de dados.
Uma coisa muito importante : Todos os usuários do Redshift são exclusivos do banco de dados e não da instância, Então caso o cliente tenha mais de um banco ou você queira dar permissão para mais de um banco, siga o processo quantas vezes for necessário.
— Normalmente quando os objetos são criados no Redshift ele ficam armazenados no schema public.
— Isso não é um problema, o problema começa quando é criado um schema para armazenar um outro conjunto de objetos
— para um setor da empresa, ou um outro departamento…
— Quando isso acontece, o usuário owner da carga dos objetos tem acesso a essa estrutura de dados sem problema, mas novos usuários,
— ou usuários permissonalizados não tem a permissão para os objetos ou para novos objetos nesse schema.
— O script abaixo tente a sanar um cenário em que você quer liberar o acesso de select para os objetos e novo objetos em um schema pulic
— ou personalizado sem ter que ficar dando grant toda a vez que novos objetos são criados.
— Outra opção de uso é caso você tenha um Redshift na sua empresa e venda como serviço ele como datalake para algum cliente.
— dessa forma você consegue liberar um usuário para que o cliente acesse a estrutura de dados e consiga baixar os dados.
-- Normalmente quando os objetos são criados no Redshift ele ficam armazenados no schema public.
-- Isso não é um problema, o problema começa quando é criado um schema para armazenar um outro conjunto de objetos
-- para um setor da empresa, ou um outro departamento...
-- Quando isso acontece, o usuário owner da carga dos objetos tem acesso a essa estrutura de dados sem problema, mas novos usuários,
-- ou usuários permissonalizados não tem a permissão para os objetos ou para novos objetos nesse schema.
-- O script abaixo tente a sanar um cenário em que você quer liberar o acesso de select para os objetos e novo objetos em um schema pulic
-- ou personalizado sem ter que ficar dando grant toda a vez que novos objetos são criados.
-- Outra opção de uso é caso você tenha um Redshift na sua empresa e venda como serviço ele como datalake para algum cliente.
-- dessa forma você consegue liberar um usuário para que o cliente acesse a estrutura de dados e consiga baixar os dados.
-- criar um usuário
create user <username> with password ‘<password>’;
-- cria um grupo para receber as permissões
create group data_viewers;
-- adiciona o usuário ao grupo
alter group data_viewers add user <username>;
-- nesse caso remove a opção de criar objetos para os usuários do grupo
revoke create on schema public from group data_viewers;
-- atribui acesso no schema public ao grupo
grant usage on schema public to group data_viewers;
-- atribui select em todas as tabelas do schema public para o grupo
grant select on all tables in schema public to group data_viewers;
-- atribui acesso a futuros objetos do schema public para o grupo
alter default privileges in schema public grant select on tables to group data_viewers
novos códigos serão criados também em outro repositório:
Como DBA´s estamos sujeitos a jobs, alertas, sistemas, coisas do além, gerentes, desenvolvedores, intervenções místicas, etc. executando ações no banco de dados.
Não da pra ficar olhando de perto o ambiente a todo o momento analisando cada ação, monitorando tudo o que ocorre, se preparando para o pior.
Sendo um bom DBA, você deve ter um monte de Jobs, Alertas, Operadores, Sistemas de Monitoração, aquele estagiário sendo escalpelado, entre outras formas de monitorar seus bancos, a ideia aqui é trazer mais uma opção para atazanar sua vida monótona.
Vamos a receita do desastre,,, Para isso vamos precisar:
Vamos começar,,,
Conta do Telegram
Instale o aplicativo do Telegram no seu Windows
Crie um Bot
Configure o Bot
Crie um canal e adicione esse Bot como administrador a um canal
Mande uma mensagem para esse canal para criar um ID
Acesse uma URL do Telegram com a chave do BOT para pegar o ID do canal
{"ok":true,"result":[{"update_id":129494597, "message":{"message_id":3,"from":{"id":XXXXXX,"is_bot":false,"first_name":"Ricardo","last_name":"Leka"},"chat":{"id":XXXXXX,"first_name":"Ricardo","last_name":"Leka","type":"private"},"date":1614187816,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":129494598, "message":{"message_id":4,"from":{"id":XXXXXX,"is_bot":false,"first_name":"Ricardo","last_name":"Leka","language_code":"pt-br"},"chat":{"id":XXXXXX,"first_name":"Ricardo","last_name":"Leka","type":"private"},"date":1614187832,"text":"/getchatid","entities":[{"offset":0,"length":10,"type":"bot_command"}]}},{"update_id":129494599, "channel_post":{"message_id":2,"sender_chat":{"id":-XXXX,"title":"MC1_Notify","type":"channel"} ,"chat":{"id":-XXXX,"title":"Nome_Do_Canal","type":"channel"} ,"date":1614187878,"text":"teste"}}]}
O que interessa para nós é um desses últimos “id” que estão com um símbolo de menos na frente “id”:-XXXX
Crie uma função no Powershell
<#
.Synopsis
Sends Telegram text message via Bot API
.DESCRIPTION
Uses Telegram Bot API to send text message to specified Telegram chat. Several options can be specified to adjust message parameters.
.EXAMPLE
$bot = "#########:xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxx"
$chat = "-#########"
Send-TelegramTextMessage -BotToken $bot -ChatID $chat -Message "Hello"
.EXAMPLE
$bot = "#########:xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxx"
$chat = "-#########"
Send-TelegramTextMessage `
-BotToken $bot `
-ChatID $chat `
-Message "Hello *chat* _channel_, check out this link: [TechThoughts](http://techthoughts.info/)" `
-ParseMode Markdown `
-Preview $false `
-Notification $false `
-Verbose
.PARAMETER BotToken
Use this token to access the HTTP API
.PARAMETER ChatID
Unique identifier for the target chat
.PARAMETER Message
Text of the message to be sent
.PARAMETER ParseMode
Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message. Default is Markdown.
.PARAMETER Preview
Disables link previews for links in this message. Default is $false
.PARAMETER Notification
Sends the message silently. Users will receive a notification with no sound. Default is $false
.OUTPUTS
System.Boolean
.NOTES
Author: Jake Morrison - @jakemorrison - http://techthoughts.info/
This works with PowerShell Versions 5.1, 6.0, 6.1
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
How do I get my channel ID? Use the getidsbot https://telegram.me/getidsbot
How do I set up a bot and get a token? Use the BotFather https://t.me/BotFather
.COMPONENT
PoshGram - https://github.com/techthoughts2/PoshGram
.FUNCTIONALITY
https://core.telegram.org/bots/api#sendmessage
Parameters Type Required Description
chat_id Integer or String Yes Unique identifier for the target chat or username of the target channel (in the format @channelusername)
text String Yes Text of the message to be sent
parse_mode String Optional Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message.
disable_web_page_preview Boolean Optional Disables link previews for links in this message
disable_notification Boolean Optional Sends the message silently. Users will receive a notification with no sound.
reply_to_message_id Integer Optional If the message is a reply, ID of the original message
#>
function Send-TelegramTextMessage {
[CmdletBinding()]
Param
(
[Parameter(Mandatory = $true,
HelpMessage = '#########:xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxx')]
[ValidateNotNull()]
[ValidateNotNullOrEmpty()]
[string]$BotToken, #you could set a token right here if you wanted
[Parameter(Mandatory = $true,
HelpMessage = '-#########')]
[ValidateNotNull()]
[ValidateNotNullOrEmpty()]
[string]$ChatID, #you could set a Chat ID right here if you wanted
[Parameter(Mandatory = $true,
HelpMessage = 'Text of the message to be sent')]
[ValidateNotNull()]
[ValidateNotNullOrEmpty()]
[string]$Message,
[Parameter(Mandatory = $false,
HelpMessage = 'HTML vs Markdown for message formatting')]
[ValidateSet("Markdown", "HTML")]
[string]$ParseMode = "Markdown", #set to Markdown by default
[Parameter(Mandatory = $false,
HelpMessage = 'Disables link previews')]
[bool]$Preview = $false, #set to false by default
[Parameter(Mandatory = $false,
HelpMessage = 'Sends the message silently')]
[bool]$Notification = $false #set to false by default
)
#------------------------------------------------------------------------
$results = $true #assume the best
#------------------------------------------------------------------------
$payload = @{
"chat_id" = $ChatID;
"text" = $Message
"parse_mode" = $ParseMode;
"disable_web_page_preview" = $Preview;
"disable_notification" = $Notification
}#payload
#------------------------------------------------------------------------
try {
Write-Verbose -Message "Sending message..."
$eval = Invoke-RestMethod `
-Uri ("https://api.telegram.org/bot{0}/sendMessage" -f $BotToken) `
-Method Post `
-ContentType "application/json" `
-Body (ConvertTo-Json -Compress -InputObject $payload) `
-ErrorAction Stop
if (!($eval.ok -eq "True")) {
Write-Warning -Message "Message did not send successfully"
$results = $false
}#if_StatusDescription
}#try_messageSend
catch {
Write-Warning "An error was encountered sending the Telegram message:"
Write-Error $_
$results = $false
}#catch_messageSend
return $results
#------------------------------------------------------------------------
}#function_Send-TelegramTextMessage
Declare a variável com o nome do Bot e a chave
$bot = "token"
$chat = "-ID_do_chat"
Mande uma mensagem
$bot = "token"
$chat = "-ID_do_chat"
Send-TelegramTextMessage -BotToken $bot -ChatID $chat -Message "CASA CAIU"
Com isso agora temos um powershell que acessa uma API do Telegram e manda mensagem, junta isso em um JOB que é acionado por um alerta e vc tem o SQL ou outro sistema de monitoração mandando mensagens para seu celular.
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}
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
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 |