【问题标题】:How to get all tablespaces that a table belongs to in Oracle?Oracle中如何获取一个表所属的所有表空间?
【发布时间】:2021-09-30 19:12:51
【问题描述】:

我知道如何获取一个表所属的 ONE 表空间:

select table_name,tablespace_name from dba_tables where owner = 'OWNER'
order by table_name;

这个查询返回

TABLE_NAME | TABLESPACE_NAME
 ----------------------------
 TABLE1     | TABLESPACE_A
 TABLE2     | TABLESPACE_A
 TABLE3     | TABLESPACE_B

但是,这只返回每个表所属的表空间之一。例如,我知道所有表也是 USERS 表空间的一部分,但上面的查询没有显示,它只显示每个表一个表空间。

那么如何查看一个表所属的所有表空间,包括 USERS 表空间?

【问题讨论】:

  • 你如何“知道”所有表都属于USERS表空间?
  • 一张表(或特定的表分区、LOB段或索引)只能属于一个表空间。它们不能跨多个表空间拆分。如果DBA_TABLES 说TABLE3 在TABLESPACE_B 中,那么这是它唯一存在的地方。如果表包含 LOB 段(可以有自己的存储子句),那么它们可能存在于其他地方,但这将在不同的视图下进行跟踪,如 DBA_SEGMENTS。
  • @mathguy 因为例如,如果我做select default_tablespace from dba_users where username = 'USER1',它会返回用户。但我知道 USER1 可以访问 TABLESPACE_A 和 TABLESPACE_B 中的表,因为他可以从中进行选择。除非我正在检查用户错误地访问了哪些表空间?
  • 这是一个不同的问题。在您最初的问题中,您询问了(单个)表使用的表空间。现在您正在询问属于 user 的表空间。你需要哪一个?此外,您是否想知道用户可以访问哪些表空间(甚至是他还没有用于任何事情的表空间),还是只知道他实际上已经使用过的表空间?所有这些问题都可以回答,但你需要问一个非常明确和准确的问题。
  • 不,您将“用户”带入有关“表格”的讨论中。您说您“知道”所有表都使用USERS 表空间,因为您可以看到用户 具有默认表空间USERS。这和什么有什么关系?你“知道”的东西完全是错误的。

标签: sql oracle tablespace


【解决方案1】:

好的,这里是:

“分配给一个表的所有表空间”的整个概念是无效的。一张表可以属于一个且只能属于一个表空间。

spo demo.log
select owner,
       segment_name,
       segment_type,
       tablespace_name
from dba_segments
order by owner,
         segment_name,
         segment_type,
         tablespace_name
;
spo off
edit demo.log

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 2014-09-23
    • 1970-01-01
    • 2016-03-05
    • 2021-06-23
    • 2012-01-29
    • 2022-12-12
    • 2011-04-14
    相关资源
    最近更新 更多