obv3版本,登录集群sys租户后,如何查询所有租户下的schema,以及每个shema下的table,只需要属性,不需要table内容。

【 使用环境 】测试环境
【 使用版本 】v3
【问题描述】obv3版本,登录集群sys租户后,如何查询所有租户下的schema,以及每个shema下的table?(只需要属性,不需要table内容)

在博客里发现一个方法,使用change tenant,切换到目标租户下再查询,但是社区里搜了搜,不太像常规方法:
ob 支持从系统租户切换到用户租户吗 - 社区问答- OceanBase社区-分布式数据库

是否有其他方法可以查询呢?

@论坛小助手

根据文档库中的信息,在 OceanBase V4.x 版本中提供了多种方式来查询租户下的 schema 信息以及每个 schema 下的表信息。尽管您提到的是 V3 版本,V4.x 版本中的大部分查询方式仍然适用,并且这些查询方式通常不会依赖于具体的数据内容,而是侧重于元数据的展示。 [1]

  1. 查询所有租户下的 schema
    在系统租户下,您可以使用如下 SQL 语句来查询所有租户的数据库(schema)信息:

    SELECT * FROM CDB_OB_DATABASES;
    

    或者使用 information_schema.SCHEMATA 视图来获取 MySQL 租户下的所有 schema 信息:

    SELECT * FROM information_schema.SCHEMATA;
    
  2. 查询每个 schema 下的 table
    要查询特定 schema 下的所有表信息,您可以使用 CDB_TABLES 视图:

    SELECT * FROM CDB_TABLES WHERE TABLE_SCHEMA = '目标schema名';
    

    对于 MySQL 租户,还可以使用 information_schema.tables 视图来查询表信息:

    SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA = '目标schema名';
    

    如果您希望一次性获取所有租户及其 schema 下的所有表信息,可以尝试构造一个联合查询或者编写存储过程来遍历所有租户并查询其下的表信息。不过请注意,这种方式可能会因为涉及到大量数据而影响性能,建议仅在必要时使用。

以上方法允许您在不切换租户的情况下查询所有租户的 schema 信息以及每个 schema 下的表信息。虽然您提到的方法(使用 CHANGE TENANT 切换租户)确实是一种解决方案,但在系统租户中直接查询通常被认为更加高效和安全。 [1]

更多信息请查看:

  1. 3.x 与 4.x 视图变更
  2. 查看 Locality

你可以用dblink的方式 查询其他租户下的库和table信息
change tenant 这个方式 不是官方推荐的用户 不推荐使用

都想查一下,就是想通过sys租户,收集每个租户下数据库/模式信息,以及每个数据库/模式下的表信息。

obv4,我使用oceanbase.CDB_TABLES可以查询到所有租户的表信息。
obv3,没找到类似的视图或表可以查询。

mysql模式下 通过这个表__all_table_v2查询表信息 __all_database这个表是schema信息 你查询一下

__all_database和__all_table_v2,好像只能查到当前租户的信息,我这边只有sys租户的登录信息,想从sys租户获取到mysql租户的数据库和表信息,这个怎么查呢

ob不支持跨租户的 那就只能通过创建dblink的方式了

我在sys租户找到了这两个表:oceanbase.gv$database和oceanbase.gv$table,我从这两个表里获取应该是可以的吧。

这个两个视图 查的信息是 __all_databasehe __all_table 也是可以 你可以查询试试

sys租户的__all_database和__all_table中只有tenant_id=1的信息,gv$database和gv$table是所有租户的信息。我就用gv$database和gv$table去查吧。

可以 用这个查询