---
title: "设置变量 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 设置变量 您可以通过系统变量的设置使 OceanBase 数据库的行为符合您业务的要求。 变量分类 OceanBase 数据库的系统变量分为全局变量和 Session 变量： 全局变量：表示 Global 级别的修改，数据库同一租户内的不同用户共享全局变量。全局变量的修改不会随会话的退出而失效。此外，全局变量修改后，…
---
切换语言

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

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

# 设置变量

更新时间：2026-02-19 18:11:17

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/700.reference/200.system-management/200.configuration-management/300.set-variables.md)  

您可以通过系统变量的设置使 OceanBase 数据库的行为符合您业务的要求。

## 变量分类

OceanBase 数据库的系统变量分为全局变量和 Session 变量：

- 全局变量：表示 Global 级别的修改，数据库同一租户内的不同用户共享全局变量。全局变量的修改不会随会话的退出而失效。此外，全局变量修改后，对当前已打开的 Session 不生效，需要重新建立 Session 才能生效。
 - Session 变量：表示 Session 级别的修改。当客户端连接到数据库后，数据库会复制全局变量来自动生成 Session 变量。Session 变量的修改仅对当前 Session 生效。

名称以 "_" 开头的变量称为隐藏变量，如：`_primary_zone_entity_count`。仅供开发人员在故障排查或紧急运维时使用。

## 系统变量相关视图

MySQL 租户下的系统变量相关视图如下：

- `INFORMATION_SCHEMA.GLOBAL_VARIABLES`：记录当前租户下的全局变量信息。
 - `INFORMATION_SCHEMA.SESSION_VARIABLES`：记录当前租户下的 Session 变量信息。
 - `DBA_OB_SYS_VARIABLES`：记录当前租户下全局变量的修改记录及变量的默认值信息。

Oracle 租户下的系统变量相关视图如下：

- `SYS.TENANT_VIRTUAL_GLOBAL_VARIABLE`：记录当前租户下的全局变量信息。
 - `SYS.TENANT_VIRTUAL_SESSION_VARIABLE`：记录当前租户下的 Session 变量信息。
 - `DBA_OB_SYS_VARIABLES`：记录当前租户下全局变量的修改记录及变量的默认值信息。

有关视图的详细介绍，请参见《参考指南》中的 **系统视图**。

## 设置变量

#### 说明

- 设置 Session 级别的变量仅对当前 Session 有效，对其他 Session无效。设置 Global 级别的变量对当前 Session 无效，需要重新登录建立新的 Session 才会生效。
 - 设置 Global 级别变量要求当前用户拥有 `SUPER` 权限或 `ALTER SYSTEM` 权限。

设置 Session/Global 级别变量的 SQL 语法如下：

```sql
SET VARIABLE_NAME = 'VALUE'
SET GLOBAL VARIABLE_NAME = 'VALUE'

```

通过 SQL 语句设置 Session/Global 级别变量。示例如下：

```sql
obclient> SET ob_query_timeout = 20000000;
obclient> SET GLOBAL ob_query_timeout = 20000000;

```

对于变量值类型为 `INT`, 且在 `SHOW VARIABLE` 命令中显示 ON/OFF 或者 True/False 的变量，可以通过如下任意方式设置 Session/Global 级别变量。示例如下：

```sql
SET foreign_key_checks = ON;
SET foreign_key_checks = 1;
SET GLOBAL foreign_key_checks = ON;
SET GLOBAL foreign_key_checks = 1;

```

对于全局变量、只读变量，我们在创建租户时也能对其进行设置，语法如下：

```sql
CREATE TENANT [IF NOT EXISTS] tenant_name
     [tenant_characteristic_list] [opt_set_sys_var];

tenant_characteristic_list:
  tenant_characteristic [, tenant_characteristic...]

tenant_characteristic:
      COMMENT 'string'  
    | {CHARACTER SET | CHARSET} [=] charsetname
    | COLLATE [=]  collationname
    | PRIMARY_ZONE [=] zone  
    | RESOURCE_POOL_LIST [=](poolname [, poolname...])
    | LOCALITY [=] 'locality description'

opt_set_sys_var:
  {SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...

```

在创建租户时，将只读变量 `ob_compatibility_mode` 初始化为 'mysql' 或者 'oracle'，将全局变量 `ob_tcp_invited_nodes` 初始化为 '%'。示例如下：

```sql
obclient> CREATE TENANT IF NOT EXISTS test_tenant
charset='utf8mb4', primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1')
SET ob_compatibility_mode='oracle', ob_tcp_invited_nodes='%';

```

## 查看变量

- 通过 `SHOW VARIABLES` 语句查看。

  查看 Session/Global 级别变量的 SQL 语法如下：

  ```sql
  SHOW VARIABLES [LIKE 'pattern' | WHERE expr]
  SHOW GLOBAL VARIABLES [LIKE 'pattern' | WHERE expr]

  ```

  通过 SQL 语句查询 Session/Global 级别变量。示例如下：

  ```sql
  obclient> SHOW VARIABLES LIKE 'ob_query_timeout';
  obclient> SHOW VARIABLES WHERE VARIABLE_NAME = 'ob_query_timeout';
  obclient> SHOW GLOBAL VARIABLES LIKE 'ob_query_timeout';
  obclient> SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME = 'ob_query_timeout';
  obclient> SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE 'ob_query_timeout';
  +------------------+----------+
  | Variable_name    | Value    |
  +------------------+----------+
  | ob_query_timeout | 10000000 |
  +------------------+----------+
  1 row in set (0.00 sec)

  ```

  返回结果中的列属性如下表所示：

  | 列名 | 含义 |
  | --- | --- |
  | Variable_name | 变量名 |
  | Value | 变量值 |
 - 通过 `SELECT` 语句，在本租户相关视图中查看 Session/Global 级别变量信息。SQL 语法如下：

  ```sql
  SELECT * FROM view_name WHERE VARIABLE_NAME = '[var name]'

  ```

  在 Oracle 模式下，通过 `SELECT` 语句，在本租户相应视图中查看 Session/Global 级别变量信息。示例如下：

  ```shell
  obclient> SELECT * FROM SYS.TENANT_VIRTUAL_GLOBAL_VARIABLE WHERE VARIABLE_NAME = 'ob_query_timeout';

  obclient> SELECT * FROM SYS.TENANT_VIRTUAL_SESSION_VARIABLE WHERE VARIABLE_NAME = 'ob_query_timeout';

  ```

  MySQL 模式下，通过 `SELECT` 语句，在本租户视图中查看 Session/Global 级别变量信息。示例如下：

  ```shell
  obclient> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'ob_query_timeout';

  obclient> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME = 'ob_query_timeout';

  ```
 - 如果需要查询 Global 级别变量的修改记录及变量的默认值，还可以使用如下语句查询。

     - MySQL 模式

      ```shell
      obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_SYS_VARIABLES WHERE NAME='ob_query_timeout';

      ```
     - Oracle 模式

      ```shell
      obclient[SYS] > SELECT * FROM SYS.DBA_OB_SYS_VARIABLES WHERE NAME='ob_query_timeout';

      ```

## 更多信息

更多变量参考信息，请参见《系统参考》中的 **系统变量**。

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