【发布时间】: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