如何关闭SQL 2016的遥测功能

Slo*_*ire 21 sql-server

安装SQL 2016会自动打开所有"CEIP"或客户体验改善计划元素.这些元素向Microsoft报告安装体验的各个方面以及功能使用情况.我想把它关掉,因为无论如何它都被我们的防火墙阻挡了,我不需要头疼.

Slo*_*ire 27

事实证明,这样做似乎很容易.设置以下注册表项:

HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\130\CustomerFeedback=0
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\130\EnableErrorReporting=0
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSAS13.TESTINSTANCE\CPE\CustomerFeedback=0
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSAS13.TESTINSTANCE\CPE\EnableErrorReporting=0
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSRS13.TESTINSTANCE\CPE\CustomerFeedback=0
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSRS13.TESTINSTANCE\CPE\EnableErrorReporting=0
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSSQL13.TESTINSTANCE\CPE\CustomerFeedback=0
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSSQL13.TESTINSTANCE\CPE\EnableErrorReporting=0
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Microsoft SQL Server\130\CustomerFeedback=0
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Microsoft SQL Server\130\EnableErrorReporting=0
Run Code Online (Sandbox Code Playgroud)

如果任何键不存在,那就没问题,因为你显然没有安装该功能.

禁用以下服务:

SQL Analysis Services CEIP
SQL Server CEIP service
SQL Server Integration Services CEIP service 13.0
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.不知道为什么,但三个遥测服务在我们的服务器上使用了很多内存...... (2认同)
  • 如果这些特定的键不存在,则可能您安装了另一个版本,并且这些键仍在附近(例如SQL Server 2017而不是2016,版本号为140而不是130)。 (2认同)

小智 16

这是一个Powershell脚本,它将禁用所有遥测CEIP服务,并将更新注册表以禁用CustomerFeedback和EnableErrorReporting:

Get-Service | 
    Where-Object { $_.Name -like '*telemetry*' -or $_.DisplayName -like '*CEIP*' } | 
    ForEach-Object { 
        $servicename = $_.Name; 
        $displayname = $_.DisplayName; 
        Set-Service -Name $servicename  -StartupType Disabled 
        $serviceinfo = Get-Service -Name $servicename 
        $startup = $serviceinfo.StartType
        Write-Host "$servicename : $startup : $displayname";  
    }

Set-Location "HKLM:\"
$sqlentries = @( "\Software\Microsoft\Microsoft SQL Server\", "\Software\Wow6432Node\Microsoft\Microsoft SQL Server\" ) 
Get-ChildItem -Path $sqlentries -Recurse |
    ForEach-Object {
        $keypath = $_.Name
        (Get-ItemProperty -Path $keypath).PSObject.Properties |
             Where-Object { $_.Name -eq "CustomerFeedback" -or $_.Name -eq "EnableErrorReporting" } |
             ForEach-Object {
                $itemporpertyname = $_.Name
                $olditemporpertyvalue = Get-ItemPropertyValue -Path $keypath -Name $itemporpertyname
                Set-ItemProperty  -Path $keypath -Name $itemporpertyname -Value 0
                $newitemporpertyvalue = Get-ItemPropertyValue -Path $keypath -Name $itemporpertyname
                Write-Host "$keypath.$itemporpertyname = $olditemporpertyvalue --> $newitemporpertyvalue" 
             }
    }
Run Code Online (Sandbox Code Playgroud)

  • @ScottRFrost 是的,它会的。SQL 2017 在注册表下为 14 或 140,但它仍然通过它们递归并设置它们 (2认同)

小智 5

您还可以使用Microsoft SQL Server 2016附带的“错误和使用情况报告设置”应用程序。

文章显示了漂亮的图片细节。可以省去编辑注册表的胖手指。在我的测试中,它不需要重启服务,就可以了。