【发布时间】:2017-04-29 03:59:02
【问题描述】:
我试图找出在数据库中创建的列表模式,我遇到了许多答案,例如 this 和 this,它们试图告诉使用 dba_segments 或使用 dba_users。
但是当我在我的数据库中使用它们时,结果会有很大的不同。
我正在寻找答案来解释哪个是正确的(dba_segments 或 dba_users)以及为什么,所以请不要认为我的问题是“如何获取数据库中所有可用架构的列表”。
【问题讨论】:
我试图找出在数据库中创建的列表模式,我遇到了许多答案,例如 this 和 this,它们试图告诉使用 dba_segments 或使用 dba_users。
但是当我在我的数据库中使用它们时,结果会有很大的不同。
我正在寻找答案来解释哪个是正确的(dba_segments 或 dba_users)以及为什么,所以请不要认为我的问题是“如何获取数据库中所有可用架构的列表”。
【问题讨论】:
dba_segments 显示 SEGMENTS - 由架构拥有
你可以有一个没有段的模式——使用段的对象通常可以被认为是表或索引。例如,用户可以拥有同义词或 PL/SQL 单元,但没有段。
这是我的 12c 系统的分段类型列表
HR@orcl?? >select distinct segment_type from dba_segments;
SEGMENT_TYPE
LOBINDEX
INDEX PARTITION
ROLLBACK
NESTED TABLE
TABLE PARTITION
LOB PARTITION
LOBSEGMENT
INDEX
TABLE
CLUSTER
dba_users 将向您显示数据库中的每个用户,无论他们是否拥有“数据”
以下是查找没有段的 SCHEMAS 或一种方式的方法
HR@orcl?? >select distinct username
2 from dba_users
3 minus
4 select distinct owner
5 from dba_segments;
USERNAME
ANONYMOUS
APEX_LISTENER
APEX_PUBLIC_USER
APEX_REST_PUBLIC_USER
APPQOSSYS
BASIC_PRIVS
BI...
【讨论】:
select * from ALL_OBJECTS where OBJECT_TYPE like '%SEGMENT%';) 时,我看不到任何段,我确信我在数据库中有很多段。如果我正确理解了您的答案,那么dba_users 正确列出了数据库中所有可用的架构/用户,请确认?
SEGMENT CREATION DEFERRED(或者甚至使用参数DEFERRED_SEGMENT_CREATION 全局设置它)。那么你可能有表或索引,但没有段,只要它们不包含任何数据。