【问题标题】:Difference between dba_segments and dba_users when trying to identify list of schema in Oracle DB尝试识别 Oracle DB 中的模式列表时 dba_segments 和 dba_users 之间的区别
【发布时间】:2017-04-29 03:59:02
【问题描述】:

我试图找出在数据库中创建的列表模式,我遇到了许多答案,例如 thisthis,它们试图告诉使用 dba_segments 或使用 dba_users

但是当我在我的数据库中使用它们时,结果会有很大的不同。

我正在寻找答案来解释哪个是正确的(dba_segmentsdba_users)以及为什么,所以请不要认为我的问题是“如何获取数据库中所有可用架构的列表”。

【问题讨论】:

    标签: database oracle schema


    【解决方案1】:

    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 正确列出了数据库中所有可用的架构/用户,请确认?
    • 抱歉@hagrawal - 我在您留下此评论时修改了我的答案 - 请刷新。是的,如果您想要数据库中的用户列表,请查询 DBA_USERS
    • 完全没问题。你回答得很好,谢谢你的时间。
    • 请注意,您可以指定子句SEGMENT CREATION DEFERRED(或者甚至使用参数DEFERRED_SEGMENT_CREATION 全局设置它)。那么你可能有表或索引,但没有段,只要它们不包含任何数据。
    • 1a 正确(默认情况下),除了系统 tsblespace 中的代码外,视图不占用任何空间。 2) 将第一个数据插入表中后自动创建段
    猜你喜欢
    • 2015-08-30
    • 2023-03-17
    • 2011-06-11
    • 2015-04-02
    • 1970-01-01
    • 2016-01-29
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多