Spanner 错误代码和错误处理

本页面介绍了 Spanner 错误代码和建议的操作, 处理这些错误。Google API(包括 Spanner)使用 由 google.rpc.Code 定义的规范错误代码。

当 Spanner 请求成功时,API 会返回一个 HTTP 200 OK 状态代码以及响应正文中请求的数据。

当请求失败时,Spanner API 会返回 HTTP 4xx5xx 状态代码,一般标识故障以及 针对导致错误引发的 错误。

响应对象包含单个字段 error,其值包含以下元素:

元素 说明
code HTTP 状态代码,一般用于标识请求失败。
message 有关请求失败的具体信息。
status Google API 的规范错误代码 (google.rpc.Code)。错误代码中列出了 Spanner API 可能返回的代码。

如果采用 application/x-protobuf 内容类型发出的请求导致错误,则将返回一个序列化的 google.rpc.Status 消息作为载荷。

错误代码

要对错误进行分类,推荐的方式是检查 规范错误代码 (google.rpc.Code)。在 JSON 错误中,此代码显示为 (在 status 字段中)。在 application/x-protobuf 错误中,此代码出现在 code 字段中。

错误代码 说明 建议采取的操作
ABORTED 操作已取消,通常是由于定序器检查失败或事务中止等并发问题。表示该请求与另一请求发生冲突。 对于非事务性提交:
重试该请求或设计实体结构以减少争用。

对于随事务性提交而发出的请求:
重试整个事务或设计实体结构以减少争用。
ALREADY_EXISTS 客户端尝试创建的实体已存在(例如,插入具有现有主键的行)。 在解决问题之前,请勿重试。
CANCELLED 操作已取消(通常是被调用者取消)。 重试该操作。
DEADLINE_EXCEEDED 截止期限已过,但操作尚未完成。 调查截止日期是否足够。请使用与回复有用的实际时间相对应的截止时间。请注意,对于更改系统状态的操作,即使操作已成功完成,也可能会返回错误。

如需查看相关提示,请参阅对“在截止日期已过”错误进行问题排查
FAILED_PRECONDITION 由于未满足请求的前提条件,操作被拒绝。错误响应中的消息字段提供了未满足的先决条件的相关信息。例如,从超过时间戳过时时间上限的时间戳中读取或查询。 在解决问题之前,请勿重试。
INTERNAL 服务器返回了一个错误。底层系统所期望的一些不变量已损坏。 除非您了解错误的具体情况和原因,否则请勿重试。
INVALID_ARGUMENT 客户端指定的值无效。错误响应中的消息字段提供了无效值的相关信息。 在解决问题之前,请勿重试。
NOT_FOUND 表示某些请求的实体(例如更新实体或查询表或列)不存在。 在解决问题之前,请勿重试。
OUT_OF_RANGE 尝试执行的操作已超出有效范围。 在解决问题之前,请勿重试。
PERMISSION_DENIED 该用户无权发出请求。 在解决问题之前,请勿重试。
RESOURCE_EXHAUSTED 部分资源已用尽。这可能是因为项目超出了其配额,或者整个文件系统空间不足。 确认您没有超出 Spanner 或项目配额。如果您超出配额,请先解决问题,再重试。

否则,请使用指数退避算法重试。
UNAUTHENTICATED 请求没有相应操作的有效身份验证凭据。 在解决问题之前,请勿重试。
UNAVAILABLE 服务器不可用。 使用指数退避算法重试。请注意,重试执行非幂等操作并非总是安全的。
UNIMPLEMENTED 操作在此服务中未实现或不受支持/未启用。 在解决问题之前,请勿重试。
UNKNOWN 服务器返回了未知错误。如果 API 未返回足够错误信息,则引发的错误可能会转换为此错误。 检查您的请求是否安全。然后,使用指数退避算法重试。