针对 Amazon RDS Custom for SQL Server 排查数据库的问题 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

针对 Amazon RDS Custom for SQL Server 排查数据库的问题

RDS Custom 的责任共担模型提供了操作系统外壳级别的访问权限和数据库管理员访问权限。RDS Custom 会在您的账户中运行资源,与 Amazon RDS 不同,因为后者会在系统账户中运行资源。访问权限更多,责任也更大。在下面的各个部分中,您可以了解如何排查 Amazon RDS Custom for SQL Server 数据库实例的问题。

注意

本节介绍如何排查 RDS Custom for SQL Server 的问题。有关排查 RDS Custom for Oracle 的问题,请参阅针对 Amazon RDS Custom for Oracle 排查数据库问题

查看 RDS Custom 事件

对于 RDS Custom 和 Amazon RDS 数据库实例而言,查看事件的流程是相同的。有关更多信息,请参阅查看 Amazon RDS 事件

要使用 Amazon CLI 查看 RDS Custom 事件通知,请使用 describe-events 命令。RDS Custom 推出了几项新事件。事件类别与 Amazon RDS 的事件类别相同。有关事件列表,请参阅 Amazon RDS 事件类别和事件消息

以下示例检索指定 RDS Custom 数据库实例发生的事件的详细信息。

aws rds describe-events \ --source-identifier my-custom-instance \ --source-type db-instance

订阅 RDS Custom 事件

对于 RDS Custom 和 Amazon RDS 数据库实例而言,订阅事件的流程是相同的。有关更多信息,请参阅订阅 Amazon RDS 事件通知

要使用 CLI 订阅 RDS Custom 事件通知,请使用 create-event-subscription 命令。包括以下必需参数:

  • --subscription-name

  • --sns-topic-arn

以下示例为当前的 Amazon 账户中的 RDS Custom 数据库实例创建了备份和恢复事件的订阅。您也可以将通知发送到 --sns-topic-arn 指定的 Amazon Simple Notification Service (Amazon SNS) 主题。

aws rds create-event-subscription \ --subscription-name my-instance-events \ --source-type db-instance \ --event-categories '["backup","recovery"]' \ --sns-topic-arn arn:aws:sns:us-east-1:123456789012:interesting-events

RDS Custom for SQL Server 的 CEV 错误故障排除

当您尝试创建 CEV 时,可能会失败。在这种情况下,RDS Custom 会发出 RDS-EVENT-0198 事件消息。有关查看 RDS 事件的更多信息,请参阅 Amazon RDS 事件类别和事件消息

以下信息可帮助您解决可能的原因。

消息 故障排除建议

Custom Engine Version creation expected a Sysprep’d AMI. Retry creation using a Sysprep’d AMI.

在您从 AMI 创建的 EC2 实例上运行 Sysprep。有关使用 Sysprep 准备 AMI 的更多信息,请参阅使用 Sysprep 创建标准化的 Amazon 机器映像(AMI)

EC2 Image permissions for image (AMI_ID) weren't found for customer (Customer_ID). Verify customer (Customer_ID) has valid permissions on the EC2 Image.

验证您用于创建的账户和配置文件对所选 AMI 的 create EC2 InstanceDescribe Images 具有所需的权限。

Failed to rebuild databases with server collation (collation name) due to missing setup.exe file for SQL Server.

确认 setup 文件在 C:\Program Files\Microsoft SQL Server\nnn\Setup Bootstrap\SQLnnnn\setup.exe 中可用。

Image (AMI_ID) doesn't exist in your account (ACCOUNT_ID). Verify (ACCOUNT_ID) is the owner of the EC2 image.

确保 AMI 存在于同一个客户账户中。

Image id (AMI_ID) isn't valid. Specify a valid image id, and try again.

AMI 的名称不正确。确保提供正确的 AMI ID。

Image (AMI_ID) operating system platform isn't supported. Specify a valid image, and try again.

