租户级
在普通租户下,拥有 super 权限的用户,可以设置当前租户的 READ ONLY属性。
- 设置方法
SET GLOBAL READ_ONLY={ON | OFF};
或
SET @@GLOBAL.READ_ONLY={ON | OFF};
- 查看状态
显示当前租户的 READ ONLY 属性。
- 通过SHOW TENANT STATUS语句
SHOW TENANT STATUS;
例如:
OceanBase (admin@test)> show tenant status;
+--------+-----------+
| Tenant | State |
+--------+-----------+
| ten1 | read only |
+--------+-----------+
1 row in set (0.01 sec)
- 通过查看系统变量方式查询
show global variables like 'read_only'
或者
select @@global.read_only
DB级
- 设置方法
ALTER DATABASE database_name {READ ONLY | READ WRITE};
- 查看状态
有以下两种方式,显示当前租户下数据库的READ ONLY属性。
- 通过SHOW DATABASES STATUS语句
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查询
OceanBase (admin@test)> select * from oceanbase.__tenant_virtual_database_status;
+----------+-----------------+---------+---------------+
| db | host | port | read_only |
+----------+------------------+---------+-----------------+
| mysql | 172.24.65.24 | 55410 | 0 |
| test | 172.24.65.24 | 55410 | 1 |
+----------+-----------------+----------+-----------------+
2 rows in set (0.00 sec)
oceanbase.__tenant_virtual_database_status 可以查询当前租户所有数据库在所有 OBServer 上的状态信息。
TABLE级
- 设置方法
ALTER TABLE table_name [SET] {READ ONLY | READ WRITE}
- 查看状态
有以下两种方式,显示表的READ ONLY属性。
- 通过SHOW TABLE STATUS语句
SHOW TABLE STATUS
此项功能还在实现中。
- 通过内部表 oceanbase.__tenant_virtual_table_status查询
oceanbase.__tenant_virtual_table_status可以查询当前租户所有数据库中所有表在所有OBServer上的状态信息。
注意事项
- 各级 READ ONLY 的生效范围:租户级、数据库级、表级的READ ONLY属性,具有从大到小逐级继承。
例如,租户级为READ ONLY,无论数据库或表级是否设置 READ ONLY 都为 READ ONLY。
- 为兼容 MySQL,拥有SUPER权限的用户,可以对READ ONLY对象进行正常读写。