none
Identificar licença SQL Server RRS feed

  • Pergunta

  • Como descobrir se a licença no SQL é por call, ou processador?

    a query select @@version não me mostra o resultado que queria 

    terça-feira, 14 de janeiro de 2020 15:06

Todas as Respostas

  • Qual é a versão e edição que está instalada?

    Que informações obteve ao consultar @@version?

    ---

    Em um dos fóruns do serverfault encontrei a seguinte resposta, postada no início de 2019: How to view SQL Server licenses
       

    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.


    José Diz     Belo Horizonte, MG - Brasil     [ Modelos de manutenção do software SQL Server ]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz terça-feira, 14 de janeiro de 2020 18:10
    terça-feira, 14 de janeiro de 2020 15:47
  • Dyego,

    Como já foi destacado no link compartilhado pelo José Diz, a system function ServerProperty() também é bastante útil a mesma retorna informações sobre licenciamento mas em alguns casos segundo a documentação ela pode falhar.


    Segundo a documentação oficial: "As informações de licença não são preservadas ou mantidas pelo produto SQL Server. Sempre retorna com deficiência."

    Não sei dizer, mas a Extended Stored Procedure XP_MSver pode te ajudar a obter algumas informações, veja a documentação:

    https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/xp-msver-transact-sql?view=sql-server-ver15


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    terça-feira, 14 de janeiro de 2020 17:14
    Moderador
  • Apenas isso 

    Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
    Dec 28 2012 20:23:12 
    Copyright (c) Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

    terça-feira, 14 de janeiro de 2020 17:22
  • Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
    Dec 28 2012 20:23:12 
    Copyright (c) Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

    Dyego, a versão é a 2012, edição Standard. Na sugestão do link que postei anteriormente existem instruções diferentes para cada versão do SQL Server. Observe que no caso da versão 2012 o indicado é para que utilize consulta ao arquivo de log de erros do SQL Server; estranho, não?

    Algo assim:

    -- código #1 v2
    EXECUTE sys.sp_readerrorlog @p1 = 0, @p2 = 1, @p3 = N'licen';


    Já vi um script em powershell que obtém a informação que você necessita, mas consultando diretamente o "registro"; vou procurá-lo e posto aqui o link dele, ok?

    ---

    Sugestão de leitura: Microsoft SQL Server 2012 Licensing Guide

     

    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz terça-feira, 14 de janeiro de 2020 18:25
    terça-feira, 14 de janeiro de 2020 17:33
  • Dyego,

    Bom, você esta utilizando o SQL Server 2012 com SP1.

    Estranho o resultado a XP_MSVer estar apresentando somente este conjunto de valores, esta Extended Stored Procedure obrigatoriamente retorna todo este conjunto de colunas:

    Você esta utilizando o SQL Server Management Studio?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    terça-feira, 14 de janeiro de 2020 17:37
    Moderador
  • Esse é o resultado, do que me falou, não vi que tinha mandando essa XP_MSver

    

    terça-feira, 14 de janeiro de 2020 17:41
  • Me retornou isso , ele traz informações do processador, informando que esta usando 4 processadores , quer dizer que seria licenciamento por processador mesmo ?

    Não entendi bem


    SQL Server detected 4 sockets with 1 cores per socket and 1 logical processors per socket, 4 total logical processors; using 4 logical processors based
     on SQL Server licensing.
     This is an informational message; no user action is required.

    terça-feira, 14 de janeiro de 2020 17:48
  • Dyego,

    Vamos por partes:

    O retorno que você postou anteriormente se refere ao resultado da XP_MSVer, até ai tudo bem, mas não retorna o licenciamento que você esta querendo.

    Mas o exemplos de código que sugerido no primeiro post do José Diz, retornaram alguma coisa?

    Só para nortear, ao executar o bloco de código abaixo, qual é o retorno:

    SELECT SERVERPROPERTY('LicenseType'),
           SERVERPROPERTY('NumLicenses'),
           SERVERPROPERTY('productversion'), 
           SERVERPROPERTY ('productlevel'), 
           SERVERPROPERTY ('edition')
    Go

    Caso o retorno da opção LicenseType seja Disabled, existe uma possibilidade de tentar forçar a execução deste código de outra forma.

    Ou então podemos tentar através do SQL Server ler as chaves de registro do Windows afim de tentar identificar o licenciamento.

    Veja se este exemplo de código extraído do seguinte post: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/47479a43-77be-4a60-b69e-5807957dffbd/distributed-query-for-license-key

    USE master
    GO
    
    create table #version
    (
    	version_desc varchar(2000)
    )
    
    insert #version
    select @@version
    
    if exists
    (
    	select 1
    	from #version
    	where version_desc like '%2005%'
    )
    Begin
    	DECLARE @Registry_Value_2005 VARCHAR(1000)
    	EXEC xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\Setup','ProductCode',@Registry_Value_2005 OUTPUT --2005
    	SELECT @@version as 'version',@Registry_Value_2005 as 'license_key'
    End
    else if exists
    (
    	select 1
    	from #version
    	where version_desc like '%express%'
    )
    Begin
    	DECLARE @Registry_Value_2008_express VARCHAR(1000)
    	EXEC xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\Setup','ProductCode',@Registry_Value_2008_express OUTPUT -- 2008 express
    	SELECT @@version as 'version',@Registry_Value_2008_express as 'license_key'
    End
    else if exists
    (
    	select 1
    	from #version
    	where version_desc like '%R2%'
    )
    Begin
    	DECLARE @Registry_Value_2008_R2 VARCHAR(1000)
    	EXEC xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\Setup','ProductCode',@Registry_Value_2008_R2 OUTPUT -- 2008 R2
    	SELECT @@version as 'version',@Registry_Value_2008_R2 as 'license_key'
    End
    else if exists
    (
    	select 1
    	from #version
    	where version_desc like '%2008%'
    )
    Begin
    	DECLARE @Registry_Value_2008 VARCHAR(1000)
    	EXEC xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\Setup','ProductCode',@Registry_Value_2008 OUTPUT -- 2008
    	SELECT @@version as 'version',@Registry_Value_2008 as 'license_key'
    End
    else if exists
    (
    	select 1
    	from #version
    	where version_desc like '%2012%'
    )
    Begin
    	DECLARE @Registry_Value_2012 VARCHAR(1000)
    	EXEC xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\Setup','ProductCode',@Registry_Value_2012 OUTPUT -- 2012
    	SELECT @@version as 'version',@Registry_Value_2012 as 'license_key'
    End
    else
    Begin
    	select 'version not recognized'
    End
    
    drop table #version

    Poderá lhe ajudar.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    terça-feira, 14 de janeiro de 2020 17:54
    Moderador
  • O codigo do post do Jose Diz retornou o seguinte: 

    SQL Server detected 4 sockets with 1 cores per socket and 1 logical processors per socket, 4 total logical processors; using 4 logical processors based
     on SQL Server licensing.
     This is an informational message; no user action is required.

    Nesse codigo que voce me enviou agora, ele mostra como Disabled , é um ate um comando que tinha testado também


    terça-feira, 14 de janeiro de 2020 17:59
  • Dyego,

    Ok, então, inicialmente tendo como base o retorno apresentando pelo exemplo do código do José Diz, o licenciamento esta sendo feito por processador.

    Em relação ao Disabled, podemos tentar fazer o seguinte, segundo este link: https://serverfault.com/questions/6988/how-to-view-sql-server-licenses

    "If the above query returns DISABLED then locate this "sqlslic.cpl" file in SQL server folder(C:\Program Files\Microsoft SQL Server\80\Tools\Binn), Right Click-> Open with Control Panel. this will show you the licensing type used"

    O outro exemplo de código que eu postei, baseado na leitura do registro do Windows apresentou qual resultado?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 14 de janeiro de 2020 18:11
    Moderador
  • Dyego, ainda não encontrei o script mágico em powershell, mas há dois scripts que coletam informações sobre o licenciamento. Para seu conhecimento:

    Get SQL Server Product Keys for Local and Remote Servers 

    Determining the version and edition of SQL Server and its components by SQL Script and PowerShell Script 

    Assim que eu te obtiver informação adicional, te informo.

     

    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz terça-feira, 14 de janeiro de 2020 18:25
    terça-feira, 14 de janeiro de 2020 18:19
  • O comando ele retornou, aquelas mesmas informações do @@version, e uma chave de licença
    terça-feira, 14 de janeiro de 2020 18:35
  • Dyego, ainda não encontrei o script mágico em powershell, mas há dois scripts que coletam informações sobre o licenciamento. Para seu conhecimento:

    Get SQL Server Product Keys for Local and Remote Servers 

    Determining the version and edition of SQL Server and its components by SQL Script and PowerShell Script 

    Assim que eu te obtiver informação adicional, te informo.

     

    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    José,

    Você se refere a este script:

    function Get-SQLserverKey {
    ## function to retrieve the license key of a SQL 2008 Server.
    ## by Jakob Bindslet (jakob@bindslet.dk)
    param ($targets = “.”)
    $hklm = 2147483650
    $regPath = “SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\Setup”
    $regValue1 = “DigitalProductId”
    $regValue2 = “PatchLevel”
    $regValue3 = “Edition”
    Foreach ($target in $targets) {
    $productKey = $null
    $win32os = $null
    $wmi = [WMIClass]“\\$target\root\default:stdRegProv”
    $data = $wmi.GetBinaryValue($hklm,$regPath,$regValue1)
    [string]$SQLver = $wmi.GetstringValue($hklm,$regPath,$regValue2).svalue
    [string]$SQLedition = $wmi.GetstringValue($hklm,$regPath,$regValue3).svalue
    $binArray = ($data.uValue)[52..66]
    $charsArray = “B”,”C”,”D”,”F”,”G”,”H”,”J”,”K”,”M”,”P”,”Q”,”R”,”T”,”V”,”W”,”X”,”Y”,”2″,”3″,”4″,”6″,”7″,”8″,”9″
    ## decrypt base24 encoded binary data
    For ($i = 24; $i -ge 0; $i–) {
    $k = 0
    For ($j = 14; $j -ge 0; $j–) {
    $k = $k * 256 -bxor $binArray[$j]
    $binArray[$j] = [math]::truncate($k / 24)
    $k = $k % 24
    }
    $productKey = $charsArray[$k] + $productKey
    If (($i % 5 -eq 0) -and ($i -ne 0)) {
    $productKey = “-” + $productKey
    }
    }
    $win32os = Get-WmiObject Win32_OperatingSystem -computer $target
    $obj = New-Object Object
    $obj | Add-Member Noteproperty Computer -value $target
    $obj | Add-Member Noteproperty OSCaption -value $win32os.Caption
    $obj | Add-Member Noteproperty OSArch -value $win32os.OSArchitecture
    $obj | Add-Member Noteproperty SQLver -value $SQLver
    $obj | Add-Member Noteproperty SQLedition -value $SQLedition
    $obj | Add-Member Noteproperty ProductKey -value $productkey
    $obj
    }
    }

    O mesmo eu obtive através deste link, disponível nos fóruns:
    SQL Server License key checking

    Este eu já havia usado eu um ambiente de teste.....


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    terça-feira, 14 de janeiro de 2020 18:45
    Moderador
  • Dyego,

    Nossa, eu testei aqui na minha máquina e apresentou as informações.

    Bom, tem um outro exemplo de código via PowerShell, compartilhado nos fóruns, neste link:
    How to find out existing SQL Product Key and Replace

    function GetSQLKey {
    ## function to retrieve the license key of a SQL 2008 Server.
         param ($targets = ".")
        $hklm = 2147483650
        $regPath = "SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\Setup"
        $regValue1 = "DigitalProductId"
        $regValue2 = "PatchLevel"
        $regValue3 = "Edition"
        Foreach ($target in $targets) {
            $productKey = $null
            $win32os = $null
            $wmi = [WMIClass]"\\$target\root\default:stdRegProv"
            $data = $wmi.GetBinaryValue($hklm,$regPath,$regValue1)
            [string]$SQLver = $wmi.GetstringValue($hklm,$regPath,$regValue2).svalue
            [string]$SQLedition = $wmi.GetstringValue($hklm,$regPath,$regValue3).svalue
            $binArray = ($data.uValue)[52..66]
            $charsArray = "B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9"
            ## decrypt base24 encoded binary data
            For ($i = 24; $i -ge 0; $i--) {
                $k = 0
                For ($j = 14; $j -ge 0; $j--) {
                    $k = $k * 256 -bxor $binArray[$j]
                    $binArray[$j] = [math]::truncate($k / 24)
                    $k = $k % 24
             }
                $productKey = $charsArray[$k] + $productKey
                If (($i % 5 -eq 0) -and ($i -ne 0)) {
                    $productKey = "-" + $productKey
                }
            }
            $win32os = Get-WmiObject Win32_OperatingSystem -computer $target
            $obj = New-Object Object
            $obj | Add-Member Noteproperty Computer -value $target
            $obj | Add-Member Noteproperty OSCaption -value $win32os.Caption
            $obj | Add-Member Noteproperty OSArch -value $win32os.OSArchitecture
            $obj | Add-Member Noteproperty SQLver -value $SQLver
            $obj | Add-Member Not

    Não testei....

    Tem um exemplo que você poderia tentar utilizar que seria através da suíte de ferramentas DBATools, inclusive um dos maiores profissionais de SQL Server do mundo o Steve Jones tem um post sobre este exemplo:

    https://voiceofthedba.com/2017/02/03/get-your-sql-server-product-key-with-powershell-dbatools/


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]




    terça-feira, 14 de janeiro de 2020 18:48
    Moderador
  • SQL Server detected 4 sockets with 1 cores per socket and 1 logical processors per socket, 4 total logical processors; using 4 logical processors based on SQL Server licensing.

    4 sockets?! É uma máquina virtual?


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz sexta-feira, 17 de janeiro de 2020 21:59
    sexta-feira, 17 de janeiro de 2020 21:51