选择支持的 AMI,该 AMI 具有 Windows Server 以及 SQL Server Enterprise、Standard 或 Web 版。从 EC2 Marketplace 选择具有以下使用情况操作代码之一的 AMI:

  • RunInstances:0102 - 含有 SQL Server Enterprise 的 Windows

  • RunInstances:0006 - 含有 SQL Server Standard 的 Windows

  • RunInstances:0202 - 有 SQL Server Web 的 Windows

SQL Server Web Edition isn't supported for creating a Custom Engine Version using Bring Your Own Media. Specify a valid image, and try again.

使用包含支持的 SQL Server 版本的 AMI。有关更多信息,请参阅RDS Custom for SQL Server CEV 的版本支持

The custom engine version can't be the same as the OEV engine version. Specify a valid CEV, and try again.

不支持经典 RDS Custom for SQL Server 引擎版本。例如,版本 15.00.4073.23.v1。使用支持的版本号。

The custom engine version isn't in an active state. Specify a valid CEV, and try again.

CEV 必须处于 AVAILABLE 状态才能完成操作。将 CEV 从 INACTIVE 修改为 AVAILABLE

The custom engine version isn't valid for an upgrade. Specify a valid CEV with an engine version greater or equal to (X), and try again.

目标 CEV 无效。检查对有效升级路径的要求。

The custom engine version isn't valid. Names can include only lowercase letters (a-z), dashes (-), underscores (_), and periods (.). Specify a valid CEV, and try again.

遵循所需的 CEV 命名约定。有关更多信息,请参阅RDS Custom for SQL Server CEV 的要求

The custom engine version isn't valid. Specify valid database engine version, and try again. Example: 15.00.4073.23-cev123.

提供了不支持的数据库引擎版本。使用支持的数据库引擎版本。

The expected architecture is (X) for image (AMI_ID), but architecture (Y) was found.

使用基于 x86_64 架构构建的 AMI。

The expected owner of image (AMI_ID) is customer account ID (ACCOUNT_ID), but owner (ACCOUNT_ID) was found.

从您拥有权限的 AMI 创建 EC2 实例。在 EC2 实例上运行 Sysprep 以创建和保存基本映像。

The expected platform is (X) for image (AMI_ID), but platform (Y) was found.

使用在 Windows 平台上构建的 AMI。

The expected root device type is (X) for image %s, but root device type (Y) was found.

使用 EBS 设备类型创建 AMI。

The expected SQL Server edition is (X), but (Y) was found.

选择支持的 AMI,该 AMI 具有 Windows Server 以及 SQL Server Enterprise、Standard 或 Web 版。从 EC2 Marketplace 选择具有以下使用情况操作代码之一的 AMI:

  • RunInstances:0102 - 含有 SQL Server Enterprise 的 Windows

  • RunInstances:0006 - 含有 SQL Server Standard 的 Windows

  • RunInstances:0202 - 含有 SQL Server Web 的 Windows

The expected state is (X) for image (AMI_ID), but the following state was found: (Y).

确保 AMI 的状态为 AVAILABLE

The provided Windows OS name (X) isn’t valid. Make sure the OS is one of the following: (Y).

使用支持的 Windows 操作系统。

Unable to find bootstrap log file in path.

确认日志文件在 C:\Program Files\Microsoft SQL Server\nnn\Setup Bootstrap\Log\Summary.txt 中可用。

RDS expected a Windows build version greater than or equal to (X), but found version (Y)..

使用操作系统编译版本最低为 14393 的 AMI。

RDS expected a Windows major version greater than or equal to (X), but found version (Y)..

使用最低操作系统主版本为 10.0 或更高版本的 AMI。

修复 RDS Custom for SQL Server 中不支持的配置

由于责任共担模式,您应负责修复导致 RDS Custom for SQL Server 数据库实例进入 unsupported-configuration 状态的配置问题。如果问题与 Amazon 基础设施有关,则您可以使用控制台或 Amazon CLI 修复该问题。如果问题与操作系统或数据库配置有关,则您可以登录到主机进行修复。

注意

本节介绍如何修复 RDS Custom for SQL Server 中不支持的配置。有关 RDS Custom for Oracle 的信息,请参阅修复 RDS Custom for Oracle 中不支持的配置

