---
title: 刷新 location cache 的应急方法-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 刷新 location cache 的应急方法相关的常见问题和使用技巧，帮助您快速解决 刷新 location cache 的应急方法的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# 刷新 location cache 的应急方法

更新时间：2024-01-16 11:56

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x 内容类型：TechNote  

## 问题描述

OceanBase 数据库集群存在 location cache 刷新异常, 日志信息如下:

```shell
WARN [SHARE.PT] init_batch_rpc_renew_struct (ob_partition_location_cache.cpp:1488) [xxxxx][xxxxx][xxxxx-xxxxx] [lt=3] [dc=0] fail to check is local server(ret=-4018, addr="xx.xx.xx.xx:xxxx")

```

## 适用版本

OceanBase 数据库 V2.x 和 V3.x 版本。

## 问题原因

集群中的租户曾经通过 Locality 变更下掉 R 副本，而且后续删除了 R 副本所在的 OBServer/zone，在切主（运维触发或者故障触发）等场景下，可能会触发批量 location_cache 刷新的逻辑，但由于 OceanBase 产品 BUG，批量刷新 location_cache 时会误向已下线的R副本持续发 RPC，且在报错后不触发其他刷新方式，进而导致无法成功获取 location 信息。

## 解决方法

应急方法如下：

1. 直连集群所有 OBServer 2881 端口，执行刷新 location cache 命令。

   ```shell
   obclient> ALTER SYSTEM flush location cache;

   ```
 2. 如果低版本 OBServer 不支持 `flush location cache` 命令，使用手动刷新方式。

   ```shell
   SELECT concat("SELECT * FROM  __all_virtual_proxy_schema WHERE tenant_name='", t.tenant_name,"' and database_name='", d.database_name,"' AND table_name='", tb.table_name,"' AND partition_id=", l.partition_id,";")  FROM __all_tenant as t JOIN __all_virtual_table as tb ON t.tenant_id = tb.tenant_id JOIN __all_virtual_database as d ON tb.tenant_id = d.tenant_id AND tb.database_id = d.database_id JOIN (SELECT tenant_id, table_id, partition_id FROM  __all_virtual_meta_table GROUP BY tenant_id, table_id, partition_id) as l ON t.tenant_id = l.tenant_id AND tb.table_id = l.table_id;

   ```

   ```shell
   SELECT concat("SELECT * FROM __all_virtual_proxy_schema WHERE tenant_name='", t.tenant_name,"' AND database_name='oceanbase' AND table_name='", tb.table_name,"' AND partition_id=", l.partition_id,";")  FROM  __all_tenant as t JOIN (SELECT table_id, table_name FROM __all_virtual_table WHERE tenant_id = 1 AND table_id & 0xffffffffff < 10000 UNION SELECT table_id, table_name FROM __all_virtual_core_all_table) as tb JOIN (SELECT tenant_id, table_id, partition_id FROM  __all_root_table GROUP BY tenant_id, table_id, partition_id) as l ON t.tenant_id = l.tenant_id AND (tb.table_id & 0xffffffffff = l.table_id & 0xffffffffff);

   ```

   执行上述两条语句生成待执行的 SQL 集合，在上述 SQL 集合上加上以下两条 SQL。

   ```shell
   SELECT * FROM __all_virtual_proxy_schema WHERE tenant_name = "sys" and database_name = "oceanbase" AND table_name = "__all_root_table"  AND partition_id = 0;

   ```

   ```shell
   SELECT * FROM __all_virtual_proxy_schema WHERE tenant_name = "sys" AND database_name = "oceanbase" AND table_name = "__all_core_table" and partition_id = 0;

   ```

   用系统租户登录，直连集群所有 OBServer 2881 端口执行上述 SQL 集合。
 3. 重启 OBServer 整个集群。

上一篇

[Location cache 刷新机制](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000254502)

下一篇

[sysbench 连接 ODP 测试时，进行故障切换时断连](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000004134814) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
