【问题标题】:How to find Oracle database object name from segment name?如何从段名中查找 Oracle 数据库对象名?
【发布时间】:2019-10-20 09:14:29
【问题描述】:

我已将所有表和索引移至其他表空间。操作完成后,user_tablesuser_indexes 中的所有对象都有新的表空间名称。

但是在user_segments中,还有一些旧的表空间名称:

  • Partition_name:null,
  • Segment_type:表或索引,
  • Segment_subtype:ASSM。

问题:

  1. 为什么 user_indexes 中没有具有旧表空间名称的对象,而 user_segments 中的某些段具有旧表空间?

  2. 如何从段名中找出数据库对象名,以便它们也可以移动到新的表空间?

【问题讨论】:

    标签: database oracle12c tablespace


    【解决方案1】:

    我不是 DBA。

    不管怎样,看看有没有道理。

    路径如下:表的数据在数据块>extent>segment>tablespace中。

    SQL> select t.table_name,
      2         e.extent_id,
      3         s.segment_name,
      4         s.segment_type,
      5         s.segment_subtype,
      6         s.tablespace_name
      7  from user_tables t join user_extents e on e.segment_name = t.table_name
      8  join user_segments s on s.segment_name = e.segment_name
      9  where t.table_name = 'EMP';
    
    TABLE_NAME  EXTENT_ID SEGMENT_NAME SEGMENT_TYPE SEGMENT_SU TABLESPACE_NAME
    ---------- ---------- ------------ ------------ ---------- --------------------
    EMP                 0 EMP          TABLE        ASSM       USERS
    
    SQL>
    

    显然,segment name = table name 这意味着如果您想查找属于某个表空间的对象,那么这可能就是您要查找的内容:

    SQL> select s.segment_name, s.segment_type
      2  from user_segments s
      3  where s.tablespace_name = 'USERS';
    
    SEGMENT_NAME SEGMENT_TYPE
    ------------ ------------
    T1           TABLE
    T2           TABLE
    EMP          TABLE
    DEPT         TABLE
    <snip>
    PK_SC1       INDEX
    SYS_C007864  INDEX
    SYS_C007928  INDEX
    33 rows selected.
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2022-01-21
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多