在下表中,您可以找到支持外围所发送的通知和事件以及如何修复这些问题的说明。这些通知和支持外围可能会更改。有关支持外围的背景,请参阅RDS Custom 支持外围。有关事件描述,请参阅Amazon RDS 事件类别和事件消息

事件代码 配置区域 RDS 事件消息 验证过程

SP-S0000

手动不支持的配置

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:X

要解决此问题,请创建支持案例。

Amazon 资源(基础设施)

SP-S1001

EC2 实例状态

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:底层 EC2 实例 %s 已停止,但未停止 RDS 实例。您可以通过启动底层 EC2 实例并确保已附加二进制和数据卷来解决此问题。如果您打算停止 RDS 实例,请先确保底层 EC2 实例处于可用状态,然后使用 RDS 控制台或 CLI 停止 RDS 实例。

要检查数据库实例的状态,请使用控制台或运行以下 Amazon CLI 命令:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep DBInstanceStatus

SP-S1002

EC2 实例状态

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:RDS 数据库实例状态设置为 STOPPED,但底层 EC2 实例 %s 已启动。您可以通过停止底层 EC2 实例来解决此问题。如果您打算启动 RDS 实例,请使用控制台或 CLI。

使用 Amazon CLI 命令检查数据库实例的状态:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep DBInstanceStatus

您还可以使用 EC2 控制台检查 EC2 实例的状态。

要启动数据库实例,请使用控制台或运行以下 Amazon CLI 命令:

aws rds start-db-instance \ --db-instance-identifier db-instance-name

SP-S1003

EC2 实例类

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:EC2 主机的预期和配置的数据库实例类别不匹配。您可以通过将数据库实例类修改为其原始类的类型来解决此问题。

使用以下 CLI 命令可检查预期的数据库实例类:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep DBInstanceClass

SP-S1004

无法访问 EBS 存储卷

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:与 EC2 实例关联的原始 EBS 存储卷 %s 目前无法访问。

SP-S1005

EBS 存储卷已分离

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:未连接原始 EBS 存储卷“volume-id”。您可以通过附加与 EC2 实例关联的 EBS 卷来解决此问题。

重新附加 EBS 卷后,使用以下 CLI 命令检查 EBS 卷“volume-id”是否已正确附加到 RDS 实例:

aws ec2 describe-volumes \ --volume-ids volume-id |grep InstanceId

SP-S1006

EBS 存储卷大小

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:EBS 存储卷“volume-id”的预期设置和配置设置不匹配。卷大小已在 EC2 级别从其原始值 [%s] 手动更改。要解决此问题,请创建支持案例。

使用以下 CLI 命令比较 EBS 卷“volume-id”详细信息和 RDS 实例详细信息的卷大小:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep AllocatedStorage

使用以下 CLI 命令查看实际分配的卷大小:

aws ec2 describe-volumes \ --volume-ids |grep Size

SP-S1007

EBS 存储卷配置

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:EBS 存储卷“volume-id”的预期设置和配置设置不匹配。您可以通过在 EC2 级别将 EBS 存储卷配置 [IOPS、吞吐量、卷类型] 修改为其原始值 [IOPS:%s,吞吐量:%s,卷类型:%s] 来解决此问题。如果将来需要修改存储,请使用 RDS 控制台或 CLI。卷大小也已在 EC2 级别从其原始值 [%s] 手动更改。要解决此问题,请创建支持案例。

使用以下 CLI 命令比较 EBS 卷“volume-id”详细信息和 RDS 实例详细信息的卷类型。确保 EBS 级别的值与 RDS 级别的值相匹配:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep StorageType

要获取 RDS 级别的存储吞吐量的预期值,请执行以下操作:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep StorageThroughput

要获取 RDS 级别的卷 IOPS 的预期值,请执行以下操作:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep Iops

要获取 EC2 级别的当前存储类型,请执行以下操作:

aws ec2 describe-volumes \ --volume-ids |grep VolumeType

