SQLServer 错误 故障 处理 修复 支持远程
详细信息
Attribute | 值 |
---|---|
产品名称 | SQL Server |
事件 ID | 15581 |
事件源 | MSSQLSERVER |
组件 | SQLEngine |
符号名称 | SEC_NODBMASTERKEYERR |
消息正文 | 在执行此操作之前,请在数据库中创建一个主密钥或在会话中打开该主密钥。 |
说明
当SQL Server无法恢复启用了透明数据加密的数据库时,将引发错误 15581, (TDE) 。 SQL Server错误日志中记录了如下所示的错误消息
2020-01-14 22:16:26.47 spid20s Error:15581, Severity:16,状态:3.
2020-01-14 22:16:26.47 spid20s 在执行此操作之前,请在数据库中创建一个主密钥或在会话中打开该主密钥。
可能的原因
当运行以下命令时,如果删除了 master 数据库中数据库主密钥的服务主密钥加密,则会出现此问题:
Use master
go
alter master key drop encryption by service master key
服务主密钥用于对数据库主密钥使用的证书进行加密。 对使用启用了 TDE 的数据库的任何尝试都需要访问 master 数据库中的数据库主密钥。 必须使用 OPEN MASTER KEY (Transact-SQL) 语句,并对需要访问主密钥的每个会话使用一个密码,来打开未使用服务主密钥进行加密的主密钥。 由于此命令不能在系统会话上运行,因此不能在启用了 TDE 的数据库上完成恢复。
用户操作
若要解决此问题,请启用主密钥的自动解密。 为此,请运行以下命令:
Use master
go
open master key DECRYPTION BY PASSWORD = 'password'
alter master key add encryption by service master key
使用以下查询来确定是否已为 master 数据库禁用服务主密钥对主密钥的自动解密:
select is_master_key_encrypted_by_server from sys.databases where name = 'master'
如果此查询返回的值为 0,则禁用了服务主密钥对主密钥的自动解密。
详细信息
在某些情况下,SQL Server 实例可能看起来无响应。 如果查询 sys.dm_exec_requests
动态管理视图,你会注意到 LogWriter
线程和正在执行 DML 操作的其他线程正在无限期等待,并显示 WRITELOG wait_type。 其他会话尝试获取锁时也可能正在等待。