AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 343770
Accepted
JohnG
JohnG
Asked: 2024-11-22 03:51:54 +0800 CST2024-11-22 03:51:54 +0800 CST 2024-11-22 03:51:54 +0800 CST

Consulta para sinalizar usuário: atualização do SQL2022 necessária

  • 772

Meu software, compatível com todas as versões do SQL2016 e superiores, incluindo o SQL Azure, trava quando o SQL 2022 é inferior à versão 16.0.1135.2 ou inferior à 16.0.4165.4 - dependendo do RTM, GDR, CU (que estou tendo dificuldade em entender a arquitetura de versão que a MS usa)

Eu escrevi este código para descobrir se uma atualização de SQL é necessária

-- if it's Version 16
IF (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),1,charindex('.',convert(varchar(20),SERVERPROPERTY('productversion')))-1))='16'
-- If so is it 16.0.1xxxxxxx or 16.0.4xxxxxxxx
    IF (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),1,charindex('16.0.',convert(varchar(20),SERVERPROPERTY('productversion')))))='1'
-- if 16.0.1 it needs to be < 16.0.1135.2 
BEGIN 
        if (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),charindex('16.0.',convert(varchar(20),SERVERPROPERTY('productversion'))),len(convert(varchar(20),SERVERPROPERTY('productversion')))))<'16.0.1135.2'
 select 1
END
ELSE 
BEGIN 
-- if 16.0.4 it needs to be < 16.0.4165.4 
        IF (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),1,charindex('16.0.',convert(varchar(20),SERVERPROPERTY('productversion')))))='4'
            if (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),charindex('16.0.',convert(varchar(20),SERVERPROPERTY('productversion'))),len(convert(varchar(20),SERVERPROPERTY('productversion')))))<'16.0.4165.4'
            select 1 
END 

Meu problema é que em 16.0.YYYY.z, não acho que posso confiar no primeiro Y para me dizer qual branch devo olhar porque, olhando para versões anteriores do SQL, no mesmo branch o primeiro Y pode mudar de dígito... O que estou procurando são as 2 versões atualizadas antes de 2024-11-12. Quero ser sinalizado se a versão do SQL2022 instalada não incluir as atualizações de 2024-11-12.

  1. Existe algum padrão que eu possa seguir ou haveria uma maneira melhor de fazer isso?
  2. Devo me preocupar com o Azure ou posso presumir que o Azure está sempre atualizado?

Queremos que o usuário saiba que ele precisa de no mínimo 16.0.1135.2 ou 16.0.4165.4. Minha preocupação é selecionar o branch (='1' ou ='4') na consulta. Não acho que será confiável com o tempo (o dígito pode mudar), pois não tenho certeza da convenção que a MS usa.

O Software tem mais de 30000 scripts (mais de 30 anos de desenvolvimento) e milhares de clientes. As atualizações são feitas por especialistas (e não pelo cliente). Como ele é atualizado quatro vezes por ano, queremos adicionar um aviso durante a atualização se descobrirmos que o servidor SQL é incompatível para que o especialista possa tomar medidas.

sql-server
  • 2 2 respostas
  • 55 Views

2 respostas

  • Voted
  1. Best Answer
    HandyD
    2024-11-22T11:48:10+08:002024-11-22T11:48:10+08:00

    Existe algum padrão que eu possa seguir ou haveria uma maneira melhor de fazer isso?

    Na verdade não, pois seu problema é bem específico. Como outros mencionaram, a maneira "correta" de lidar seria consertar o bug do aplicativo que causa o travamento.

    Devo me preocupar com o Azure ou posso presumir que o Azure está sempre atualizado?

    O Banco de Dados SQL do Azure divergiu da base de código do SQL Server, então os números de versão etc. não se correlacionam mais com os números de versão do SQL Server. Se você não estiver enfrentando o problema no Azure SQL, provavelmente é seguro simplesmente ignorá-lo por enquanto.

    Meu problema é que em 16.0.YYYY.z, não acho que posso confiar no primeiro Y para me dizer qual branch devo olhar porque, olhando para versões anteriores do SQL, no mesmo branch o primeiro Y pode mudar o dígito

    Converta-os para valores INT para que você possa fazer comparações numéricas simples em vez da manipulação complicada de strings. Use SERVERPROPERTY para extrair a propriedade ProductBuild e avaliar que:

    DECLARE @MajorVersion INT
        , @ProductBuild INT
    
    SELECT @MajorVersion = CAST(SERVERPROPERTY('ProductMajorVersion') AS INT)
        , @ProductBuild = CAST(SERVERPROPERTY('ProductBuild') AS INT)
    
    IF (@MajorVersion) = 16 AND CAST((SELECT SERVERPROPERTY('Edition')) AS VARCHAR(255)) NOT LIKE '%Azure%'
    BEGIN
        IF (@ProductBuild) >= 1000 AND (@ProductBuild) < 1135
            OR (@ProductBuild) >= 4003 AND (@ProductBuild) < 4165
        BEGIN
            PRINT 'Unsafe version of SQL 2022'
        END
        ELSE
        BEGIN
            PRINT 'Safe version of SQL 2022'
        END
    END
    ELSE
    BEGIN
        PRINT 'Not SQL 2022'
    END
    

    Este código converte a propriedade ProductMajorVersion (a primeira parte do número da versão) para um INT, então converte o número da compilação para um INT. Eles são então comparados com os limites superior e inferior conhecidos para o SQL 2022 para determinar se é uma versão insegura ou não.

    Como você sabe que as versões de 1135 em diante, e de 4165 em diante são seguras, você realmente só precisa verificar se o servidor de destino tem uma versão entre 1000 e 1135, ou entre 4003 e 4165. Converter para inteiros significa que você não precisa verificar vários primeiros dígitos possíveis, você pode seguramente assumir que se for acima de 1135, então está bom. Como o caminho GDR nunca excederá a marca d'água inferior 4003 para o caminho CU, não haverá nenhum conflito.

    O script também verifica a propriedade "Edição" e, se for Azure, ele ignora a verificação completamente.

    OBSERVAÇÃO: Se você encontrar outras versões posteriormente que também estejam travando, será necessário alterar o script para verificar se há um valor ProductBuild entre as novas marcas d'água superior e inferior.

    • 3
  2. Erik Reasonable Rates Darling
    2024-11-22T11:09:28+08:002024-11-22T11:09:28+08:00

    Deus por que

    Isso parece um tanto tolo, no geral.

    Meu software ... trava quando o SQL 2022 é inferior à versão 16.0.1135.2 ou inferior a 16.0.4165.4

    Por quê? O que há de especial neles?

    • Seu software se comporta de forma diferente nessas CUs ou mesmo entre diferentes versões principais (incluindo instâncias de nuvem)?
    • O seu software se comporta de forma diferente entre as edições Standard e Enterprise?
    • Seu software se comporta de forma diferente dependendo do nível de compatibilidade do banco de dados?

    Talvez seus clientes tenham políticas de patch que não permitem que eles apliquem patches todo mês, ou mesmo a cada três meses. Você vai brigar com o pessoal de segurança/infraestrutura sobre isso para que seu software não trave quando não puder lidar com um número de versão?

    Eles podem ter ambientes inferiores nos quais atualizações cumulativas precisam ser testadas e validadas antes da atualização. Talvez eles tenham testado uma CU em um ambiente inferior e encontrado uma regressão e não podem implementá-la para produção e precisam esperar por outra.

    Esse tipo de coisa não é da sua conta como desenvolvedor de software. Dependências como essa só desperdiçam o tempo de todo mundo.

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve