如何找出表存储的位置?

时间:2011-10-17 18:23:49

标签: sql oracle

我有一个表的名称,我想找出oracle存储的文件。 有办法吗?

非常感谢,抱歉我的英语很差!

1 个答案:

答案 0 :(得分:1)

Oracle在名为tablespaces的逻辑数据存储上保存其表。表空间抽象表的数据的实际OS位置。

如果您拥有该对象,可以通过查询user_tables找到该表空间。

select TABLE_NAME,TABLESPACE_NAME 
from USER_TABLES 
where TABLE_NAME='<your table name>';

或all_tables如果您不拥有它但可以访问它。

select OWNER,TABLE_NAME,TABLESPACE_NAME 
from ALL_TABLES 
where OWNER='<owner of the table>' 
and TABLE_NAME='<your table name>';

表空间有一个或多个数据文件,它们是磁盘存储的实际分配。存储被指定为范围,其表示数据文件的块,即磁盘空间。如果表空间有多个数据文件,则可以从任何这些文件中为表分配范围。

如果要查找扩展区所在的文件,则需要访问dba_extents和dba_data_files。 file_name是数据文件的绝对OS路径。

select F.FILE_NAME, E.OWNER, E.SEGMENT_NAME,E.SEGMENT_TYPE
from dba_extents E 
     join dba_data_files F 
          on E.FILE_ID = F.FILE_ID
where E.OWNER='<owner of the table>' 
and E.SEGMENT_NAME='<your table name>';

确保替换'和实际的所有者和表名。