接触 OceanBase 的人,最先要搞明白的一个概念就是 “租户”。文档里有一句话讲得很直接:用户租户和通常所见的数据库管理系统相对应,可以看作是一个数据库实例。
这句话的意思是,你以前用 MySQL、Oracle 时,一个实例就是一套独立的环境,有自己的用户、自己的表、自己的系统表;在 OceanBase 里,这套 “独立环境” 就是用户租户。只不过它不是一台独立的机器,而是由 OceanBase 的系统租户根据业务需要创建出来的。
一个用户租户具备一个实例该有的所有特性,主要包括:
- 可以创建自己的用户;
- 可以创建数据库(这里注意,只有 MySQL 兼容模式的租户支持 “数据库” 这个层级,Oracle 兼容模式用 schema 的概念)以及表等各种对象;
- 有自己独立的系统表和系统视图;
- 有自己独立的系统变量;
- 以及数据库实例具备的其他特性。
还有一个关键点:所有用户数据的元信息都存在用户租户自己下面,所以每个租户都有自己的命名空间,租户之间彼此隔离、互不可访问。系统租户负责管理所有用户租户,两者是上下级的层级关系。
理解租户最好的方式,就是把它当成 “一个集群里切出来的多个互相看不见的数据库实例”。想清楚这一点,后面很多权限、隔离、查询的问题就都好理解了。