---
title: "obd 常用命令 | OceanBase 文档中心"
description: obd 常用命令 本文介绍使用 obd 部署及管理 OceanBase 集群时的常用命令。 说明 本文仅介绍部分常用命令，obd 命令的详细介绍可参见官网 《OceanBase 安装部署工具》 文档 obd 命令 章节。 快速导航 操作类型 功能 常用命令 说明 初始化 用户初始化 obd host user ini…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库集中式版 - V 4.4.2

# obd 常用命令

更新时间：2026-06-26 09:52:49

[编辑](https://github.com/oceanbase/oceanbase-database-standalone/edit/V4.4.2/zh-CN/800.common-tools/100.obd-commands.md)  

本文介绍使用 obd 部署及管理 OceanBase 集群时的常用命令。

#### 说明

本文仅介绍部分常用命令，obd 命令的详细介绍可参见官网[《OceanBase 安装部署工具》](https://www.oceanbase.com/docs/obd-cn)文档 **obd 命令** 章节。

## 快速导航

| 操作类型 | 功能 | 常用命令 | 说明 |
| --- | --- | --- | --- |
| 初始化 | [用户初始化](#用户初始化) | `obd host user init` | 初始化指定机器中的指定用户，当指定用户不存在时会自动创建对应用户并初始化。 |
| [主机初始化](#主机初始化) | `obd host precheck` + `obd host init` | 查看和初始化指定机器，`obd host precheck` 用于查看指定机器是否满足部署要求，`obd host init` 用于按照部署要求初始化指定机器。 |
| 集群部署 | [图形化界面部署](#图形化界面部署) | `obd web` | 启动图形化界面进行部署。 |
| [配置文件部署](#配置文件部署) | `obd cluster deploy` + `obd cluster start` | 在 yaml 文件中配置集群参数，通过 `obd cluster deploy` 命令部署后，执行 `obd cluster start` 命令启动集群。 |
| 集群管理 | [查看集群详情](#查看集群详情) | `obd cluster display` | 查看集群详细信息，包含集群组件端口、状态，及组件访问信息。 |
| [启动集群](#启动集群) | `obd cluster start` | 启动集群，可选择启动整个集群，也可通过 `-c` 选项启动指定组件。 |
| [停止集群](#停止集群) | `obd cluster stop` | 停止集群，可选择停止整个集群，也可通过 `-c` 选项停止指定组件。 |
| [重启集群](#重启集群) | `obd cluster restart` | 重启集群，可选择重启整个集群，也可通过 `-c` 选项重启指定组件。 |
| [修改集群配置](#修改集群配置) | `obd cluster edit-config` | 修改集群配置，OceanBase 数据库中有些配置是耦合的，请谨慎修改。 |
| [升级集群](#升级集群) | `obd cluster upgrade` | 升级集群，通过指定组件及目标版本对集群中的组件进行升级。 |
| [销毁集群](#销毁集群) | `obd cluster destroy` | 销毁集群，该命令会在停止 observer 进程的同时清除数据库文件。执行前请先确认集群已经不再使用，并且需要备份的数据已经完成备份。 |
| 租户管理 | [创建租户](#创建租户) | `obd cluster tenant create` | 创建租户，部署 OceanBase 集群之后，建议创建用户租户进行业务操作。sys 租户仅做集群管理使用，不适合在业务场景中使用。 |
| [创建备租户](#创建备租户) | `obd cluster tenant create-standby` | 创建备租户，物理备库是 OceanBase 数据库高可用解决方案的重要组成部分，可以为用户的关键应用提供高可用、数据保护、灾难恢复等重要特性。 |
| [切换主备租户同步方式](#切换主备租户同步方式) | `obd cluster tenant switch-log-source` | 将主备租户同步方式在 **基于网络** 和 **基于归档** 两种同步方式间切换。 |
| [角色切换](#角色切换) | - `obd cluster tenant switchover` - `obd cluster tenant failover` - `obd cluster tenant decouple` | 根据具体情况切换主备租户角色或解除租户主备关系。 |
| [删除租户](#删除租户) | `obd cluster tenant drop` | 删除租户，若待删除租户存在备租户，租户删除后备租户将无法使用。 |
| 备份恢复 | [租户备份](#租户备份) | - `obd cluster tenant set-backup-config` - `obd cluster tenant backup` - `obd cluster tenant backup-show` - `obd cluster tenant backup-cancel` | 命令依次用于配置备份信息（`set-backup-config`）、执行备份（`backup`）、查看备份任务（`backup-show`），以及取消备份任务（`backup-cancel`）。 |
| [租户恢复](#租户恢复) | - `obd cluster tenant restore` - `obd cluster tenant restore-show` - `obd cluster tenant restore-cancel` | 命令依次用于执行恢复（`restore`）、查看恢复任务（`restore-show`），以及取消恢复任务（`restore-cancel`）。 |
| 许可证 | [加载许可证](#指定许可证) | `obd license load` | 为指定集群注册许可证。 |
| [查看许可证](#查看许可证) | `obd license show` | 查看指定集群的许可证信息。 |

## 初始化

### 用户初始化

obd 自 V3.5.0 起新增 `obd host user init` 命令，支持通过命令初始化用户。

```shell
[admin@test001 ~]$ obd host user init -u test --host=10.10.10.1 -p ********

```

此处以初始化 `10.10.10.1` 机器上的 `test` 用户，并修改 `test` 用户的登录密码（`-p`）为例，执行后会在指定机器上初始化指定用户，若 `test` 用户不存在会创建对应用户。初始化用户时会执行如下初始化设置：

- **设置 ulimit 参数**：修改系统资源限制参数，涉及修改的参数可参见官网《OceanBase 数据库》文档 [配置 limits.conf](https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000006076965)。创建用户成功后，可在目标机器上登录创建的用户执行 `ulimit -a` 命令查看配置是否生效。
 - **配置免密 sudo 权限**：为指定用户配置免密执行 sudo 命令的权限。

  #### 说明

  配置 sudo 免密是为了方便操作，您可在部署集群完成后手动去除 sudo 免密。
 - **启用密码登录**：确保用户可以通过密码方式登录系统。
 - **修改目录所有者**：若目标机器中存在 `/data/1` 和 `/data/log1` 目录，将目录的所有者修改为指定的用户。

### 主机初始化

obd 自 V3.2.0 起新增 `obd host init` 命令，支持通过命令初始化部分主机内核参数。并于 V3.5.0 增强命令功能，支持关闭防火墙和 SELinux、调整内核参数等。

```shell
[admin@test001 ~]$ obd host init root 10.10.10.1 -u test -p ******

```

选项说明：

- `-u`：（可选）指定 user 作为 init 命令中，用户修改功能的对象。未指定的情况下默认为登录用户，即示例中的 `root`。
 - `-p`：（可选）设置登录用户（示例中为 `root`）的登录密码，若目标机器中登录用户配置有密码，可通过该选项指定用户密码。
 - `--ssh-key-file`：（可选）指定私钥文件的路径，需配置为绝对路径，用于基于私钥的 SSH 无密码身份验证。

#### 说明

- `-p` 和 `--ssh-key-file` 二者仅需配置其一。
 - `-u` 和 `--ssh-key-file` 选项自 obd V3.5.0 支持。

此处示例为：以 root 用户登录 `10.10.10.1` 机器，修改机器的内核参数、关闭防火墙和 SELinux 功能、修改 `/data/1` 和 `/data/log1` 目录属主为 `test`（如存在对应目录），并安装 network 组件。命令执行输出如下：

```shell
get system config ok
+-------------------------------------------------------------------------------------------------+
|                                   System Parameter Change List                                  |
+---------------+-------------------------------------------+---------------+---------------------+
| ip            | name                                      | current_value | expected_value      |
+---------------+-------------------------------------------+---------------+---------------------+
| 10.10.10.1    | fs.aio-max-nr                             | 65536         | 1048576             |
| 10.10.10.1    | net.core.somaxconn                        | 128           | 2048                |
| 10.10.10.1    | net.core.netdev_max_backlog               | 1000          | 10000               |
| 10.10.10.1    | net.core.rmem_default                     | 212992        | 16777216            |
| 10.10.10.1    | net.core.wmem_default                     | 212992        | 16777216            |
| 10.10.10.1    | net.core.rmem_max                         | 212992        | 16777216            |
| 10.10.10.1    | net.core.wmem_max                         | 212992        | 16777216            |
| 10.10.10.1    | net.ipv4.conf.default.rp_filter           | 0             | 1                   |
| 10.10.10.1    | net.ipv4.conf.default.accept_source_route | 1             | 0                   |
| 10.10.10.1    | net.ipv4.tcp_rmem                         | 6291456       | 4096 87380 16777216 |
| 10.10.10.1    | net.ipv4.tcp_wmem                         | 16384         | 4096 65536 16777216 |
| 10.10.10.1    | net.ipv4.tcp_max_syn_backlog              | 1024          | 16384               |
| 10.10.10.1    | net.ipv4.tcp_fin_timeout                  | 60            | 15                  |
| 10.10.10.1    | vm.min_free_kbytes                        | 67584         | 2097152             |
| 10.10.10.1    | fs.file-max                               | 3205772       | 6573688             |
| 10.10.10.1    | fs.pipe-user-pages-soft                   | 16384         | 0                   |
| 10.10.10.1    | vm.max_map_count                          | 65530         | 655360              |
| 10.10.10.1    | nofile                                    | 65535         | 655350              |
+---------------+-------------------------------------------+---------------+---------------------+
chown dir ok
modify system parameters
10.10.10.1: ( fs.aio-max-nr,net.core.somaxconn,net.core.netdev_max_backlog,net.core.rmem_default,net.core.wmem_default... ) have been successfully modified!
You must reboot the following servers to ensure the ulimit parameters take effect: （10.10.10.1）.
Trace ID: f9491158-71db-11f0-81f0-00163e513302
If you want to view detailed obd logs, please run: obd display-trace f9491158-71db-11f0-81f0-00163e513302

```

命令执行后，可执行 `obd host precheck` 命令验证机器是否满足要求，该命令会检查以下内容，仅不符合要求的检查项会有输出。

#### 说明

obd 自 V3.2.0 起新增 `obd host precheck` 命令，支持查看部署 OceanBase 数据库时建议修改的主机内核参数。并于 V3.5.0 增强命令功能，支持登录设置检查、系统权限检查等多种检查项。

- **内核参数检查**：检查建议修改的内核参数，具体参数可查看官网《OceanBase 数据库》文档 [配置 sysctl.conf](https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000006076968)。
 - **安全设置检查**：检查防火墙和 SELinux 功能是否关闭。
 - **登录设置检查**：检查是否支持使用密码登录。
 - **系统权限检查**：检查指定用户是否拥有免密执行 sudo 命令的权限。
 - **网络组件检查**：检查是否安装 network 组件。
 - **内存资源检查**：检查机器可用内存是否满足要求（大于 3 GB）。
 - **内核版本检查**：检查机器内核版本是否满足要求（Linux 3.1.0 及以上）。
 - **目录属主检查**：若目标机器中存在 `/data/1` 和 `/data/log1` 目录，将检查目录的所有者是否为指定的用户。
 - **指令检查**：x86 架构下检查 CPU 是否支持 AVX 指令；ARM 架构下检查 CPU 是否支持 LSE 指令。

```shell
[admin@test001 ~]$ obd host precheck root 10.10.10.1 -u test -p ******

```

选项说明：

- `-u`：（可选）指定 user 作为 precheck 命令中，用户检查功能的对象。未指定的情况下默认为登录用户，即示例中的 `root`。
 - `-p`：（可选）设置登录用户（示例中为 `root`）的登录密码，若目标机器中登录用户配置有密码，可通过该选项指定用户密码。
 - `--ssh-key-file`：（可选）指定私钥文件的路径，需配置为绝对路径，用于基于私钥的 SSH 无密码身份验证。

此处示例为：以 root 用户登录 `10.10.10.1` 机器，检查机器是否满足部署 OceanBase 数据库要求。命令执行输出如下：

```shell
get system config ok
[WARN] Password login permission is not enabled.
[WARN] The test user's sudo privileges are not configured for password-free access.
[WARN] The owner of the ['/data/1', '/data/log1'] directory is not test.
+-------------------------------------------------------------------------------------------------+
|                                   System Parameter Change List                                  |
+---------------+-------------------------------------------+---------------+---------------------+
| ip            | name                                      | current_value | expected_value      |
+---------------+-------------------------------------------+---------------+---------------------+
| 10.10.10.1    | fs.aio-max-nr                             | 65536         | 1048576             |
| 10.10.10.1    | net.core.somaxconn                        | 128           | 2048                |
| 10.10.10.1    | net.core.netdev_max_backlog               | 1000          | 10000               |
| 10.10.10.1    | net.core.rmem_default                     | 212992        | 16777216            |
| 10.10.10.1    | net.core.wmem_default                     | 212992        | 16777216            |
| 10.10.10.1    | net.core.rmem_max                         | 212992        | 16777216            |
| 10.10.10.1    | net.core.wmem_max                         | 212992        | 16777216            |
| 10.10.10.1    | net.ipv4.conf.default.rp_filter           | 0             | 1                   |
| 10.10.10.1    | net.ipv4.conf.default.accept_source_route | 1             | 0                   |
| 10.10.10.1    | net.ipv4.tcp_rmem                         | 6291456       | 4096 87380 16777216 |
| 10.10.10.1    | net.ipv4.tcp_wmem                         | 16384         | 4096 65536 16777216 |
| 10.10.10.1    | net.ipv4.tcp_max_syn_backlog              | 1024          | 16384               |
| 10.10.10.1    | net.ipv4.tcp_fin_timeout                  | 60            | 15                  |
| 10.10.10.1    | vm.min_free_kbytes                        | 67584         | 2097152             |
| 10.10.10.1    | fs.file-max                               | 3205772       | 6573688             |
| 10.10.10.1    | fs.pipe-user-pages-soft                   | 16384         | 0                   |
| 10.10.10.1    | vm.max_map_count                          | 65530         | 655360              |
| 10.10.10.1    | nofile                                    | 65535         | 655350              |
+---------------+-------------------------------------------+---------------+---------------------+
Please run `obd host user init -u test --host=10.10.10.1` to init user.
Please run `obd host init root 10.10.10.1  -u test` to init host.
Trace ID: 0f1219da-71d7-11f0-a56f-00163e513302
If you want to view detailed obd logs, please run: obd display-trace 0f1219da-71d7-11f0-a56f-00163e513302

```

## 集群部署

### 图形化界面部署

使用以下命令启动图形化界面：

```bash
[admin@test001 ~]$ obd web

```

单击输出的地址访问图形化界面，详细操作可参见 [使用 obd 白屏部署集中式版](https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000006076959)。

#### 说明

在阿里云或其他云环境下，可能出现程序无法获取公网 IP，从而输出内网地址的情况，此 IP 非公网地址，您需要使用正确的地址访问图形化界面。

### 配置文件部署

1. 编写 yaml 文件后，使用如下命令部署 OceanBase 集群

   ```shell
   [admin@test001 ~]$ obd cluster deploy <cluster_name> -c <config_file>

   ```

   `<cluster_name>` 表示集群部署名，`<config_file>` 表示 yaml 文件路径，您需根据实际情况进行配置。
 2. 部署成功后执行如下命令启动集群

   ```shell
   [admin@test001 ~]$ obd cluster start <cluster_name>

   ```

   `<cluster_name>` 表示集群部署名，需配置为部署时使用的集群部署名。

本节仅介绍命令使用，详细操作可参见 [使用 obd 命令行部署集中式版](https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000006076960) 中 **使用 yaml 配置文件部署** 章节。

## 集群管理

obd 支持通过命令查看（`display`）、停止（`stop`）、启动（`start`）、重启（`restart`）集群、修改（`edit-config`）集群部分参数，以及销毁（`destroy`）集群。

本节以部署名为 `obtest` 的集群为例，介绍常用的集群管理命令。

### 查看集群详情

```shell
[admin@test001 ~]$ obd cluster display obtest

```

命令执行后会输出部署名对应集群中的组件信息及访问方式（如需访问），示例如下：

```shell
Get local repositories and plugins ok
Open ssh connection ok
Connect to observer 10.10.10.1:2881 ok
Wait for observer init ok
+--------------------------------------------------+
|               oceanbase-standalone               |
+----------------+---------+------+-------+--------+
| ip             | version | port | zone  | status |
+----------------+---------+------+-------+--------+
| 10.10.10.1     | 4.3.5.3 | 2881 | zone1 | ACTIVE |
+----------------+---------+------+-------+--------+
obclient -h10.10.10.1 -P2881 -uroot@sys -p'******' -Doceanbase -A

cluster unique id: 2bca6200-df53-51c7-a9c7-36279ea586de-1985a44a071-03050304

Connect to Obagent ok
+----------------------------------------------------------------------+
|                               obagent                                |
+-------------------+--------------------+--------------------+--------+
| ip                | mgragent_http_port | monagent_http_port | status |
+-------------------+--------------------+--------------------+--------+
| 10.10.10.1        | 8089               | 8088               | active |
+-------------------+--------------------+--------------------+--------+
Connect to Prometheus ok
+-------------------------------------------------------------+
|                          prometheus                         |
+-------------------------------+-------+------------+--------+
| url                           | user  | password   | status |
+-------------------------------+-------+------------+--------+
| http://10.10.10.1:9090        | admin | ********   | active |
+-------------------------------+-------+------------+--------+
Connect to grafana ok
+------------------------------------------------------------------------+
|                                grafana                                 |
+-------------------------------------------+-------+-----------+--------+
| url                                       | user  | password  | status |
+-------------------------------------------+-------+-----------+--------+
| http://10.10.10.1:3000/d/oceanbase        | admin | ********  | active |
+-------------------------------------------+-------+-----------+--------+
Trace ID: a642fc50-046f-11f0-9123-00163e2fbf47

```

### 停止集群

您可选择停止整个集群，也可通过 `-c` 选项停止指定组件。

- 停止整个集群

  ```shell
  [admin@test001 ~]$ obd cluster stop obtest

  ```
 - 停止集群中指定组件

  ```shell
  [admin@test001 ~]$ obd cluster stop obtest -c grafana

  ```

停止整个集群时输出如下，表示 obtest 集群已被停止：

```shell
Get local repositories ok
Get local repositories and plugins ok
Open ssh connection ok
Stop observer ok
Stop obshell ok
Stop obagent ok
Stop prometheus ok
Stop grafana ok
obtest stopped
Trace ID: 96513ba8-6df2-11f0-aaa0-00163e308f7d

```

停止集群后，连接集群将报错 `ERROR 2002 (HY000): Can't connect to OceanBase server on '10.10.10.1' (115)`。执行 `obd cluster list` 命令查看集群列表，对应集群的状态将会是 `stopped`，示例如下：

```shell
+------------------------------------------------------------------+
|                          Cluster List                            |
+-------------+----------------------------------+-----------------+
| Name        | Configuration Path               | Status (Cached) |
+-------------+----------------------------------+-----------------+
| obtest      | /home/admin/.obd/cluster/obtest  | stopped         |
+-------------+----------------------------------+-----------------+

```

#### 说明

若仅停止指定组件，集群下的组件没有全部停止，集群不会进入到 `stopped` 状态。

### 启动集群

您可选择启动整个集群，也可通过 `-c` 选项启动指定组件。

- 启动整个集群

  ```shell
  [admin@test001 ~]$ obd cluster start obtest

  ```
 - 启动集群中指定组件

  ```shell
  [admin@test001 ~]$ obd cluster start obtest -c oceanbase-standalone

  ```

启动成功后会输出组件信息，启动整个集群的输出如下：

```shell
Wait for observer init ok
+--------------------------------------------------+
|               oceanbase-standalone               |
+----------------+---------+------+-------+--------+
| ip             | version | port | zone  | status |
+----------------+---------+------+-------+--------+
| 10.10.10.1     | 4.3.5.3 | 2881 | zone1 | ACTIVE |
+----------------+---------+------+-------+--------+
obclient -h10.10.10.1 -P2881 -uroot@sys -p'******' -Doceanbase -A

Connect to Obagent ok
+----------------------------------------------------------------------+
|                               obagent                                |
+-------------------+--------------------+--------------------+--------+
| ip                | mgragent_http_port | monagent_http_port | status |
+-------------------+--------------------+--------------------+--------+
| 10.10.10.1        | 8089               | 8088               | active |
+-------------------+--------------------+--------------------+--------+
Connect to Prometheus ok
+-------------------------------------------------------------+
|                          prometheus                         |
+-------------------------------+-------+------------+--------+
| url                           | user  | password   | status |
+-------------------------------+-------+------------+--------+
| http://10.10.10.1:9090        | admin | ********   | active |
+-------------------------------+-------+------------+--------+
Connect to grafana ok
+------------------------------------------------------------------------+
|                                grafana                                 |
+-------------------------------------------+-------+-----------+--------+
| url                                       | user  | password  | status |
+-------------------------------------------+-------+-----------+--------+
| http://10.10.10.1:3000/d/oceanbase        | admin | ********  | active |
+-------------------------------------------+-------+-----------+--------+
obtest running
Trace ID: 838864be-6df3-11f0-a8fe-00163e308f7d

```

启动成功后，复制并执行 `oceanbase-standalone` 组件下的连接串可成功连接集群。执行 `obd cluster list` 命令查看集群列表，对应集群的状态将会是 `running`，示例如下：

```shell
+------------------------------------------------------------------+
|                          Cluster List                            |
+-------------+----------------------------------+-----------------+
| Name        | Configuration Path               | Status (Cached) |
+-------------+----------------------------------+-----------------+
| obtest      | /home/admin/.obd/cluster/obtest  | running         |
+-------------+----------------------------------+-----------------+

```

#### 说明

若仅启动指定组件，集群下的组件没有全部启动，集群不会进入到 `running` 状态。

### 重启集群

您可选择重启整个集群，也可通过 `-c` 选项重启指定组件。

- 重启整个集群

  ```shell
  [admin@test001 ~]$ obd cluster restart obtest

  ```
 - 重启集群中 `oceanbase-standalone` 组件

  ```shell
  [admin@test001 ~]$ obd cluster restart obtest -c oceanbase-standalone

  ```

以重启集群中 `oceanbase-standalone` 组件为例，输出如下：

```shell
Get local repositories and plugins ok
Load cluster param plugin ok
Open ssh connection ok
Cluster status check ok
Connect to observer 10.10.10.1:2881 ok
Server check ok
Stop observer ok
Stop obshell ok
cluster scenario: express_oltp
Start observer ok
observer program health check ok
obshell start ok
obshell program health check ok
Connect to observer 10.10.10.1:2881 ok
Wait for observer init ok
+--------------------------------------------------+
|               oceanbase-standalone               |
+----------------+---------+------+-------+--------+
| ip             | version | port | zone  | status |
+----------------+---------+------+-------+--------+
| 10.10.10.1     | 4.3.5.3 | 2881 | zone1 | ACTIVE |
+----------------+---------+------+-------+--------+
obclient -h10.10.10.1 -P2881 -uroot@sys -p'******' -Doceanbase -A

succeed
Trace ID: 108373d8-6e7e-11f0-88fe-00163e308f7d

```

```

#### 说明

重启整个集群时，如果集群下的组件没有全部启动，集群不会进入到 `running` 状态。

### 修改集群配置

OceanBase 数据库有数百个配置项，有些配置是耦合的，请谨慎修改。

执行如下命令打开配置文件，修改集群配置：

```shell
[admin@test001 ~]$ obd cluster edit-config obtest

```

修改配置并保存退出后，obd 会告知如何使得此次修改生效，复制 obd 输出的命令即可。保存修改后输出如下：

```shell
Search param plugin and load ok
Search param plugin and load ok
Parameter check ok
Save deploy "obtest" configuration
Use `obd cluster reload obtest` to make changes take effect.

```

复制执行输出中的 `obd cluster reload obtest` 命令即可使修改生效。

#### 注意

部分配置项修改后需要执行 `obd cluster redeploy` 命令才会生效（如 `home_path`、`cluster_id`、`data_dir`、`redo_dir`、`obshell_port`、`zone`、`appname` 等），该命令会销毁集群并重新部署，您集群中的数据会丢失，请谨慎操作。

### 升级集群

执行升级操作前需确保：

- obd 镜像库中包含组件目标版本安装包，可执行 `obd mirror list local` 命令查看本地镜像库中包含的安装包。
 - 集群已完成一次合并，可使用 root 用户登录集群 sys 租户，执行 `ALTER SYSTEM MAJOR FREEZE;` 命令进行合并。

执行如下命令升级 OceanBase 数据库：

```bash
[admin@test001 ~]$ obd cluster upgrade obtest -c oceanbase-standalone -V 4.3.5.0 --usable=xxxxxxxx

```

`obtest` 为集群部署名，需根据实际集群部署名修改。可执行 `obd cluster list` 查看 obd 管理的集群（`Name` 列即为部署名）。

选项说明：

- `-c`：指定待升级组件，此处指定组件为 `oceanbase-standalone` 表示对 OceanBase 集中式数据库进行升级。
 - `-V`：指定升级的目标版本。
 - `--usable=xxxxxxxx`：（可选）当镜像库中存在多个同版本的安装包时，通过该选项指定部署版本的 hash 值。可执行 `obd mirror list local` 命令查看 obd 本地镜像库，输出中的最后一列即为 hash 值。

升级 OceanBase 数据库的具体操作可参见 [升级 OceanBase 数据库](https://www.oceanbase.com/docs/common-obd-cn-1000000003754536)。

### 销毁集群

销毁前请检查集群中的租户是否存在备租户：

```shell
[admin@test001 ~]$ obd cluster tenant show obtest -g

```

`-g` 用于展示与集群有关的主备租户信息，该选项无需传值。若集群中的租户存在备租户，其输出内容和字段含义的详细介绍可参见下文 [创建备租户](#创建备租户)。

集群中的租户存在备租户时，销毁集群时会报错，此时可以选择为主备租户解耦，或强制执行销毁命令（命令后添加 `--igs` 选项，无需传值），集群销毁后备租户将无法使用。主备租户解耦的具体操作可参见下文 [角色切换](#角色切换) 中 **主备租户解耦** 部分介绍。

#### 注意

`obd cluster destroy` 命令不可逆，会在停止 observer 进程的同时清除数据库文件。因此执行以下命令前，请先确认集群已经不再使用，并且需要备份的数据已经完成备份。

```shell
[admin@test001 ~]$ obd cluster destroy obtest

```

命令执行后需要二次确认是否销毁集群，需手动输入 `y` 并回车才会继续执行销毁操作。整体输出如下：

```shell
Are you sure to destroy the "obtest" cluster ? [y/n]: y
Get local repositories ok
Open ssh connection ok
Get deployment connections ok
Get standbys info ok
Get local repositories and plugins ok
Stop observer ok
Stop obshell ok
Stop obagent ok
Stop prometheus ok
Stop grafana ok
obtest stopped
Cluster status check ok
oceanbase-standalone work dir cleaning ok
obagent work dir cleaning ok
prometheus work dir cleaning ok
grafana work dir cleaning ok
obtest destroyed
Trace ID: 58bb125e-6e84-11f0-aae8-00163e308f7d

```

此时连接集群将报错 `ERROR 2002 (HY000): Can't connect to OceanBase server on '10.10.10.1' (115)`。执行 `obd cluster list` 命令查看集群列表，对应集群的状态将会是 `destroyed`，示例如下：

```shell
+------------------------------------------------------------------+
|                          Cluster List                            |
+-------------+----------------------------------+-----------------+
| Name        | Configuration Path               | Status (Cached) |
+-------------+----------------------------------+-----------------+
| obtest      | /home/admin/.obd/cluster/obtest  | destroyed       |
+-------------+----------------------------------+-----------------+

```

## 租户管理

obd 支持通过命令创建租户（`tenant create`）及备租户（`tenant create-standby`）、切换主备租户同步方式（`tenant switch-log-source`）、Switchover 操作（`tenant switchover`）、Failover 操作（`tenant failover`）、主备租户解耦（`tenant decouple`），以及删除租户（`tenant drop`）。

### 创建租户

```shell
[admin@test001 ~]$ obd cluster tenant create obtest -n test --mode=oracle --password=<your_password> --max-cpu=2 --memory-size=2G --log-disk-size=3G --max-iops=10000 --iops-weight=2 --charset=utf8 -o htap -s 'ob_tcp_invited_nodes="%"'

```

选项说明：

- `-n`：（可选）指定待创建的租户名称，本示例中指定租户名为 `test`。
 - `--mode`：（可选）指定待创建租户的兼容模式（`oracle` 或 `mysql`），此处设置为 `oracle` 表示创建 Oracle 兼容模式租户。
 - `--password`：（可选）设置租户管理员账户密码。
 - `--max-cpu`：（可选）设置租户可用最大 CPU 数，默认为 `0`，表示使用集群剩余全部可用 CPU。
 - `--memory-size`：（可选）设置租户可用内存单元大小，默认为 `0`，表示使用集群剩余全部可用内存。
 - `--log-disk-size`：（可选）设置租户可用日志磁盘大小，最小可配置为 `2G`。
 - `--max-iops`：（可选）设置租户 IOPS 上限，取值范围为 [1024,+∞)。
 - `--iops-weight`：（可选）设置租户 IOPS 的权重。
 - `--charset`：（可选）指定租户的字符集。
 - `-o`：（可选）设置租户负载类型，可取值为 `express_oltp`、`complex_oltp`、`olap`、`htap`、`kv`。
 - `-s`：（可选）设置租户系统变量值，设置系统变量时需将变量放置到单引号（`''`）内。示例中配置 `'ob_tcp_invited_nodes="%"'` 表示允许所有 IP 连接。

命令执行后输出如下，复制输出中的连接串即可以管理员账户连接到创建的租户。

```shell
Get local repositories ok
Open ssh connection ok
Connect to observer 10.10.10.1:2881 ok
Create tenant test ok
obclient -h10.10.10.1 -P'2881' -p'********' -uSYS@test -A

optimize tenant with scenario: htap ok
Trace ID: a491c91a-6e80-11f0-b581-00163e308f7d
If you want to view detailed obd logs, please run: obd display-trace
a491c91a-6e80-11f0-b581-00163e308f7d

```

#### 说明

如需删除租户，可执行 `obd cluster tenant drop` 命令删除，该命令会自动删除对应的资源单元和资源池。

成功创建租户后，可执行 `obd cluster tenant show obtest` 命令查看集群内的租户情况，输出如下：

```shell
Select tenant ok
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                    tenant basic info                                                                                    |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
| tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops            | min_iops            | log_disk_size | iops_weight | tenant_role |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
| sys         | SYS         | MYSQL              | RANDOM       | 2.0     | 2.0     | 1G          | 9223372036854775807 | 9223372036854775807 | 2G            | 2           | PRIMARY     |
| test        | USER        | ORACLE             | RANDOM       | 2.0     | 2.0     | 2G          | 10000               | 10000               | 3G            | 2           | PRIMARY     |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
Trace ID: 470ed65a-6e82-11f0-8486-00163e308f7d
If you want to view detailed obd logs, please run: obd display-trace 470ed65a-6e82-11f0-8486-00163e308f7d

```

### 创建备租户

物理备库是 OceanBase 数据库高可用解决方案的重要组成部分，可以为用户的关键应用提供高可用、数据保护、灾难恢复等重要特性。

物理备库作为 OceanBase 生产数据库的准实时热备份，当主库出现不可用情况时，备库可以接管服务，并且提供无损切换（RPO = 0）和有损切换（RPO > 0）两种容灾能力，最大限度降低服务停机时间，减少可能带来的数据损失。详细介绍可参见 [物理备库容灾](https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000006077174) 章节内容。

    基于网络创建备租户   基于归档创建备租户

#### 前提条件

- 主租户和备租户所在集群均已创建。
 - 主租户需是用户租户，且具备全量的日志。

  执行 `SELECT LS_ID, BEGIN_LSN FROM oceanbase.GV$OB_LOG_STAT WHERE ROLE = 'LEADER' ;` 命令查看，`BEGIN_LSN` 值为 `0` 表示当前日志流副本拥有自创建以来的完整日志。
 - 主备租户所在集群需保证在运行状态。

  可执行 `obd cluster display` 命令查看集群状态。
 - 简单体验时主租户资源最少为 1C2GB 内存、4GB 日志磁盘，长期使用建议主租户资源为 1C4GB 内存及以上。
 - 主备租户所在集群均需被同一个 obd 管理，若集群不被 obd 管理，您可参见 [使用 obd 接管集群](https://www.oceanbase.com/docs/common-obd-cn-1000000003754544) 一文操作进行接管。

#### 操作步骤

本节以一主一备的部署模式为例进行介绍，简单概括即为：存在 clusterA、clusterB 两个集群，并且 clusterA 集群中创建了用户租户 A_a（主租户），在 clusterB 集群中创建 A_a 租户的备租户（B_a）。

1. 执行如下命令为 A_a 租户创建备租户 B_a

   ```shell
   [admin@test001 ~]$ obd cluster tenant create-standby clusterB clusterA A_a -t B_a --tenant-root-password=*****

   ```

   选项说明：

      - `-t`：（可选）设置备租户名，未配置的情况下默认与主租户一致。
      - `--tenant-root-password`：主租户的 root 用户登录密码（示例中为 `A_a` 的 root 用户密码），用于连接主租户创建 `standbyro` 用户。当基于网络创建备租户且主租户下未创建过 `standbyro` 用户时，该选项为必选项。`standbyro` 用户密码中不允许包含：英文单引号（`'`）、英文双引号（`"`）、反引号（`` ` ``）、英文分号（`;`）及空格（` `）。
 2. 执行如下命令查看备租户的主备关系

   ```shell
   [admin@test001 ~]$ obd cluster tenant show clusterB -t B_a -g

   ```

   选项说明：

      - `-t`：（可选）指定要展示的租户，配置后仅展示配置的租户信息。未配置的情况下展示集群所有租户信息。
      - `-g`：（可选）控制是否展示与集群相关的主备图形信息，无需传值。

   命令执行后输出如下所示：

   ```shell
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                    tenant basic info                                                                                    |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops            | min_iops            | log_disk_size | iops_weight | tenant_role |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | B_a         | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 4G          | 10000               | 10000               | 5G            | 2           | STANDBY     |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                   standby tenant standby info                                                                   |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   | standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp         | err_code | error_comment | switchover_status | switchover_epoch | log_mode     |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   | B_a                 | NORMAL        | NORMAL      | 2025-06-06 15:46:42.566389 | 0        |               | NORMAL            | 0                | NOARCHIVELOG |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                   standby tenant`s primary info                                                                                   |
   +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | standby_tenant_name | primary_tenant_info                                                                                                                                                         |
   +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | B_a                 | IP_LIST=10.10.10.1:2881,USER=standbyro@A_a,PASSWORD=******,TENANT_ID=1002,CLUSTER_ID=1694680744,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false |
   +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   query primary-standby relation ok

   primary-standby relation topology graph

   clusterA:A_a
   └── clusterB:B_a

   ```

   输出中 `tenant_status` 和 `sync_status` 值均为 `NORMAL` 时即表示备租户创建成功，且日志传输正常。输出中各个模块内容介绍如下。

      - **tenant base info**：该表展示集群中的租户信息。您需关注的有如下几项。

       | 列名 | 说明 |
       | --- | --- |
       | tenant_name | 租户名称。 |
       | tenant_type | 租户类型，分为 sys 租户（SYS）和用户租户（USER）。 |
       | compatibility_mode | 租户的兼容模式，分为 MySQL 模式兼容和 Oracle 模式兼容，社区版仅支持 MySQL 模式兼容。 |
       | primary_zone | 租户的主 Zone。 |
       | tenant_role | 租户角色：      - `PRIMARY`：主租户     - `STANDBY`：备租户     - `RESTORE`：租户处于恢复中 |
      - **standby tenant standby info**：该表展示集群中备租户的具体信息，您需关注如下几项。

       | 列名 | 说明 |
       | --- | --- |
       | standby_tenant_name | 备租户的租户名称。 |
       | tenant_status | 备租户的租户状态，该值为 `NORMAL` 时表示备租户状态正常。 |
       | sync_status | 备租户的日志同步状态，该值为 `NORMAL` 时表示日志同步状态正常。 |
       | sync_scn_timestamp | 日志同步位点。 |
       | err_code | 日志同步错误代码。 |
       | error_comment | 日志同步错误信息。 |
       | switchover_status | 主备租户切换状态，该值为 `NORMAL` 时表示主备租户切换状态正常。 |
       | switchover_epoch | 主备租户切换时间。 |
       | log_mode | 日志归档模式，基于网络的主备租户日志归档模式均为 `NOARCHIVELOG`。 |
      - **standby tenant`s primary info**：该表展示集群中备租户的主租户信息，您需关注如下几项。

       | 列名 | 说明 |
       | --- | --- |
       | standby_tenant_name | 备租户的租户名，方便展示主租户信息归属于哪一个备租户。 |
       | primary_tenant_info | 备租户所属的主租户信息，包括主租户所在集群的节点 IP、主租户的租户名、standburo 用户的密码、主租户 ID 和主租户所在集群 ID 等。 |
 3. 分别连接主备租户，修改主租户（A_a）中信息，查看备租户（B_a）中是否同步更新。

#### 前提条件

- 主租户和备租户所在集群均已创建。
 - 主租户需是用户租户，且已完成备份，备份操作具体可参见下文 [租户备份](#租户备份)。
 - 主备租户所在集群需保证在运行状态，可执行 `obd cluster display` 命令查看集群状态。
 - 简单体验时主租户资源最少为 1C2GB 内存、4GB 日志磁盘，长期使用建议主租户资源为 1C4GB 内存及以上。
 - 主备租户所在集群均需被同一个 obd 管理，若集群不被 obd 管理，您可参见 [使用 obd 接管集群](https://www.oceanbase.com/docs/common-obd-cn-1000000003754544) 一文操作进行接管。
 - 主租户和备租户所在的集群可以同时访问共享存储（例如，OSS、NFS 等）。

   ```shell
   [admin@test001 ~]$ obd cluster tenant create-standby clusterB clusterA A_a --type=LOCATION -t B_a -d 'oss://oceanbase-test-bucket/backup/data?host=****.aliyun-inc.com&access_id=****&access_key=****&delete_mode=delete&checksum_type=md5' -a 'oss://oceanbase-test-bucket/backup/log?host=****.aliyun-inc.com&access_id=****&access_key=****&delete_mode=delete&checksum_type=md5'

   ```

   选项说明：

      - `--type`：（可选）指定备租户同步数据方式，配置为 `LOCATION` 表示数据基于归档同步。未配置的情况下默认为 `SERVICE`（基于网络）。
      - `-t`：（可选）设置备租户名，未配置的情况下默认与主租户一致。
      - `-d`：（可选）设置存储数据备份文件的目录路径，创建备租户时会从该路径中获取主租户的数据备份信息。此处以使用 OSS 作为备份介质为例，您需根据实际备份文件路径进行替换。 当 `--type` 配置为 `LOCATION`，且未配置该选项时，obd 会自动获取主租户备份（`obd cluster tenant set-backup-config` 命令）时设置的数据备份文件路径。
      - `-a`：（可选）设置存储日志归档文件的目录路径，创建备租户时会从该路径中获取主租户的日志归档信息。此处以使用 OSS 作为备份介质为例，您需根据实际备份文件路径进行替换。 当 `--type` 配置为 `LOCATION`，且未配置该选项时，obd 会自动获取主租户备份（`obd cluster tenant set-backup-config` 命令）时设置的日志归档文件路径。
      - `-D`：（可选）若租户备份时为备份集设置了密码，需通过该选项指定备份集设置的密码。如设置了多个密码需写出全部的密码，并使用英文逗号（`,`）间隔。
 2. 执行如下命令查看备租户状态

   ```

   选项说明：

   ```shell
   +-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                         tenant basic info                                                                         |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
   | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
   | B_a         | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 4G          | 10000    | 10000    | 5G            | 2           | STANDBY     |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
   +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                                 standby tenant standby info                                                                                                  |
   +---------------------+---------------+-----------------+----------------------------+----------+------------------------------------------------------------------------+-------------------+------------------+--------------+
   | standby_tenant_name | tenant_status | sync_status     | sync_scn_timestamp         | err_code | error_comment                                                          | switchover_status | switchover_epoch | log_mode     |
   +---------------------+---------------+-----------------+----------------------------+----------+------------------------------------------------------------------------+-------------------+------------------+--------------+
   | B_a                 | NORMAL        | RESTORE SUSPEND | 2025-05-27 16:12:08.556291 | 0        | Restore suspend, the log stream has synchronized to recovery until scn | NORMAL            | 0                | NOARCHIVELOG |
   +---------------------+---------------+-----------------+----------------------------+----------+------------------------------------------------------------------------+-------------------+------------------+--------------+
   +----------------------------------------------------------------------------------------------------------------------+
   |           standby tenant`s primary info                                                                              |
   +---------------------+------------------------------------------------------------------------------------------------+
   | standby_tenant_name | primary_tenant_info                                                                            |
   +---------------------+------------------------------------------------------------------------------------------------+
   | B_a                 | oss://oceanbase-test-bucket/backup/log?host=****.aliyun-inc.com&access_id=****&access_key=**** |
   +---------------------+------------------------------------------------------------------------------------------------+
   query primary-standby relation ok

   ```

   输出中 `tenant_status` 值为 `NORMAL`，`sync_status` 值为 `RESTORE SUSPEND`，表示备租户创建成功，且日志已同步到归档位置。输出中各个模块内容介绍如下。

       | 列名 | 说明 |
       | --- | --- |
       | standby_tenant_name | 备租户的租户名称。 |
       | tenant_status | 备租户的租户状态，该值为 `NORMAL` 时表示备租户状态正常。 |
       | sync_status | 备租户的日志同步状态，该值为 `RESTORE SUSPEND` 时表示日志已同步到归档位置。为备租户开启日志持续同步后，该列的值将变为 `NORMAL` 表示日志同步状态正常。 |
       | sync_scn_timestamp | 日志同步位点。 |
       | err_code | 日志同步错误代码。 |
       | error_comment | 日志同步错误信息。 |
       | switchover_status | 主备租户切换状态，该值为 `NORMAL` 时表示主备租户切换状态正常。 |
       | switchover_epoch | 主备租户切换时间。 |
       | log_mode | 日志归档模式。      - `ARCHIVELOG`：归档模式开启中。     - `NOARCHIVELOG`：未开启归档模式。 |
      - **standby tenant`s primary info**：该表展示集群中备租户的主租户信息，您需关注如下几项。

       | 列名 | 说明 |
       | --- | --- |
       | standby_tenant_name | 备租户的租户名，方便展示主租户信息归属于哪一个备租户。 |
       | primary_tenant_info | 备租户所属的主租户信息，基于归档创建备租户时，此处展示日志归档的目录路径。 |
 3. 开启日志持续同步

   基于归档创建备租户时，备租户不会连续同步主租户归档的日志。因此，当备租户创建成功后（`obd cluster tenant show` 命令查询 `tenant_status` 值为 `NORMAL`，`sync_status` 值为 `RESTORE SUSPEND`），需要手动执行如下命令，为备租户开启日志持续同步模式。

   ```shell
   [admin@test001 ~]$ obd cluster tenant recover clusterB B_a

   ```
 4. 分别连接主备租户，修改主租户（A_a）中信息，查看备租户（B_a）中是否同步更新。

### 切换主备租户同步方式

可通过 obd 命令切换主备租户同步方式，支持在 **基于网络** 和 **基于归档** 两种同步方式间切换。

    基于网络同步切换为基于归档同步   基于归档同步切换为基于网络同步

#### 前提条件

源端租户（主租户或另一个备租户）需要做过数据备份和日志归档，具体操作可参见下文 [租户备份](#租户备份)。

#### 操作步骤

此处以存在 clusterA、clusterB 两个集群，并且 clusterA 集群中创建了用户租户 A_a（主租户），在 clusterB 集群中基于网络的方式创建了 A_a 租户的备租户（B_a）为例，将主备租户间的同步方式由基于网络切换为基于归档。

1. 切换同步方式

   ```shell
   [admin@test001 ~]$ obd cluster tenant switch-log-source clusterB B_a --type=LOCATION -a 'oss://oceanbase-test-bucket/backup/log?host=****.aliyun-inc.com&access_id=****&access_key=****&delete_mode=delete&checksum_type=md5'

   ```

   选项说明：

      - `--type`：（可选）指定备租户同步数据方式，配置为 `LOCATION` 表示基于归档同步数据。未配置的情况下默认为 `SERVICE`（基于网络）。
      - `-a`：（可选）设置存储日志归档文件的目录路径，备租户会从该路径中获取主租户的日志归档信息。此处以使用 OSS 作为备份介质为例，您需根据实际备份文件路径进行替换。 当 `--type` 配置为 `LOCATION`，且未配置该选项时，obd 会自动获取主租户备份（`obd cluster tenant set-backup-config` 命令）时设置的日志归档文件路径。

   命令执行输出如下：

   ```shell
   Get local repositories ok
   obshell program health check ok
   Check obshell version ok
   Get deployment connections ok
   source type check ok
   standby uri checking ok
   switching log resource ok
   Trace ID: 588ffb14-42ab-11f0-b3d9-00163e49531b
   If you want to view detailed obd logs, please run: obd display-trace 588ffb14-42ab-11f0-b3d9-00163e49531b

   ```
 2. 查看租户情况

   ```

   选项说明：

   命令执行后输出如下所示，`primary_tenant_info` 展示归档日志的目录路径，表示同步方式已切换为基于归档同步。

   ```shell
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                     tenant basic info                                                                                   |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops            | min_iops            | log_disk_size | iops_weight | tenant_role |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | B_a         | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 4G          | 10000               | 10000               | 5G            | 2           | STANDBY     |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                   standby tenant standby info                                                                   |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   | standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp         | err_code | error_comment | switchover_status | switchover_epoch | log_mode     |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   | B_a                 | NORMAL        | NORMAL      | 2025-06-06 15:46:42.566389 | 0        |               | NORMAL            | 0                | NOARCHIVELOG |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   +----------------------------------------------------------------------------------------------------------------------+
   |           standby tenant`s primary info                                                                              |
   +---------------------+------------------------------------------------------------------------------------------------+
   | standby_tenant_name | primary_tenant_info                                                                            |
   +---------------------+------------------------------------------------------------------------------------------------+
   | B_a                 | oss://oceanbase-test-bucket/backup/log?host=****.aliyun-inc.com&access_id=****&access_key=**** |
   +---------------------+------------------------------------------------------------------------------------------------+
   query primary-standby relation ok

   ```

#### 背景介绍

当主租户无完整日志，但是想使用基于网络的同步方式时，可先基于归档创建备租户，待备租户创建完成后参照本节操作切换主备租户同步方式为基于网络方式。基于归档创建备租户的操作可参见 [创建备租户](#创建备租户) 介绍。

#### 前提条件

已为备租户开启日志持续同步，开启命令为 `obd cluster tenant recover`，命令详细介绍参见官网《OceanBase 安装部署工具》文档 [集群命令组](https://www.oceanbase.com/docs/common-obd-cn-1000000003892230)，搜索 **obd cluster tenant recover** 查看。

#### 操作步骤

此处以存在 clusterA、clusterB 两个集群，并且 clusterA 集群中创建了用户租户 A_a（主租户），在 clusterB 集群中基于归档的方式创建了 A_a 租户的备租户（B_a）为例，将主备租户间的同步方式由基于归档切换为基于网络。

1. 切换同步方式

   ```shell
   [admin@test001 ~]$ obd cluster tenant switch-log-source clusterB B_a --type=SERVICE -p *******

   ```

   选项说明：

      - `--type`：（可选）指定备租户同步数据方式，配置为 `SERVICE` 表示基于网络同步。未配置的情况下默认为 `SERVICE`（基于网络）。
      - `-p`：主租户的 root 用户登录密码，用于连接主租户创建 `standbyro` 用户。当主租户下未创建过 `standbyro` 用户时，该选项为必选项。`standbyro` 用户密码中不允许包含：英文单引号（`'`）、英文双引号（`"`）、反引号（`` ` ``）、英文分号（`;`）及空格（` `）。

   命令执行输出如下：

   ```shell
   Get local repositories ok
   obshell program health check ok
   Check obshell version ok
   Get deployment connections ok
   source type check ok
   Create standbyro user ok
   switching log resource ok
   Trace ID: 5b8a866e-42aa-11f0-8eff-00163e49531b
   If you want to view detailed obd logs, please run: obd display-trace 5b8a866e-42aa-11f0-8eff-00163e49531b

   ```

   选项说明：

   命令执行后输出如下所示，`primary_tenant_info` 展示主租户信息，表示同步方式已切换为基于网络同步。

   ```

### 角色切换

#### 概念介绍

OceanBase 集群的租户角色包括两种：主租户（PRIMARY）和备租户（STANDBY）。正常情况下创建的普通租户角色均为主租户，使用物理备库方式（如 `obd cluster tenant create-standby` 命令）创建的租户角色为备租户。

obd 支持通过命令动态改变租户角色。

- Switchover

  Switchover 操作是在用户计划内对租户角色进行变更。执行 Switchover 操作后，主租户会与对应的备租户会切换租户角色，整个过程数据不丢失，RPO = 0，执行时间一般为秒级。
 - Failover

  Failover 操作通常是在主租户出现无法恢复的故障时所做的切换行为。执行 Failover 操作后，对应的备租户角色会变换成 PRIMARY。同时，如果对主租户故障前一直正常同步的备租户执行 Failover 操作，则执行 Failover 操作后，一般会产生百毫秒级别的数据损失，执行时间一般为秒级。
 - Decouple

  Decouple 操作是在用户计划内对租户角色进行变更，执行 Decouple 操作后，对应的备租户会和主租户解耦，备租户角色会变换为 PRIMARY。

#### 操作步骤

    Switchover   Failover   主备租户解耦

执行 Switchover 操作后，为保证拓扑关系不变，原主租户下的其他备租户切换到新主租户下，新主租户下的其他备租户切换到新备租户下，即仅切换 Switchover 操作的两个主备节点，其他节点的位置保持不变，如下图所示。

![Switchover](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/obd/V2.3.0/zh-CN/400.user-guide/200.role-switching-01.png)

执行 Switchover 操作前,需确保满足如下要求：

- 主备租户所在的集群均为在线状态，可执行 `obd cluster display` 命令查看集群状态。
 - 主备租户的状态均为 `NORMAL`，且备租户的日志传输状态（`sync_status`）为 `NORMAL`。可执行 `obd cluster tenant show` 命令查看。
 - 主租户的租户角色（`tenant_role`）需为 `PRIMARY`。
 - 对基于网络同步数据的备租户进行主备切换时，要求备租户所有日志流的副本均在线。
 - 对基于日志归档同步数据的备租户进行主备切换前，需要先对备租户进行备份和归档，具体操作可参见下文 [租户备份](#租户备份)。

#### 操作步骤

1. 执行如下命令查看备租户的主备关系

   ```shell
   [admin@test001 ~]$ obd cluster tenant show clusterB -g

   ```

   `-g` 用于控制是否展示与集群相关的主备图形信息，无需传值。输出如下：

   ```shell
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                     tenant base info                                                                                    |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops            | min_iops            | log_disk_size | iops_weight | tenant_role |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | sys         | SYS         | MYSQL              | RANDOM       | 1.0     | 1.0     | 2.0G        | 9223372036854775807 | 9223372036854775807 | 2.0G          | 1           | PRIMARY     |
   | B_a         | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 4.0G        | 10000               | 10000               | 5.0G          | 2           | STANDBY     |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                   standby tenant standby info                                                                   |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   | standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp         | err_code | error_comment | switchover_status | switchover_epoch | log_mode     |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   | B_a                 | NORMAL        | NORMAL      | 2025-06-06 15:46:42.566389 | 0        |               | NORMAL            | 0                | NOARCHIVELOG |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                         standby tenant`s primary info                                                                             |
   +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | standby_tenant_name | primary_tenant_info                                                                                                                                                         |
   +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | B_a                 | IP_LIST=10.10.10.1:2881,USER=standbyro@A_a,PASSWORD=******,TENANT_ID=1002,CLUSTER_ID=1694680744,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false |
   +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   query primary-standby relation ok

   ```
 2. 为备租户执行 Switchover 命令

   ```shell
   [admin@test001 ~]$ obd cluster tenant switchover clusterB B_a --tenant-root-password=******

   ```

   `--tenant-root-password` 选项用于指定主租户 root 用户的登录密码，主备租户的 root 用户密码是一致的。
 3. 再次查看原备租户的主备关系

   ```

   ```shell
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                     tenant base info                                                                                    |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops            | min_iops            | log_disk_size | iops_weight | tenant_role |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | sys         | SYS         | MYSQL              | RANDOM       | 1.0     | 1.0     | 2.0G        | 9223372036854775807 | 9223372036854775807 | 2.0G          | 1           | PRIMARY     |
   | B_a         | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 4.0G        | 10000               | 10000               | 5.0G          | 2           | PRIMARY     |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   query primary-standby relation ok

   clusterB:B_a
   └── clusterA:A_a

   ```

   输出中，原备租户的 `tenant_role` 已更新为 `PRIMARY`，且主备关系拓扑图也已更新。

Failover 操作适用于当主租户不可用时，可以将备租户切换为主租户继续提供服务。Failover 操作只会对日志文件做修改，不会对数据文件做修改。

由于 OceanBase 数据库的每个租户均有多个日志流，而 Failover 操作需要在操作执行完成后达到数据一致的状态，故系统会选择所有日志流的同步位点中 SCN 最小的值作为 Failover 的执行位点。执行Failover 操作后，租户下的所有日志流都会统一回退到该位点。

#### 注意

在一主多备场景中，将一个备租户切换为主租户后，其他的备租户无法切换到新主租户下，您需自行选择解耦或对其他备租户执行 Failover 操作生成新的主租户。

执行 Failover 操作前需确保满足如下条件：

- 主租户所在集群为不可用状态。
 - 备租户所在的集群为在线状态，且备租户的状态（`tenant_status`）需为 `NORMAL`。
 - 备租户所有日志流的副本均在线。

   ```

   ```
 2. 为备租户执行 failover 命令

   ```shell
   [admin@test001 ~]$ obd cluster tenant failover clusterB B_a --tenant-root-password=******

   ```

   `--tenant-root-password` 选项用于指定备租户 root 用户的登录密码，主备租户的 root 用户密码是一致的。
 3. 再次查看原备租户的主备关系

   ```

   `-g` 用于控制是否展示与集群相关的主备图形信息，无需传值。输出如下，`B_a` 租户的 `tenant_role` 更新为 `PRIMARY`。

   ```

您可执行 decouple 命令将备租户解耦为一个和主租户无关的普通租户，执行前需确保满足如下条件：

- 备租户所在的集群为在线状态，且备租户的状态（`tenant_status`）需为 `NORMAL`。
 - 备租户所有日志流的副本均在线。

   ```shell
   [admin@test001 ~]$ obd cluster tenant show clusterC -g

   ```

   ```shell
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                     tenant base info                                                                                    |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops            | min_iops            | log_disk_size | iops_weight | tenant_role |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | sys         | SYS         | MYSQL              | RANDOM       | 1.0     | 1.0     | 2.0G        | 9223372036854775807 | 9223372036854775807 | 2.0G          | 1           | PRIMARY     |
   | C_a         | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 4.0G        | 10000               | 10000               | 5.0G          | 2           | STANDBY     |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                   standby tenant standby info                                                                   |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   | standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp         | err_code | error_comment | switchover_status | switchover_epoch | log_mode     |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   | C_a                 | NORMAL        | NORMAL      | 2025-06-06 15:46:42.566389 | 0        |               | NORMAL            | 0                | NOARCHIVELOG |
   +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
   +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                         standby tenant`s primary info                                                                             |
   +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | standby_tenant_name | primary_tenant_info                                                                                                                                                         |
   +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   | C_a                 | IP_LIST=10.10.10.1:2881,USER=standbyro@B_a,PASSWORD=******,TENANT_ID=1002,CLUSTER_ID=1694681525,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false |
   +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   query primary-standby relation ok

   clusterA:A_a
   └── clusterB:B_a
       └── clusterC:C_a

   ```
 2. 为备租户执行解耦命令

   ```shell
   [admin@test001 ~]$ obd cluster tenant decouple clusterC C_a --tenant-root-password=******

   ```

   ```

   `-g` 用于控制是否展示与集群相关的主备图形信息，无需传值。输出如下，`C_a` 租户的 `tenant_role` 变为 `PRIMARY`。

   ```shell
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                     tenant base info                                                                                    |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops            | min_iops            | log_disk_size | iops_weight | tenant_role |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | sys         | SYS         | MYSQL              | RANDOM       | 1.0     | 1.0     | 2.0G        | 9223372036854775807 | 9223372036854775807 | 2.0G          | 1           | PRIMARY     |
   | C_a         | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 4.0G        | 10000               | 10000               | 5.0G          | 2           | PRIMARY     |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   query primary-standby relation ok

   ```

### 删除租户

该命令会自动删除对应的资源单元和资源池。

```shell
[admin@test001 ~]$ obd cluster tenant drop test -n obmysql --igs

```

选项说明：

- `-n`：待删除的租户名。
 - `--igs`：（可选）配置后，检查到租户下存在备租户时，强制执行 `obd cluster tenant drop`。需要注意，当待删除租户存在备租户时，租户删除后备租户将无法使用。

命令执行后输出如下：

```shell
Get local repositories ok
Open ssh connection ok
Connect to observer 10.10.10.1:2881 ok
Get deployment connections ok
Get standbys info ok
Drop tenant obmysql ok
Trace ID: 3ba162ce-83f4-11f0-a9cd-00163e2f7884
If you want to view detailed obd logs, please run: obd display-trace 3ba162ce-83f4-11f0-a9cd-00163e2f7884

```

## 备份恢复

使用 obd 对租户执行备份恢复前，请确保待备份或恢复的租户所在集群中存在 obshell，且 obshell 处于正常运行状态；确保已配置合适的备份目的端。

### 租户备份

本节以对部署名为 `test` 的集群的 `obmysql` 租户进行备份为例。您需根据实际情况修改示例，建议使用 OSS 作为备份的目的端。

#### 说明

不支持使用备份命令备份系统租户（sys 租户）。

1. 配置备份信息

       阿里云 OSS   NFS   AWS S3

   ```shell
   [admin@test001 ~]$ obd cluster tenant set-backup-config test obmysql -d 'oss://oceanbase-test-bucket/backup/data?host=****.aliyun-inc.com&access_id=****&access_key=****&delete_mode=delete&checksum_type=md5' -a 'oss://oceanbase-test-bucket/backup/log?host=****.aliyun-inc.com&access_id=****&access_key=****&delete_mode=delete&checksum_type=md5'

   ```

   `-d` 和 `-a` 分别用于指定存储数据备份文件和存储日志归档文件的目录路径，此处以使用 OSS 作为备份介质为例，您需根据实际备份文件路径进行替换。示例中，`oss://` 表示使用 OSS 作为备份介质类型，存储桶名 `oceanbase-test-bucket`，在存储桶中的路径是 `/backup/data` 和 `/backup/log`，同时使用 `?` 来分隔路径的其他参数，`host` 用于设置存储桶的主机地址，`access_id` 和 `access_key` 用于设置 OSS 的访问密钥，清理模式为 `delete`，使用 MD5 算法来校验备份数据的完整性。

   数据备份路径中参数的具体介绍可参见官网《OceanBase 数据库》文档 [SET DATA_BACKUP_DEST](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016885) 一文中 `data_backup_path` 部分内容。

   ```shell
   [admin@test001 ~]$ obd cluster tenant set-backup-config test obmysql -d 'file:///data/nfs/backup/data' -a 'file:///data/nfs/backup/log'

   ```

   `-d` 和 `-a` 分别用于指定存储数据备份文件和存储日志归档文件的目录路径，此处以使用 NFS 作为备份介质为例，您需根据实际备份文件路径进行替换。

   ```shell
   [admin@test001 ~]$ obd cluster tenant set-backup-config test obmysql -d 's3://oceanbase-test-bucket/backup/data?host=s3.<region>.amazonaws.com&access_id=****&access_key=****&s3_region=****&delete_mode=delete&checksum_type=crc32' -a 's3://oceanbase-test-bucket/backup/log?host=s3.<region>.amazonaws.com&access_id=****&access_key=****&s3_region=****&delete_mode=delete&checksum_type=crc32'

   ```

   `-d` 和 `-a` 分别用于指定存储数据备份文件和存储日志归档文件的目录路径，此处以使用 S3 作为备份介质为例，您需根据实际备份文件路径进行替换。示例中，`s3://` 表示使用 S3 作为备份介质类型，存储桶名 `oceanbase-test-bucket`，在存储桶中的路径是 `/backup/data` 和 `/backup/log`，同时使用 `?` 来分隔路径的其他参数，`host` 用于设置 Amazon S3 服务的域名，`access_id` 和 `access_key` 用于设置 AWS 服务的访问密钥，`s3_region` 在使用 S3 作为备份介质时为必选参数，表示 S3 的存储桶所在的地域，清理模式为 `delete`，使用 CRC32 算法来校验备份数据的完整性。

   数据备份路径中参数的具体介绍可参见官网《OceanBase 数据库》文档 [SET DATA_BACKUP_DEST](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016885) 一文中 `data_backup_path` 部分内容。
 2. 执行备份

       执行全量备份   执行增量备份

   ```shell
   [admin@test001 ~]$ obd cluster tenant backup test obmysql

   ```

   如需设置加密备份集的密码，可通过 `-e` 选项配置。

   ```shell
   [admin@test001 ~]$ obd cluster tenant backup test obmysql -m incremental

   ```

   `-m` 用于设置备份模式，配置为 `incremental` 表示备份模式为增量备份，未配置的情况下默认为 `full` 表示全量备份。如需设置加密备份集的密码，可通过 `-e` 选项配置。
 3. 查看备份任务

   ```shell
   [admin@test001 ~]$ obd cluster tenant backup-show test obmysql

   ```

   此处以备份租户为部署名 `test` 集群中的 `obmysql` 租户，OBServer 节点为 `10.10.10.1` 为例，您需根据实际情况修改示例。输出如下，`task_status` 列状态为 `COMPLETED` 表示备份成功。

   ```shell
   +---------------------------------------------------------------------------------------------------------+
   |                               backup task details of backup tenant obmysql                              |
   +-----------+----------------------------------+----------------------------------+-------------+---------+
   | tenant_id | start_timestamp                  | end_timestamp                    | task_status | comment |
   +-----------+----------------------------------+----------------------------------+-------------+---------+
   | 1002      | 2025-03-26T14:56:47.623096+08:00 | 2025-03-26T14:58:15.234362+08:00 | COMPLETED   | -       |
   +-----------+----------------------------------+----------------------------------+-------------+---------+

   ```
 4. （可选）取消备份任务

   ```shell
   [admin@test001 ~]$ obd cluster tenant backup-cancel test obmysql

   ```

   该命令可取消非 `COMPLETED` 状态的备份任务，执行取消备份命令后，可等几分钟后执行 `obd cluster tenant backup-show` 命令查看备份任务是否已取消。输出如下，`task_status` 列状态为 `CANCELED` 表示备份任务已取消。

   ```shell
   +--------------------------------------------------------------------------------------------------------------------+
   |                                    backup task details of backup tenant obmysql                                    |
   +-----------+----------------------------------+----------------------------------+-------------+--------------------+
   | tenant_id | start_timestamp                  | end_timestamp                    | task_status | comment            |
   +-----------+----------------------------------+----------------------------------+-------------+--------------------+
   | 1002      | 2025-03-26T15:15:49.728777+08:00 | 2025-03-26T15:16:18.547451+08:00 | CANCELED    | Operation canceled |
   +-----------+----------------------------------+----------------------------------+-------------+--------------------+

   ```

### 租户恢复

本节以在部署名为 `obtest` 的集群中创建 `restore_1` 租户，并将备份数据恢复到该租户为例，您需根据实际情况修改示例。

1. 执行恢复

   ```shell
   [admin@test001 ~]$ obd cluster tenant restore obtest restore_1 'oss://oceanbase-test-bucket/backup/data/?host=***.aliyun-inc.com&access_id=***&access_key=***' 'oss://oceanbase-test-bucket/backup/log/?host=***.aliyun-inc.com&access_id=***&access_key=***' --memory_size=2G --max_cpu=2 --log_disk_size=3G --max_iops=10000

   ```

   选项说明：

      - `--max_cpu`：（可选）设置待恢复租户的可用最大 CPU 数，最小值为 `1`，建议尽量与源租户保持一致。未设置时会自动获取集群剩余可用资源创建待恢复租户。
      - `--memory_size`：（可选）设置待恢复租户的可用内存，建议尽量与源租户保持一致。未设置时会自动获取集群剩余可用资源创建待恢复租户。
      - `--log_disk_size`：（可选）设置租户可用日志磁盘大小，最小可配置为 `2G`。
      - `--max_iops`：（可选）租户 IOPS 上限，最小值为 1024，如果不指定，则系统将根据以下规则自动计算 `--max_iops` 的值：

            - 如果已指定 `--min_iops` 的值，则 `--max_iops` 的值等于 `--min_iops` 的值。
            - 如果 `--min_iops` 也未指定，则 `--max_iops` 和 `--min_iops` 的值均为 `INT64_MAX`。
      - `-D`：（可选）若备份时为备份集设置了密码，可通过 `-D` 选项配置备份集设置的密码，如设置了多个密码需写出全部的密码，并使用英文逗号（`,`）间隔。

   ```shell
   [admin@test001 ~]$ obd cluster tenant restore obtest restore_1 'file:///data/nfs/backup/data' 'file:///data/nfs/backup/log' --memory_size=2G --max_cpu=2 --log_disk_size=3G --max_iops=10000

   ```

   选项说明：

   ```shell
   [admin@test001 ~]$ obd cluster tenant restore obtest restore_1 's3://oceanbase-test-bucket/backup/data?host=s3.<region>.amazonaws.com&access_id=****&access_key=****&s3_region=****' 's3://oceanbase-test-bucket/backup/log?host=s3.<region>.amazonaws.com&access_id=****&access_key=****&s3_region=****' --memory_size=2G --max_cpu=2

   ```

   选项说明：

            - 如果已指定 `--min_iops` 的值，则 `--max_iops` 的值等于 `--min_iops` 的值。
            - 如果 `--min_iops` 也未指定，则 `--max_iops` 和 `--min_iops` 的值均为 `INT64_MAX`。
      - `-D`：（可选）若备份时为备份集设置了密码，可通过 `-D` 选项配置备份集设置的密码，如设置了多个密码需写出全部的密码，并使用英文逗号（`,`）间隔。
 2. 查看恢复任务

   ```shell
   [admin@test001 ~]$ obd cluster tenant restore-show obtest restore_1

   ```

   此处以恢复租户为部署名 `obtest` 集群中的 `restore_1` 租户为例，您需根据实际情况修改示例。输出如下，`task_status` 列状态为 `SUCCESS` 表示恢复成功。

   ```shell
   +--------------------------------------------------------------------------------------------------------+
   |                            restore task details of restore tenant restore_1                            |
   +-----------+----------------------------------+---------------------------------+-------------+---------+
   | tenant_id | start_timestamp                  | end_timestamp                   | task_status | comment |
   +-----------+----------------------------------+---------------------------------+-------------+---------+
   | 1         | 2025-03-26T15:27:00.930773+08:00 | 2025-03-26T15:32:11.33193+08:00 | SUCCESS     | -       |
   +-----------+----------------------------------+---------------------------------+-------------+---------+

   ```
 3. 查看集群租户

   ```shell
   [admin@test001 ~]$ obd cluster tenant show obtest

   ```

   输出如下：

   ```shell
   +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
   |                                                                                    tenant basic info                                                                                    |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops            | min_iops            | log_disk_size | iops_weight | tenant_role |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
   | sys         | SYS         | MYSQL              | RANDOM       | 3.0     | 3.0     | 1G          | 9223372036854775807 | 9223372036854775807 | 2G            | 3           | PRIMARY     |
   | restore_1   | USER        | MYSQL              | RANDOM       | 2.0     | 2.0     | 2G          | 9223372036854775807 | 9223372036854775807 | 6G            | 2           | PRIMARY     |
   +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+

   ```
 4. （可选）取消恢复任务

   可执行如下命令取消租户恢复任务，需注意，仅可取消非 `SUCCESS` 状态的恢复任务。

   ```shell
   [admin@test001 ~]$ obd cluster tenant restore-cancel obtest restore_1

   ```

   命令执行成功后，可执行 `obd cluster tenant show` 命令查看集群中的租户（输出中无 `obtest` 租户），或执行 `obd cluster tenant restore-show` 命令查看恢复任务（报错无对应租户）。

## 许可证

OceanBase 集中式数据库 License 的载体是一个加密文件 `OceanBase.lic`。License 主要限制了集中式版的使用有效期限以及可使用的功能组件。具体介绍可参见 [License 管理](https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000006076889)。

### 加载许可证

```shell
[admin@test001 ~]$ obd license load test -f OceanBase.lic

```

此处以集群部署名为 test，许可证文件的相对路径为 OceanBase.lic 为例，您需根据实际集群部署名和许可证文件路径进行对应更新。集群部署名可通过执行 `obd cluster list` 命令查看，输出中 `Name` 字段即为部署名。

### 查看许可证

```shell
[admin@test001 ~]$ obd license show test

```

此处以集群部署名为 `test` 为例，您需根据实际集群部署名进行更新（`obd cluster list` 命令输出中 `Name` 字段）。

命令执行输出如下，具体字段介绍可参见 [License 管理](https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000006076889) 中 **DBA_OB_LICENSE 视图** 部分。

```shell
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                            license                                                                            |
+------------+------------+--------------+--------------+--------------+---------------------+---------------------+---------------------+-----------+----------+
| end_user   | license_id | license_code | license_type | product_type | issuance_date       | activation_time     | expired_time        | options   | node_num |
+------------+------------+--------------+--------------+--------------+---------------------+---------------------+---------------------+-----------+----------+
| Trial User | Trial ID   | Trial Code   | Trial        | SE           | 2025-04-01 10:04:11 | 2025-04-01 10:04:11 | 2025-09-28 10:04:11 | Unlimited | 1        |
+------------+------------+--------------+--------------+--------------+---------------------+---------------------+---------------------+-----------+----------+

```

## 相关文档

- 除使用 obd 命令外，您也可通过 SQL 命令创建用户租户，详细操作可参考 [创建租户](https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000006077287)。
 - 集群主备租户的介绍可参见 [物理备库容灾](https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000006077174) 章节。
 - obd cluster 命令的详细介绍可参见《OceanBase 安装部署工具》文档 [集群命令组](https://www.oceanbase.com/docs/common-obd-cn-1000000003754444)。
 - obd host 命令的详细介绍可参见《OceanBase 安装部署工具》文档 [主机命令组](https://www.oceanbase.com/docs/common-obd-cn-1000000003754450)。
 - obd license 命令的详细介绍可参见《OceanBase 安装部署工具》文档 [License 命令组](https://www.oceanbase.com/docs/common-obd-cn-1000000003754449)。

 上一篇 下一篇 ![有帮助](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) 咨询热线
