database - 如何从段名中查找 Oracle 数据库对象名?
问题描述
我已将所有表和索引移至其他表空间。操作后, user_tables和user_indexes中的所有对象都具有新的表空间名称。
但是在user_segments中,还有一些旧的表空间名称:
- 分区名称:空,
- Segment_type:表或索引,
- Segment_subtype:ASSM。
问题:
为什么 user_indexes 中没有具有旧表空间名称的对象,而user_segments中的某些段具有旧表空间?
如何从段名称中找出数据库对象名称,以便它们也可以移动到新的表空间?
解决方案
我不是 DBA。
无论如何,看看它是否有意义。
路径看起来是这样的:表的数据在数据块 > 范围 > 段 > 表空间中。
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>
推荐阅读
- python-2.7 - Python。GZIP 解压错误:解压数据时出现错误 -3:标头检查不正确
- python - 当某些字典重复时,在python中合并两个字典列表
- javascript - 画布游戏空格键滚动浏览器
- c# - C#、Winforms 设置
- node.js - Express-Cassandra 在单个列的同一查询中从 SET 数据类型进行多值搜索
- python - Python类变量更改未保存
- typescript - 是否可以在 TypeScript 中输入检查字符串别名?
- python - LEADER_NOT_AVAILABLE - 码头集装箱
- python - 芹菜函数未调用
- hiveql - 如何在 Hive 中进行逐行计数