1. 前言
SQL Server是一个重要的数据库管理系统,由于各种原因可能需要卸载重新安装或者彻底删除,但是仅仅卸载掉SQL Server并不足以实现彻底卸载或者删除。因为SQL Server和Windows系统是密切相关的,只卸载 SQL Server 并不能删除与其相关的注册表项、服务、用户和组等信息。因此,本文将介绍如何在 Windows 系统中彻底删除 SQL Server 的注册表项,包括服务、密码、组、实例名等等。
2. 删除SQL Server注册表
2.1. 手动删除
手动删除就是依次去删除 SQL Server 相关的注册表项,直到全部删完,可以采用下面的方式:
查找 SQL Server 所在的注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server
删除 SQL Server 所在的注册表表项
查找 SQL Server 的实例名:在注册表键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL
中,查找 SQL Server 所安装的所有实例名,删除之
查找 SQL Server 的服务名,在注册表键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
中查找所有 SQL Server 服务名,删除所有有关项
删除 SQL Server 和 Windows 用户组的关联项,在注册表键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
中,在这个路径下如果没有 SQL 相关用户则不需要操作,有则删除。
虽然可以手动删除,但是手动删除繁琐且容易出错,不适合大规模、重复性删除操作。本文后续将介绍如何使用PowerShell脚本自动删除。
2.2. PowerShell脚本删除
使用 PowerShell 脚本可以实现自动删除 SQL Server 注册表项。下面提供一个简单的脚本:
#定义函数
function uninstall-SQLServer($InstanceName){
#删除服务
get-service -Name MSSQL\$InstanceName\* | stop-service
get-service -Name MSSQL\$InstanceName\* | remove-service
#删除注册表键
$reg_keyMSSQL = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server"
if(Test-Path $reg_keyMSSQL){
Remove-Item $reg_keyMSSQL -recurse -force
}
#删除实例名
$reg_keyInstanceName = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"
if(Test-Path $reg_keyInstanceName){
$instanceList = Get-ChildItem -Path $reg_keyInstanceName
foreach($instance in $instanceList){
Remove-Item "$reg_keyInstanceName\$($instance.PSChildName)" -recurse -force
}
}
#删除注册表服务
$reg_keySQLServer = "HKLM:\SYSTEM\CurrentControlSet\Services"
if(Test-Path $reg_keySQLServer){
$services = Get-ChildItem -Path $reg_keySQLServer | where{$_.PSChildName -like "MSSQL`*$InstanceName*"}
foreach($service in $services){
$serviceName = $service.PSChildName
Stop-Service $serviceName -Force
Remove-Item "$reg_keySQLServer\$serviceName" -recurse -force
}
}
#删除系统组
$reg_keyGroups = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList\"
if(Test-Path $reg_keyGroups){
$groups = Get-ChildItem -Path $reg_keyGroups | where{$_.PSChildName -like "MSSQL`*$InstanceName*"}
foreach($group in $groups){
Remove-Item "$reg_keyGroups\$($group.PSChildName)" -recurse -force
}
}
}
#卸载指定实例
uninstall-SQLServer "InstanceName"
使用上述脚本之前,需要先安装好 PowerShell 版本,对于 Windows 7, 安装方法是下载 Windows Management Framework 3.0。安装 PowerShell 4.0 或 5.0 对应的WMF就行,这样就可以使用 PowerShell 命令行进行注册表项删除操作了,使用方法见上面的代码注释。
2.3. 总结
本文介绍了手动删除 SQL Server 注册表项的方法以及使用 PowerShell 自动删除的方法。手动删除繁琐且容易出错,不适合大规模、重复性删除操作,建议使用 PowerShell 脚本进行自动删除。