要获取 EC2 级别的存储吞吐量的当前值,请执行以下操作:

aws ec2 describe-volumes \ --volume-ids |grep Throughput

要获取 EC2 级别的卷 IOPS 的当前值,请执行以下操作:

aws ec2 describe-volumes \ --volume-ids |grep Iops

SP-S1008

EBS 存储卷大小和配置

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:EBS 存储卷“volume-id”的预期设置和配置设置不匹配。您可以通过在 EC2 级别将 EBS 存储卷配置 [IOPS、吞吐量、卷类型] 修改为其原始值 [IOPS:%s,吞吐量:%s,卷类型:%s] 来解决此问题。如果将来需要修改存储,请使用 RDS 控制台或 CLI。卷大小也已在 EC2 级别从其原始值 [%s] 手动更改。要解决此问题,请创建支持案例。

使用以下 CLI 命令比较 EBS 卷“volume-id”详细信息和 RDS 实例详细信息的卷类型。确保 EBS 级别的值与 RDS 级别的值相匹配:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep StorageType

要获取 RDS 级别的存储吞吐量的预期值,请执行以下操作:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep StorageThroughput

要获取 RDS 级别的卷 IOPS 的预期值,请执行以下操作:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep Iops

要获取 EC2 级别的当前存储类型,请执行以下操作:

aws ec2 describe-volumes \ --volume-ids |grep VolumeType

要获取 EC2 级别的存储吞吐量的当前值,请执行以下操作:

aws ec2 describe-volumes \ --volume-ids |grep Throughput

要获取 EC2 级别的卷 IOPS 的当前值,请执行以下操作:

aws ec2 describe-volumes \ --volume-ids |grep Iops

要获得预期的分配卷大小,请执行以下操作:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep AllocatedStorage

要获取实际的分配卷大小,请执行以下操作:

aws ec2 describe-volumes \ --volume-ids |grep Size

SP-S1009

SQS 权限

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:缺少 IAM 实例配置文件的 Amazon Simple Queue Service(SQS)权限。您可以通过确保与主机关联的 IAM 配置文件具有以下权限来解决此问题:["SQS:SendMessage"、"SQS:ReceiveMessage"、"SQS:DeleteMessage"、"SQS:GetQueueUrl"]。

SP-S1010

SQS VPC 端点

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:VPC 端点策略阻止了 Amazon Simple Queue Service(SQS)操作。您可以通过修改 VPC 端点策略以允许所需的 SQS 操作来解决此问题。

操作系统

SP-S2001

SQL 服务状态

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:SQL Server 服务未启动。您可以通过在主机上重启 SQL Server 服务来解决此问题。如果此数据库实例为多可用区数据库实例且重启失败,请停止并启动主机以发起失效转移。

SP-S2002

RDS Custom 代理状态

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:RDS Custom 代理服务未安装或无法启动。要解决此问题,可以查看 Windows 事件日志以确定服务无法启动的原因,然后采取适当的步骤来修复问题。如需其它帮助,请创建支持案例。

登录到主机并确保 RDS Custom 代理正在运行。

您可以使用以下命令来查看代理状态。

$name = "RDSCustomAgent" $service = Get-Service $name Write-Host $service.Status

如果状态不是 Running,则可使用以下命令启动该服务:

Start-Service $name

如果代理无法启动,请检查 Windows 事件以了解其无法启动的原因。代理需要 Windows 用户才能启动该服务。确保 Windows 用户存在并且具有运行该服务的权限。

SP-S2003

SSM 代理状态

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:无法访问 Amazon SSM 代理服务。您可以通过使用 Get-Service AmazonSSMAgent PowerShell 命令检查服务状态或使用 Start-Service AmazonSSMAgent 启动服务来解决此问题。确保允许发往 ssmssmmessagesec2messages 区域端点的 HTTPS(端口 443)出站流量。

有关更多信息,请参阅 SSM 代理故障排除

要对 SSM 端点进行故障排除,请参阅无法连接到 SSM 端点使用 ssm-cli 排查托管式节点可用性问题

SP-S2004

