租户级

    在普通租户下,拥有 super 权限的用户,可以设置当前租户的 READ ONLY属性。

    • 设置方法
    1. SET GLOBAL READ_ONLY={ON | OFF};
    2. SET @@GLOBAL.READ_ONLY={ON | OFF};
    • 查看状态

    显示当前租户的 READ ONLY 属性。

    • 通过SHOW TENANT STATUS语句
    1. SHOW TENANT STATUS;

    例如:

    1. OceanBase (admin@test)> show tenant status;
    2. +--------+-----------+
    3. | Tenant | State |
    4. +--------+-----------+
    5. | ten1 | read only |
    6. +--------+-----------+
    7. 1 row in set (0.01 sec)
    • 通过查看系统变量方式查询
    1. show global variables like 'read_only'

    或者

    1. select @@global.read_only

    DB级

    • 设置方法
    1. ALTER DATABASE database_name {READ ONLY | READ WRITE};
    • 查看状态

    有以下两种方式,显示当前租户下数据库的READ ONLY属性。

    • 通过SHOW DATABASES STATUS语句
    1. SHOW DATABASES STATUS [LIKE 'pattern' | WHERE expr]

    显示数据库的状态,其中一列显示是否为 READ ONLY,它有三种状态:READ ONLY、 READ WRITE、PARTIALLY READ ONLY。READ ONLY表示数据库只读, READ WRITE表示数据库可读写,PARTIALLY READ ONLY 表示当前各节点处于状态变化的中间状态,部分节点是 READWRITE,部分节点是 READ ONLY。该语句可取一个自选的LIKE或WHERE子句,该子句指示哪些数据库可以匹配。

    • 通过内部表oceanbase.__tenant_virtual_database_status查询
    1. OceanBase (admin@test)> select * from oceanbase.__tenant_virtual_database_status;
    2. +----------+-----------------+---------+---------------+
    3. | db | host | port | read_only |
    4. +----------+------------------+---------+-----------------+
    5. | mysql | 172.24.65.24 | 55410 | 0 |
    6. | test | 172.24.65.24 | 55410 | 1 |
    7. +----------+-----------------+----------+-----------------+
    8. 2 rows in set (0.00 sec)

    oceanbase.__tenant_virtual_database_status 可以查询当前租户所有数据库在所有 OBServer 上的状态信息。

    TABLE级

    • 设置方法
    1. ALTER TABLE table_name [SET] {READ ONLY | READ WRITE}
    • 查看状态

    有以下两种方式,显示表的READ ONLY属性。

    • 通过SHOW TABLE STATUS语句
    1. SHOW TABLE STATUS

    此项功能还在实现中。

    • 通过内部表 oceanbase.__tenant_virtual_table_status查询

    oceanbase.__tenant_virtual_table_status可以查询当前租户所有数据库中所有表在所有OBServer上的状态信息。

    注意事项

    1. 各级 READ ONLY 的生效范围:租户级、数据库级、表级的READ ONLY属性,具有从大到小逐级继承。

    例如,租户级为READ ONLY,无论数据库或表级是否设置 READ ONLY 都为 READ ONLY。

    1. 为兼容 MySQL,拥有SUPER权限的用户,可以对READ ONLY对象进行正常读写。