RDS Custom 代理登录

SP-S2004 RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:SQL 登录名 "$HOSTNAME/RDSAgent” 出现意外问题。要解决此问题,请创建支持案例。

SP-S2005

时区

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:Amazon EC2 实例 [%s] 上的时区已更改。您可以通过将时区修改回在实例创建期间指定的设置来解决此问题。如果您想创建具有特定时区的实例,请参阅 RDS Custom 文档。

运行 Get-Timezone PowerShell 命令以确认时区。

有关更多信息,请参阅RDS Custom for SQL Server 数据库实例的本地时区

SP-S2006

高可用性软件解决方案版本

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:当前实例的高可用性软件解决方案与预期版本不同。要解决此问题,请创建支持案例。

SP-S2007

高可用性软件解决方案配置

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:实例 %s 上的高可用性软件解决方案的配置设置已修改为意外的值。要解决此问题,请重启 EC2 实例。当您重启 EC2 实例时,它会自动将设置更新为高可用性软件解决方案所需的配置。

数据库

SP-S3001

SQL Server 共享内存协议

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:SQL Server 共享内存协议已禁用。您可以通过在 SQL Server 配置管理器中启用共享内存协议来解决此问题。

您可以通过检查 SQL Server 配置管理器 > SQL Server 网络配置 > MSSQLSERVER 的协议> 共享内存为“已启用”来验证这一点。启用协议后,重启 SQL Server 进程。

SP-S3002

服务主密钥

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:RDS Automation 无法将服务主密钥(SMK)的备份作为新 SMK 生成的一部分。要解决此问题,请创建支持案例。

SP-S3003

服务主密钥

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:与服务主密钥(SMK)相关的元数据缺失或不完整。要解决此问题,请创建支持案例。

SP-S3004

数据库引擎版本

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:当前的 SQL Server 版本与预期的 SQL Server 版本不匹配:[%s] 和版本:[%s]。您可以通过确保当前的 SQL Server 版本与您在创建或上次修改数据库实例时指定的版本相匹配来解决此问题。

运行以下查询可获取 SQL 版本:

select @@version

运行以下 Amazon CLI 命令以获取 RDS SQL 引擎版本:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep Engine

SP-S3005

数据库引擎版本

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:当前的 SQL Server 版本与预期的 SQL Server 版本不匹配:[%s]。您可以通过确保当前的 SQL Server 版本与您在创建实例时指定的版本相匹配来解决此问题。

运行以下查询可获取 SQL 版本:

select @@version

运行以下 Amazon CLI 命令以获取 RDS SQL 引擎版本:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep Engine

SP-S3006

数据库引擎版本

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:当前 SQL Server 版本与预期的 SQL Server 版本不匹配:%s。您可以通过确保当前的 SQL Server 版本与您在创建或上次修改数据库实例时指定的版本相匹配来解决此问题。如需进一步帮助,请创建支持案例。

运行以下查询可获取 SQL 版本:

select @@version

运行以下 Amazon CLI 命令以获取 RDS SQL 引擎版本:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep EngineVersion

SP-S3007

数据库文件位置

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是:数据库文件是在 D:\ 驱动器之外配置的。您可以通过确保所有数据库文件(包括 ROW、LOG、FILESTREAM 等...)都存储在 D:\ 驱动器上来解决此问题。

运行以下查询以列出不在默认路径中的数据库文件的位置:

USE master; SELECT physical_name as files_not_in_default_path FROM sys.master_files WHERE SUBSTRING(physical_name,1,3)!='D:\';

在 RDS Custom for SQL Server 中排查 Storage-Full 问题

RDS Custom 会监控 RDS Custom for SQL Server 数据库实例的根(C:)和数据(D:)卷上的可用空间。当任一卷的可用磁盘空间低于 500 MiB 时,RDS Custom 会将实例状态更改为 Storage-Full。要扩展实例存储,请参阅修改 RDS Custom for SQL Server 数据库实例的存储

注意

扩展存储空间后,Storage-Full 中的实例可能需要花费 30 分钟时间来消除此问题。